diff --git a/webapp/app.js b/webapp/app.js
index 76ecd37..b3ae722 100644
--- a/webapp/app.js
+++ b/webapp/app.js
@@ -785,10 +785,11 @@ async function loadHistory(append = false) {
card.innerHTML = `
${groupsHtml}
@@ -799,6 +800,11 @@ async function loadHistory(append = false) {
editSavedWorkout(w);
});
+ card.querySelector(".btn-history-delete").addEventListener("click", (e) => {
+ e.stopPropagation();
+ confirmDeleteWorkout(w);
+ });
+
container.appendChild(card);
});
@@ -813,6 +819,28 @@ document.getElementById("btn-load-more").addEventListener("click", () => {
loadHistory(true);
});
+function confirmDeleteWorkout(w) {
+ const label = "Workout #" + (w.user_number ?? w.id);
+ const prompt = "Delete " + label + "? This can't be undone.";
+ const onConfirm = async (ok) => {
+ if (!ok) return;
+ try {
+ await api("DELETE", "/workouts/" + w.id);
+ showToast(label + " deleted");
+ tg.HapticFeedback.notificationOccurred("success");
+ loadHistory();
+ } catch (e) {
+ showToast(e.message || "Delete failed");
+ tg.HapticFeedback.notificationOccurred("error");
+ }
+ };
+ if (tg && typeof tg.showConfirm === "function") {
+ tg.showConfirm(prompt, onConfirm);
+ } else {
+ onConfirm(window.confirm(prompt));
+ }
+}
+
// ── Stats View ──────────────────────────────────────────────────
async function loadStats() {
diff --git a/webapp/style.css b/webapp/style.css
index 6804dbd..4bc7228 100644
--- a/webapp/style.css
+++ b/webapp/style.css
@@ -392,6 +392,11 @@ details[open] .raw-toggle::before {
font-size: 14px !important;
}
+.btn-history-delete {
+ font-size: 14px !important;
+ color: var(--tg-theme-destructive-text-color, #d33) !important;
+}
+
.history-group {
margin-bottom: 8px;
}