fix: eliminate all 167 svelte-check warnings
Refactor page components to use $derived + invalidateAll() where data is read-only or re-fetched after mutations. Suppress state_referenced_locally for intentional patterns (form state, optimistic updates, pagination). Fix a11y issues with role="presentation", add standard line-clamp properties, remove unused CSS selectors and empty rulesets.
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
children
|
||||
} = $props();
|
||||
|
||||
// svelte-ignore state_referenced_locally
|
||||
let isVisible = $state(eager); // If eager=true, render immediately
|
||||
/** @type {HTMLDivElement | null} */
|
||||
let containerRef = $state(null);
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
...restProps
|
||||
} = $props();
|
||||
|
||||
// svelte-ignore state_referenced_locally
|
||||
let shouldLoad = $state(eager);
|
||||
/** @type {HTMLImageElement | null} */
|
||||
let imgElement = $state(null);
|
||||
|
||||
@@ -5,16 +5,19 @@
|
||||
|
||||
let { initialBalance = null, initialDebtData = null } = $props<{ initialBalance?: any, initialDebtData?: any }>();
|
||||
|
||||
// svelte-ignore state_referenced_locally
|
||||
let balance = $state(initialBalance || {
|
||||
netBalance: 0,
|
||||
recentSplits: []
|
||||
});
|
||||
// svelte-ignore state_referenced_locally
|
||||
let debtData = $state(initialDebtData || {
|
||||
whoOwesMe: [],
|
||||
whoIOwe: [],
|
||||
totalOwedToMe: 0,
|
||||
totalIOwe: 0
|
||||
});
|
||||
// svelte-ignore state_referenced_locally
|
||||
let loading = $state(!initialBalance || !initialDebtData);
|
||||
let error = $state<string | null>(null);
|
||||
|
||||
|
||||
@@ -17,10 +17,14 @@
|
||||
|
||||
const isEnglish = $derived(lang === 'en');
|
||||
|
||||
// svelte-ignore state_referenced_locally
|
||||
let book: string = $state(verseData?.book || '');
|
||||
// svelte-ignore state_referenced_locally
|
||||
let chapter: number = $state(verseData?.chapter || 0);
|
||||
// svelte-ignore state_referenced_locally
|
||||
let verses: Array<{ verse: number; text: string }> = $state(verseData?.verses || []);
|
||||
let loading = $state(false);
|
||||
// svelte-ignore state_referenced_locally
|
||||
let error = $state(verseData ? '' : (lang === 'en' ? 'No verse data available' : 'Keine Versdaten verfügbar'));
|
||||
|
||||
function handleBackdropClick(event: MouseEvent) {
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
*/
|
||||
let { periods: initialPeriods = [], lang = 'en', sharedWith: initialSharedWith = [], readOnly = false, ownerName = '' } = $props();
|
||||
|
||||
// svelte-ignore state_referenced_locally
|
||||
let periods = $state([...initialPeriods]);
|
||||
let loading = $state(false);
|
||||
let showAddForm = $state(false);
|
||||
@@ -24,6 +25,7 @@
|
||||
let showHistory = $state(false);
|
||||
|
||||
// Sharing state
|
||||
// svelte-ignore state_referenced_locally
|
||||
let shareList = $state([...initialSharedWith]);
|
||||
let showShare = $state(false);
|
||||
let shareInput = $state('');
|
||||
@@ -855,10 +857,10 @@
|
||||
|
||||
<!-- Share modal -->
|
||||
{#if showShare}
|
||||
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
||||
<!-- svelte-ignore a11y_no_static_element_interactions a11y_click_events_have_key_events -->
|
||||
<div class="share-overlay" onclick={() => showShare = false} onkeydown={(e) => e.key === 'Escape' && (showShare = false)}>
|
||||
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
||||
<div class="share-modal" onclick={(e) => e.stopPropagation()}>
|
||||
<!-- svelte-ignore a11y_no_static_element_interactions a11y_click_events_have_key_events -->
|
||||
<div class="share-modal" role="presentation" onclick={(e) => e.stopPropagation()}>
|
||||
<div class="share-modal-header">
|
||||
<h3>{t('share', lang)}</h3>
|
||||
<button class="share-modal-close" onclick={() => showShare = false}>
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
|
||||
<svelte:window onkeydown={handleKeydown} />
|
||||
|
||||
<!-- svelte-ignore a11y_click_events_have_key_events a11y_no_static_element_interactions -->
|
||||
<div class="video-overlay" onclick={handleBackdrop}>
|
||||
<!-- svelte-ignore a11y_click_events_have_key_events -->
|
||||
<div class="video-overlay" role="presentation" onclick={handleBackdrop}>
|
||||
<button class="close-btn" onclick={onClose} aria-label="Close video">
|
||||
<X size={24} />
|
||||
</button>
|
||||
|
||||
@@ -15,6 +15,7 @@ let {
|
||||
} = $props();
|
||||
|
||||
// Unique dialog ID based on type to prevent conflicts when both are on the same page
|
||||
// svelte-ignore state_referenced_locally
|
||||
const dialogId = `base-recipe-selector-modal-${type}`;
|
||||
|
||||
let baseRecipes: any[] = $state([]);
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
const isEnglish = $derived(lang === 'en');
|
||||
const label = $derived(isEnglish ? 'Favorites' : 'Favoriten');
|
||||
|
||||
// svelte-ignore state_referenced_locally
|
||||
let checked = $state(enabled);
|
||||
|
||||
// Watch for changes to checked and call onToggle
|
||||
|
||||
@@ -120,6 +120,7 @@ const flattenedIngredients = $derived.by(() => {
|
||||
const lang = data.lang || 'de';
|
||||
return flattenIngredientReferences(data.ingredients, lang);
|
||||
});
|
||||
// svelte-ignore state_referenced_locally
|
||||
let multiplier = $state(data.multiplier || 1);
|
||||
|
||||
const isEnglish = $derived(data.lang === 'en');
|
||||
@@ -138,10 +139,15 @@ const labels = $derived({
|
||||
|
||||
// Cake form scaling
|
||||
const hasDefaultForm = $derived(!!data.defaultForm?.shape);
|
||||
// svelte-ignore state_referenced_locally
|
||||
let userFormShape = $state(data.defaultForm?.shape || 'round');
|
||||
// svelte-ignore state_referenced_locally
|
||||
let userFormDiameter = $state(data.defaultForm?.diameter || 26);
|
||||
// svelte-ignore state_referenced_locally
|
||||
let userFormWidth = $state(data.defaultForm?.width || 20);
|
||||
// svelte-ignore state_referenced_locally
|
||||
let userFormLength = $state(data.defaultForm?.length || 30);
|
||||
// svelte-ignore state_referenced_locally
|
||||
let userFormInnerDiameter = $state(data.defaultForm?.innerDiameter || 8);
|
||||
|
||||
/** @param {string} shape @param {number} diameter @param {number} width @param {number} length @param {number} innerDiameter */
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<script>
|
||||
let { data } = $props();
|
||||
|
||||
// svelte-ignore state_referenced_locally
|
||||
let multiplier = $state(data.multiplier || 1);
|
||||
|
||||
// Recursively flatten nested instruction references
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
const andLabel = $derived(isEnglish ? 'AND' : 'UND');
|
||||
const orLabel = $derived(isEnglish ? 'OR' : 'ODER');
|
||||
|
||||
// svelte-ignore state_referenced_locally
|
||||
let checked = $state(useAndLogic);
|
||||
|
||||
// Watch for changes to checked and call onToggle
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
}: Props = $props();
|
||||
|
||||
type TranslationState = 'idle' | 'translating' | 'preview' | 'approved' | 'error';
|
||||
// svelte-ignore state_referenced_locally
|
||||
let translationState = $state<TranslationState>(englishData ? 'preview' : 'idle');
|
||||
let errorMessage = $state('');
|
||||
let validationErrors = $state<string[]>([]);
|
||||
@@ -43,6 +44,7 @@
|
||||
}
|
||||
|
||||
// Eagerly initialize editableEnglish from germanData if no English translation exists
|
||||
// svelte-ignore state_referenced_locally
|
||||
let editableEnglish = $state<any>(
|
||||
englishData ? {
|
||||
...englishData,
|
||||
|
||||
@@ -31,17 +31,27 @@
|
||||
{ tag: 'müll', icon: Trash2 },
|
||||
];
|
||||
|
||||
// svelte-ignore state_referenced_locally
|
||||
let title = $state(task?.title || '');
|
||||
// svelte-ignore state_referenced_locally
|
||||
let description = $state(task?.description || '');
|
||||
/** @type {string[]} */
|
||||
// svelte-ignore state_referenced_locally
|
||||
let selectedAssignees = $state(task?.assignees ? [...task.assignees] : []);
|
||||
/** @type {string[]} */
|
||||
// svelte-ignore state_referenced_locally
|
||||
let selectedTags = $state(task?.tags ? [...task.tags] : []);
|
||||
// svelte-ignore state_referenced_locally
|
||||
let difficulty = $state(task?.difficulty || '');
|
||||
// svelte-ignore state_referenced_locally
|
||||
let refreshMode = $state(task?.refreshMode || 'completion');
|
||||
// svelte-ignore state_referenced_locally
|
||||
let isRecurring = $state(task?.isRecurring || false);
|
||||
// svelte-ignore state_referenced_locally
|
||||
let frequencyType = $state(task?.frequency?.type || 'weekly');
|
||||
// svelte-ignore state_referenced_locally
|
||||
let customDays = $state(task?.frequency?.customDays || 7);
|
||||
// svelte-ignore state_referenced_locally
|
||||
let nextDueDate = $state(
|
||||
task?.nextDueDate
|
||||
? new Date(task.nextDueDate).toISOString().split('T')[0]
|
||||
|
||||
Reference in New Issue
Block a user