From 4f410a309c81873ae550a9d291c6c4778ee9bb6e 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 59f08201..88d4b625 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 00000000..279cd70f --- /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 46d7df81..fd89603c 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 55c5c9f8..570fe96b 100644 --- a/src/routes/(main)/+layout.svelte +++ b/src/routes/(main)/+layout.svelte @@ -1,6 +1,7 @@