diff --git a/src/lib/components/ProfileSwitcher.svelte b/src/lib/components/ProfileSwitcher.svelte index acce166..a0013c5 100644 --- a/src/lib/components/ProfileSwitcher.svelte +++ b/src/lib/components/ProfileSwitcher.svelte @@ -24,11 +24,10 @@ @@ -105,9 +104,6 @@ .chip:hover { background: #f4f8f5; } - .emoji { - font-size: 1.1rem; - } .icon { display: inline-flex; align-items: center; diff --git a/src/routes/preview/+page.svelte b/src/routes/preview/+page.svelte index 47a155a..865504a 100644 --- a/src/routes/preview/+page.svelte +++ b/src/routes/preview/+page.svelte @@ -90,7 +90,7 @@ Speichern… {:else} - In meine Sammlung speichern + Rezept in Kochwas speichern {/if} diff --git a/src/routes/recipes/[id]/+page.svelte b/src/routes/recipes/[id]/+page.svelte index 83e2334..9391c55 100644 --- a/src/routes/recipes/[id]/+page.svelte +++ b/src/routes/recipes/[id]/+page.svelte @@ -9,7 +9,9 @@ Trash2, ChefHat, Check, - X + X, + Lightbulb, + LightbulbOff } from 'lucide-svelte'; import RecipeView from '$lib/components/RecipeView.svelte'; import StarRating from '$lib/components/StarRating.svelte'; @@ -225,29 +227,62 @@ void wishlistStore.refresh(); } - // Wake-Lock + // Wake-Lock — Bildschirm beim Kochen nicht dimmen lassen. + // Browser-API navigator.wakeLock.request('screen') verhindert auto-lock + // und -dimmen, solange der Tab sichtbar ist. Sobald der Tab in den + // Hintergrund geht, verliert der Sentinel seine Wirkung von selbst; wir + // re-requesten bei visibilitychange. + let wakeLockEnabled = $state(true); let wakeLock: WakeLockSentinel | null = null; - async function requestWakeLock() { + + async function acquireWakeLock() { + if (wakeLock || !wakeLockEnabled) return; try { if ('wakeLock' in navigator) { wakeLock = await navigator.wakeLock.request('screen'); + wakeLock.addEventListener('release', () => { + wakeLock = null; + }); } } catch { - // silently ignore + // User hat es gecancelt oder Browser unterstützt es nicht — ignorieren } } + async function releaseWakeLock() { + if (!wakeLock) return; + try { + await wakeLock.release(); + } catch { + // ignore + } + wakeLock = null; + } + + function toggleWakeLock() { + wakeLockEnabled = !wakeLockEnabled; + if (typeof window !== 'undefined') { + localStorage.setItem('kochwas.wakeLock', wakeLockEnabled ? '1' : '0'); + } + if (wakeLockEnabled) void acquireWakeLock(); + else void releaseWakeLock(); + } + onMount(() => { - void requestWakeLock(); + const stored = localStorage.getItem('kochwas.wakeLock'); + if (stored !== null) wakeLockEnabled = stored === '1'; + if (wakeLockEnabled) void acquireWakeLock(); const onVisibility = () => { - if (document.visibilityState === 'visible' && !wakeLock) void requestWakeLock(); + if (document.visibilityState === 'visible' && wakeLockEnabled && !wakeLock) { + void acquireWakeLock(); + } }; document.addEventListener('visibilitychange', onVisibility); return () => document.removeEventListener('visibilitychange', onVisibility); }); onDestroy(() => { - if (wakeLock) void wakeLock.release(); + void releaseWakeLock(); }); @@ -314,6 +349,22 @@ ({cookingLog.length}) {/if} +