+
diff --git a/components/LanguageSwitcher/languageSwitcher.module.css b/components/LanguageSwitcher/languageSwitcher.module.css
index 89ce55b56..6c85a22aa 100644
--- a/components/LanguageSwitcher/languageSwitcher.module.css
+++ b/components/LanguageSwitcher/languageSwitcher.module.css
@@ -1,6 +1,5 @@
.button {
background-color: transparent;
- color: var(--Base-Text-High-contrast);
font-family: var(--typography-Caption-Regular-fontFamily);
font-size: var(--typography-Caption-Regular-fontSize);
border-width: 0;
@@ -13,6 +12,14 @@
width: 100%;
}
+.burgundy .button {
+ color: var(--Base-Text-High-contrast);
+}
+
+.pale .button {
+ color: var(--Primary-Dark-On-Surface-Text);
+}
+
.chevron {
justify-self: end;
transition: transform 0.3s;
@@ -45,29 +52,43 @@
.dropdown {
position: absolute;
- top: 2.25rem;
background-color: var(--Base-Surface-Primary-light-Normal);
border-radius: var(--Corner-radius-Large);
box-shadow: 0px 0px 14px 6px #0000001a;
display: none;
min-width: 12.5rem;
z-index: 1;
+ }
+ .top .dropdown {
+ top: 2.25rem;
bottom: auto;
}
- /* Triangle above dropdown */
+ .top .dropdown::before {
+ top: -1.25rem;
+ transform: rotate(180deg);
+ }
+
+ /* Triangle dropdown */
.dropdown::before {
content: "";
position: absolute;
- top: -1.25rem;
right: 2.4rem;
- transform: rotate(180deg);
border-width: 0.75rem;
border-style: solid;
border-color: var(--Base-Surface-Primary-light-Normal) transparent
transparent transparent;
}
+ .bottom .dropdown {
+ top: auto;
+ bottom: 2.25rem;
+ }
+
+ .bottom .dropdown::before {
+ top: 100%;
+ }
+
.button {
grid-template-columns: repeat(3, max-content);
font-size: var(--typography-Body-Bold-fontSize);
diff --git a/components/LanguageSwitcher/variants.ts b/components/LanguageSwitcher/variants.ts
new file mode 100644
index 000000000..0fac0e5da
--- /dev/null
+++ b/components/LanguageSwitcher/variants.ts
@@ -0,0 +1,20 @@
+import { cva } from "class-variance-authority"
+
+import styles from "./languageSwitcher.module.css"
+
+export const languageSwitcherVariants = cva(styles.languageSwitcher, {
+ variants: {
+ color: {
+ burgundy: styles.burgundy,
+ pale: styles.pale,
+ },
+ position: {
+ header: styles.top,
+ footer: styles.bottom,
+ },
+ defaultVariants: {
+ color: "burgundy",
+ position: "top",
+ },
+ },
+})
diff --git a/stores/main-menu.ts b/stores/main-menu.ts
index 6818d4cdb..454477f08 100644
--- a/stores/main-menu.ts
+++ b/stores/main-menu.ts
@@ -6,18 +6,20 @@ interface DropdownState {
isHamburgerMenuOpen: boolean
isMyPagesMobileMenuOpen: boolean
isMyPagesMenuOpen: boolean
- isLanguageSwitcherOpen: boolean
+ isHeaderLanguageSwitcherOpen: boolean
+ isFooterLanguageSwitcherOpen: boolean
toggleHamburgerMenu: () => void
toggleMyPagesMobileMenu: () => void
toggleMyPagesMenu: () => void
- toggleLanguageSwitcher: () => void
+ toggleLanguageSwitcher: (location: "header" | "footer") => void
}
const useDropdownStore = create((set) => ({
isHamburgerMenuOpen: false,
isMyPagesMobileMenuOpen: false,
isMyPagesMenuOpen: false,
- isLanguageSwitcherOpen: false,
+ isHeaderLanguageSwitcherOpen: false,
+ isFooterLanguageSwitcherOpen: false,
toggleHamburgerMenu: () =>
set(
({ isHamburgerMenuOpen, isMyPagesMenuOpen, isMyPagesMobileMenuOpen }) => {
@@ -39,7 +41,8 @@ const useDropdownStore = create((set) => ({
isMyPagesMenuOpen,
isMyPagesMobileMenuOpen,
isHamburgerMenuOpen,
- isLanguageSwitcherOpen,
+ isHeaderLanguageSwitcherOpen,
+ isFooterLanguageSwitcherOpen,
}) => {
// Close the other dropdowns if they're open
if (!isMyPagesMobileMenuOpen) {
@@ -49,8 +52,11 @@ const useDropdownStore = create((set) => ({
if (isHamburgerMenuOpen) {
set({ isHamburgerMenuOpen: false })
}
- if (isLanguageSwitcherOpen) {
- set({ isLanguageSwitcherOpen: false })
+ if (isHeaderLanguageSwitcherOpen) {
+ set({ isHeaderLanguageSwitcherOpen: false })
+ }
+ if (isFooterLanguageSwitcherOpen) {
+ set({ isFooterLanguageSwitcherOpen: false })
}
}
return { isMyPagesMobileMenuOpen: !isMyPagesMobileMenuOpen }
@@ -60,7 +66,8 @@ const useDropdownStore = create((set) => ({
set(
({
isHamburgerMenuOpen,
- isLanguageSwitcherOpen,
+ isHeaderLanguageSwitcherOpen,
+ isFooterLanguageSwitcherOpen,
isMyPagesMenuOpen,
isMyPagesMobileMenuOpen,
}) => {
@@ -72,32 +79,40 @@ const useDropdownStore = create((set) => ({
if (isMyPagesMobileMenuOpen) {
set({ isMyPagesMobileMenuOpen: false })
}
- if (isLanguageSwitcherOpen) {
- set({ isLanguageSwitcherOpen: false })
+ if (isHeaderLanguageSwitcherOpen) {
+ set({ isHeaderLanguageSwitcherOpen: false })
+ }
+ if (isFooterLanguageSwitcherOpen) {
+ set({ isFooterLanguageSwitcherOpen: false })
}
}
return { isMyPagesMenuOpen: !isMyPagesMenuOpen }
}
),
- toggleLanguageSwitcher: () =>
- set(
- ({
- isLanguageSwitcherOpen,
- isMyPagesMenuOpen,
- isMyPagesMobileMenuOpen,
- }) => {
- // Close the other dropdowns if they're open
- if (!isLanguageSwitcherOpen) {
- if (isMyPagesMenuOpen) {
- set({ isMyPagesMenuOpen: false })
- }
- if (isMyPagesMobileMenuOpen) {
- set({ isMyPagesMobileMenuOpen: false })
- }
+ toggleLanguageSwitcher: (location: "header" | "footer") =>
+ set((state) => {
+ const isCurrentlyOpen =
+ location === "header"
+ ? state.isHeaderLanguageSwitcherOpen
+ : state.isFooterLanguageSwitcherOpen
+
+ if (!isCurrentlyOpen) {
+ return {
+ isHeaderLanguageSwitcherOpen: location === "header",
+ isFooterLanguageSwitcherOpen: location === "footer",
+ isMyPagesMenuOpen: false,
+ isMyPagesMobileMenuOpen: false,
+ isHamburgerMenuOpen: false,
}
- return { isLanguageSwitcherOpen: !isLanguageSwitcherOpen }
}
- ),
+
+ return {
+ isHeaderLanguageSwitcherOpen:
+ location === "header" ? false : state.isHeaderLanguageSwitcherOpen,
+ isFooterLanguageSwitcherOpen:
+ location === "footer" ? false : state.isFooterLanguageSwitcherOpen,
+ }
+ }),
}))
export default useDropdownStore
diff --git a/types/components/languageSwitcher/languageSwitcher.ts b/types/components/languageSwitcher/languageSwitcher.ts
index fbadfab5d..d938edc87 100644
--- a/types/components/languageSwitcher/languageSwitcher.ts
+++ b/types/components/languageSwitcher/languageSwitcher.ts
@@ -1,6 +1,6 @@
import { LanguageSwitcherData } from "@/types/requests/languageSwitcher"
export interface LanguageSwitcherProps {
- type: "mobileHeader" | "mobileFooter" | "desktopHeader" | "desktopFooter"
+ type: "mobileHeader" | "desktopHeader" | "footer"
urls: LanguageSwitcherData
}