fix: clear build warnings across svelte components

Resolves 16 vite-plugin-svelte warnings: state_referenced_locally
(wrap prop reads in untrack), two a11y issues (ConfirmDialog tabindex
+ key handler, meal entry role/list), and nine unused CSS selectors.
Bump to 1.40.2.
This commit is contained in:
2026-04-21 11:22:04 +02:00
parent 38824cc054
commit 2087970f46
13 changed files with 25 additions and 60 deletions
@@ -1,5 +1,5 @@
<script>
import { onMount, onDestroy } from 'svelte';
import { onMount, onDestroy, untrack } from 'svelte';
import { getShoppingSync } from '$lib/js/shoppingSync.svelte';
import { SHOPPING_CATEGORIES } from '$lib/data/shoppingCategoryItems';
import { Plus, ListX, Apple, Beef, Milk, Croissant, Wheat, FlameKindling, GlassWater, Candy, Snowflake, SprayCan, Sparkles, Package, Search, Store } from '@lucide/svelte';
@@ -21,9 +21,11 @@
const sync = getShoppingSync();
// Seed sync state immediately so SSR can render the list
if (data.initialList) {
sync.seed(data.initialList, data.shareToken);
}
untrack(() => {
if (data.initialList) {
sync.seed(data.initialList, data.shareToken);
}
});
const lang = $derived(detectCospendLang($page.url.pathname));
const loc = $derived(locale(lang));
@@ -789,9 +789,6 @@
.section-toggle:hover {
background: var(--color-surface-hover, var(--color-bg-elevated));
}
.section-toggle + .section-toggle {
margin-top: 0.5rem;
}
.section-toggle-left {
display: flex;
align-items: center;
@@ -1156,9 +1153,4 @@
opacity: 1;
}
@media (max-width: 480px) {
.stat-grid {
grid-template-columns: 1fr;
}
}
</style>
@@ -350,10 +350,6 @@
.stat-delta.down { color: var(--green); }
.stat-delta.flat { color: var(--color-text-tertiary); }
.chart-wrap {
/* FitnessChart has its own card styling */
}
.empty {
display: flex;
flex-direction: column;
@@ -1771,7 +1771,7 @@
{/if}
</div>
<div class="meal-entries">
<div class="meal-entries" role="list">
{#each mealEntries as entry}
{@const imgUrl = entry.source === 'recipe' && entry.sourceId ? recipeImages[entry.sourceId] : null}
<div
@@ -1779,6 +1779,7 @@
class:has-image={!!imgUrl}
class:dragging={draggingEntryId === entry._id}
draggable={editingEntryId !== entry._id}
role="listitem"
ondragstart={(ev) => onEntryDragStart(ev, entry._id)}
ondragend={onEntryDragEnd}
>
@@ -2308,11 +2309,6 @@
text-transform: uppercase;
color: var(--color-text-secondary);
}
.macro-bar-goal {
font-weight: 400;
opacity: 0.7;
text-transform: none;
}
.macro-bar-track {
width: 100%;
height: 6px;
@@ -2409,15 +2405,6 @@
text-transform: uppercase;
letter-spacing: 0.04em;
}
/* Macro rings (custom meal detail + food detail) */
.ring-text {
font-size: 14px;
font-weight: 700;
fill: currentColor;
text-anchor: middle;
dominant-baseline: central;
}
/* ── Micro Details ── */
.micro-inline {
margin-top: 0.75rem;
@@ -3669,14 +3656,6 @@
font-size: 0.72rem;
color: var(--color-text-tertiary);
}
.custom-meal-info[role="button"] {
cursor: pointer;
border-radius: 6px;
transition: background 0.12s;
}
.custom-meal-info[role="button"]:hover {
background: var(--color-bg-elevated);
}
/* Custom meal detail screen */
.cm-detail {
padding: 0.75rem;
@@ -3780,10 +3759,6 @@
.cm-detail-btn-confirm:hover {
opacity: 0.9;
}
.btn-sm {
padding: 0.3rem 0.65rem;
font-size: 0.72rem;
}
.manage-meals-link {
display: flex;
align-items: center;