diff --git a/messages/de.json b/messages/de.json
index a423c6f78..9114e703e 100644
--- a/messages/de.json
+++ b/messages/de.json
@@ -6437,6 +6437,8 @@
"addButton": "Erinnerung hinzufügen",
"markDone": "Erledigt",
"delete": "Löschen",
+ "deleteConfirmTitle": "Erinnerung löschen?",
+ "deleteConfirmDescription": "Diese Vorsorge-Erinnerung wird dauerhaft gelöscht.",
"disabledBadge": "Aus",
"nextDue": {
"none": "Nicht geplant",
@@ -6493,6 +6495,8 @@
"referenceLabel": "Referenz",
"readingsCount": "{count} Werte",
"deleteLatest": "Letzten Wert löschen",
+ "deleteConfirmTitle": "Laborwert löschen?",
+ "deleteConfirmDescription": "Dieser Laborwert wird dauerhaft gelöscht.",
"deletedToast": "Wert gelöscht",
"deleteError": "Wert konnte nicht gelöscht werden",
"loadError": "Laborwerte konnten nicht geladen werden",
diff --git a/messages/en.json b/messages/en.json
index 4efb384dc..27899f29d 100644
--- a/messages/en.json
+++ b/messages/en.json
@@ -6437,6 +6437,8 @@
"addButton": "Add reminder",
"markDone": "Done",
"delete": "Delete",
+ "deleteConfirmTitle": "Delete reminder?",
+ "deleteConfirmDescription": "This preventive-care reminder will be permanently deleted.",
"disabledBadge": "Off",
"nextDue": {
"none": "Not scheduled",
@@ -6493,6 +6495,8 @@
"referenceLabel": "Reference",
"readingsCount": "{count} readings",
"deleteLatest": "Delete latest reading",
+ "deleteConfirmTitle": "Delete lab result?",
+ "deleteConfirmDescription": "This lab result will be permanently deleted.",
"deletedToast": "Result deleted",
"deleteError": "Could not delete the result",
"loadError": "Could not load lab results",
diff --git a/messages/es.json b/messages/es.json
index e78370478..cae5e473f 100644
--- a/messages/es.json
+++ b/messages/es.json
@@ -6437,6 +6437,8 @@
"addButton": "Añadir recordatorio",
"markDone": "Hecho",
"delete": "Eliminar",
+ "deleteConfirmTitle": "¿Eliminar recordatorio?",
+ "deleteConfirmDescription": "Este recordatorio de prevención se eliminará de forma permanente.",
"disabledBadge": "Apagado",
"nextDue": {
"none": "Sin programar",
@@ -6493,6 +6495,8 @@
"referenceLabel": "Referencia",
"readingsCount": "{count} valores",
"deleteLatest": "Eliminar el último valor",
+ "deleteConfirmTitle": "¿Eliminar resultado de laboratorio?",
+ "deleteConfirmDescription": "Este resultado de laboratorio se eliminará de forma permanente.",
"deletedToast": "Resultado eliminado",
"deleteError": "No se pudo eliminar el resultado",
"loadError": "No se pudieron cargar los resultados",
diff --git a/messages/fr.json b/messages/fr.json
index 32f5c2b32..f89760ec4 100644
--- a/messages/fr.json
+++ b/messages/fr.json
@@ -6437,6 +6437,8 @@
"addButton": "Ajouter un rappel",
"markDone": "Terminé",
"delete": "Supprimer",
+ "deleteConfirmTitle": "Supprimer le rappel ?",
+ "deleteConfirmDescription": "Ce rappel de prévention sera définitivement supprimé.",
"disabledBadge": "Désactivé",
"nextDue": {
"none": "Non planifié",
@@ -6493,6 +6495,8 @@
"referenceLabel": "Référence",
"readingsCount": "{count} valeurs",
"deleteLatest": "Supprimer la dernière valeur",
+ "deleteConfirmTitle": "Supprimer le résultat d'analyse ?",
+ "deleteConfirmDescription": "Ce résultat d'analyse sera définitivement supprimé.",
"deletedToast": "Résultat supprimé",
"deleteError": "Impossible de supprimer le résultat",
"loadError": "Impossible de charger les résultats",
diff --git a/messages/it.json b/messages/it.json
index 162c586dd..0d5c25c41 100644
--- a/messages/it.json
+++ b/messages/it.json
@@ -6437,6 +6437,8 @@
"addButton": "Aggiungi promemoria",
"markDone": "Fatto",
"delete": "Elimina",
+ "deleteConfirmTitle": "Eliminare il promemoria?",
+ "deleteConfirmDescription": "Questo promemoria di prevenzione verrà eliminato definitivamente.",
"disabledBadge": "Disattivato",
"nextDue": {
"none": "Non pianificato",
@@ -6493,6 +6495,8 @@
"referenceLabel": "Riferimento",
"readingsCount": "{count} valori",
"deleteLatest": "Elimina l'ultimo valore",
+ "deleteConfirmTitle": "Eliminare il risultato di laboratorio?",
+ "deleteConfirmDescription": "Questo risultato di laboratorio verrà eliminato definitivamente.",
"deletedToast": "Risultato eliminato",
"deleteError": "Impossibile eliminare il risultato",
"loadError": "Impossibile caricare i risultati",
diff --git a/messages/pl.json b/messages/pl.json
index c16c94efd..e0a362da2 100644
--- a/messages/pl.json
+++ b/messages/pl.json
@@ -6437,6 +6437,8 @@
"addButton": "Dodaj przypomnienie",
"markDone": "Gotowe",
"delete": "Usuń",
+ "deleteConfirmTitle": "Usunąć przypomnienie?",
+ "deleteConfirmDescription": "To przypomnienie profilaktyczne zostanie trwale usunięte.",
"disabledBadge": "Wył.",
"nextDue": {
"none": "Niezaplanowane",
@@ -6493,6 +6495,8 @@
"referenceLabel": "Norma",
"readingsCount": "{count} wyników",
"deleteLatest": "Usuń ostatni wynik",
+ "deleteConfirmTitle": "Usunąć wynik laboratoryjny?",
+ "deleteConfirmDescription": "Ten wynik laboratoryjny zostanie trwale usunięty.",
"deletedToast": "Wynik usunięty",
"deleteError": "Nie udało się usunąć wyniku",
"loadError": "Nie udało się wczytać wyników",
diff --git a/src/components/labs/lab-list.tsx b/src/components/labs/lab-list.tsx
index ab1a0cd5c..3d94b330e 100644
--- a/src/components/labs/lab-list.tsx
+++ b/src/components/labs/lab-list.tsx
@@ -2,9 +2,10 @@
import { useMemo } from "react";
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
-import { FlaskConical, Trash2 } from "lucide-react";
+import { FlaskConical } from "lucide-react";
import { toast } from "sonner";
+import { DeleteButton } from "@/components/data-list";
import { Button } from "@/components/ui/button";
import {
Card,
@@ -166,16 +167,14 @@ export function LabList({ onAddFirst }: { onAddFirst?: () => void } = {}) {
r.value)} />
-
+ deleteMutation.mutate(group.latest.id)}
+ title={t("labs.deleteConfirmTitle")}
+ description={t("labs.deleteConfirmDescription")}
+ confirmLabel={t("labs.deleteLatest")}
+ className="size-9"
+ iconClassName="h-4 w-4"
+ />
diff --git a/src/components/measurement-reminders/vorsorge-section.tsx b/src/components/measurement-reminders/vorsorge-section.tsx
index 162de30bb..98b927df9 100644
--- a/src/components/measurement-reminders/vorsorge-section.tsx
+++ b/src/components/measurement-reminders/vorsorge-section.tsx
@@ -13,9 +13,10 @@
* relative to "now" but never recomputes the cadence.
*/
import { useState } from "react";
-import { CheckCircle2, Plus, Trash2 } from "lucide-react";
+import { CheckCircle2, Plus } from "lucide-react";
import { useTranslations } from "@/lib/i18n/context";
+import { DeleteButton } from "@/components/data-list";
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
import {
@@ -365,16 +366,14 @@ function VorsorgeCard({
{t("measurementReminders.markDone")}
-
+