diff --git a/js/modelpulse.js b/js/modelpulse.js
index b0265cf..74d35e4 100644
--- a/js/modelpulse.js
+++ b/js/modelpulse.js
@@ -466,6 +466,31 @@ function createStyles() {
color: var(--descrip-text, #999);
font-size: 12px;
}
+
+ .modelpulse-reset-row {
+ margin-top: 12px;
+ padding-top: 12px;
+ border-top: 1px solid var(--border-color, #444);
+ }
+
+ .modelpulse-reset-btn {
+ padding: 4px 12px;
+ background: var(--error-text, #ff6b6b);
+ border: none;
+ border-radius: 4px;
+ color: #fff;
+ font-size: 12px;
+ cursor: pointer;
+ }
+
+ .modelpulse-reset-btn:hover {
+ background: #ff5252;
+ }
+
+ .modelpulse-reset-btn:disabled {
+ opacity: 0.5;
+ cursor: not-allowed;
+ }
`;
return style;
}
@@ -508,6 +533,10 @@ async function renderModelPulseUI(container) {
+
+
+
+
`;
main.appendChild(settingsPanel);
@@ -577,6 +606,33 @@ async function renderModelPulseUI(container) {
}
});
+ // Reset button handler
+ const resetBtn = settingsPanel.querySelector("#reset-data");
+ resetBtn.addEventListener("click", async () => {
+ if (!confirm("Are you sure you want to reset all tracking data? This cannot be undone.")) {
+ return;
+ }
+ resetBtn.disabled = true;
+ resetBtn.textContent = "Resetting...";
+ try {
+ const response = await fetch("/modelpulse/reset", {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify({ confirm: true }),
+ });
+ if (!response.ok) {
+ throw new Error(`HTTP ${response.status}`);
+ }
+ await refreshData(list, refreshBtn);
+ } catch (error) {
+ console.error("[ModelPulse] Error resetting data:", error);
+ alert("Failed to reset tracking data. Check console for details.");
+ } finally {
+ resetBtn.disabled = false;
+ resetBtn.textContent = "Reset";
+ }
+ });
+
// Search handler with debounce
let searchTimeout;
searchInput.addEventListener("input", () => {