From 8d5d64a9bd61e553a78b8e02d3e5aa9fb6d455b6 Mon Sep 17 00:00:00 2001 From: Alexander Bocken Date: Sat, 27 Dec 2025 09:46:04 +0100 Subject: [PATCH] refactor language selector into separate component Extract language switching functionality from UserHeader into a new LanguageSelector component. In mobile view, the selector appears in the top bar next to the hamburger menu. In desktop view, it appears in the navigation bar to the left of the UserHeader. - Create LanguageSelector component with local element bindings - Update Header component with language_selector_mobile and language_selector_desktop slots - Remove language selector code from UserHeader - Update recipe and main layouts to use new component - Hide desktop language selector inside mobile hamburger menu --- src/lib/components/Header.svelte | 28 ++- src/lib/components/LanguageSelector.svelte | 163 ++++++++++++++++ src/lib/components/UserHeader.svelte | 183 ++---------------- src/routes/(main)/+layout.svelte | 5 +- .../[recipeLang=recipeLang]/+layout.svelte | 7 +- 5 files changed, 212 insertions(+), 174 deletions(-) create mode 100644 src/lib/components/LanguageSelector.svelte diff --git a/src/lib/components/Header.svelte b/src/lib/components/Header.svelte index 59f0820..88d4b62 100644 --- a/src/lib/components/Header.svelte +++ b/src/lib/components/Header.svelte @@ -79,6 +79,16 @@ nav[hidden]{ display: none; padding-inline: 0.5rem; } +.right-buttons{ + display: flex; + align-items: center; + gap: 0.5rem; +} +.header-right{ + display: flex; + align-items: center; + gap: 0.5rem; +} :global(svg.symbol){ height: 4rem; width: 4rem; @@ -174,18 +184,32 @@ footer{ :global(.site_header li:focus-within){ transform: unset; } + .nav_site .header-right{ + flex-direction: column; + } + .language-selector-desktop{ + display: none; + } }
- +
+ + +
diff --git a/src/lib/components/LanguageSelector.svelte b/src/lib/components/LanguageSelector.svelte new file mode 100644 index 0000000..279cd70 --- /dev/null +++ b/src/lib/components/LanguageSelector.svelte @@ -0,0 +1,163 @@ + + + + +
+ + +
diff --git a/src/lib/components/UserHeader.svelte b/src/lib/components/UserHeader.svelte index 46d7df8..fd89603 100644 --- a/src/lib/components/UserHeader.svelte +++ b/src/lib/components/UserHeader.svelte @@ -1,99 +1,21 @@ @@ -149,59 +71,6 @@ background-position: center; background-size: contain; } - .language-selector{ - position: relative; - } - #language-button{ - width: auto; - padding: 0.5rem 1rem; - border-radius: 8px; - background-color: var(--nord3); - color: white; - font-size: 0.9rem; - font-weight: 600; - cursor: pointer; - transition: background-color 100ms; - } - #language-button:hover{ - background-color: var(--nord2); - } - #language-options{ - --bg_color: var(--nord3); - box-sizing: border-box; - border-radius: 5px; - position: absolute; - right: 0; - top: calc(100% + 10px); - background-color: var(--bg_color); - width: 10ch; - padding: 0.5rem; - z-index: 1000; - } - #language-options button{ - width: 100%; - background-color: transparent; - color: white; - border: none; - padding: 0.5rem; - margin: 0; - border-radius: 4px; - cursor: pointer; - font-size: 1rem; - text-align: left; - transition: background-color 100ms; - } - #language-options button:hover{ - background-color: var(--nord2); - } - #language-options button.active{ - background-color: var(--nord14); - } - .header-right{ - display: flex; - align-items: center; - gap: 0.5rem; - } #options{ --bg_color: var(--nord3); box-sizing: border-box; @@ -266,41 +135,17 @@ h2 + p{ } -
- {#if showLanguageSelector} -
- - +{#if user} + - {:else} - Log In - {/if} -
+ +{:else} + Log In +{/if} diff --git a/src/routes/(main)/+layout.svelte b/src/routes/(main)/+layout.svelte index 55c5c9f..570fe96 100644 --- a/src/routes/(main)/+layout.svelte +++ b/src/routes/(main)/+layout.svelte @@ -1,6 +1,7 @@