diff --git a/src/lib/components/diary/MealCard.svelte b/src/lib/components/diary/MealCard.svelte index 53634d6..31734ab 100644 --- a/src/lib/components/diary/MealCard.svelte +++ b/src/lib/components/diary/MealCard.svelte @@ -24,6 +24,16 @@ let presetOpen = $state(false); let presetName = $state(""); + let presetNameInput = $state(null); + let renameNameInput = $state(null); + + $effect(() => { + if (presetOpen) setTimeout(() => presetNameInput?.focus(), 50); + }); + $effect(() => { + if (renameOpen) setTimeout(() => renameNameInput?.focus(), 50); + }); + function openRename() { renameName = meal.name; renameOpen = true; @@ -244,6 +254,7 @@
inputEl?.focus(), 50); } }); diff --git a/src/routes/(app)/diary/[date]/add-entry/+page.svelte b/src/routes/(app)/diary/[date]/add-entry/+page.svelte index 367edf8..876cdfb 100644 --- a/src/routes/(app)/diary/[date]/add-entry/+page.svelte +++ b/src/routes/(app)/diary/[date]/add-entry/+page.svelte @@ -36,6 +36,11 @@ let gramsInput = $state(null); + $effect(() => { + if (!selectedProduct) setTimeout(() => searchInput?.focus(), 50); + else setTimeout(() => gramsInput?.focus(), 50); + }); + function handleSearch(value: string) { q = value; clearTimeout(debounceTimer); diff --git a/src/routes/(app)/diary/[date]/add-meal/+page.svelte b/src/routes/(app)/diary/[date]/add-meal/+page.svelte index 1180a75..c3d4c6e 100644 --- a/src/routes/(app)/diary/[date]/add-meal/+page.svelte +++ b/src/routes/(app)/diary/[date]/add-meal/+page.svelte @@ -24,6 +24,13 @@ let presetTimer: ReturnType; let submitting = $state(false); let error = $state(""); + let mealNameInput = $state(null); + let presetQInput = $state(null); + + $effect(() => { + if (tab === "new") setTimeout(() => mealNameInput?.focus(), 50); + else setTimeout(() => presetQInput?.focus(), 50); + }); function handlePresetSearch(v: string) { presetQ = v; @@ -93,6 +100,7 @@ >Meal name (optional)
(null); + $effect(() => { + setTimeout(() => gramsInput?.focus(), 50); + }); + const preview = $derived( entry ? { diff --git a/src/routes/(app)/presets/+page.svelte b/src/routes/(app)/presets/+page.svelte index 75b47ce..3b1faad 100644 --- a/src/routes/(app)/presets/+page.svelte +++ b/src/routes/(app)/presets/+page.svelte @@ -73,6 +73,11 @@ let creating = $state(false); let creatingName = $state(""); let creatingSaving = $state(false); + let creatingNameInput = $state(null); + + $effect(() => { + if (creating) setTimeout(() => creatingNameInput?.focus(), 50); + }); async function handleCreate() { creatingSaving = true; @@ -105,6 +110,11 @@ let renamePreset_: Preset | null = $state(null); let renameName = $state(""); let renaming = $state(false); + let renameNameInput = $state(null); + + $effect(() => { + if (renamePreset_) setTimeout(() => renameNameInput?.focus(), 50); + }); function openRename(preset: Preset) { renamePreset_ = preset; @@ -132,6 +142,10 @@ let editSaving = $state(false); let editGramsInput = $state(null); + $effect(() => { + if (editingEntry) setTimeout(() => editGramsInput?.focus(), 50); + }); + function openEditEntry(presetId: number, entry: PresetEntry) { editingEntry = { presetId, entry }; editGrams = entry.grams; @@ -169,6 +183,14 @@ let addGrams = $state(100); let addSaving = $state(false); let addGramsInput = $state(null); + let productQInput = $state(null); + + $effect(() => { + if (addEntryPresetId !== null && selectedProduct === null) + setTimeout(() => productQInput?.focus(), 50); + else if (selectedProduct !== null) + setTimeout(() => addGramsInput?.focus(), 50); + }); function openAddEntry(presetId: number) { addEntryPresetId = presetId; @@ -490,6 +512,7 @@ >
(null); + + $effect(() => { + setTimeout(() => nameInput?.focus(), 50); + }); // calories = protein×4 + carb×4 + fat×9 + fiber×2 const calories = $derived( @@ -48,6 +53,7 @@