From 32b81264ef590291476c1089c67db21c8003259f Mon Sep 17 00:00:00 2001 From: Jacob Mathison Date: Fri, 17 Jul 2026 16:07:10 -0500 Subject: [PATCH] Allow deleting issue screenshots --- src/main.ts | 10 ++++++++++ src/store.ts | 8 ++++++++ src/styles.css | 17 +++++++++++++++-- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/main.ts b/src/main.ts index 7dbf612..fd6a503 100644 --- a/src/main.ts +++ b/src/main.ts @@ -307,6 +307,7 @@ function renderScreenshotList(screenshots: ScreenshotAttachment[]): string {
${escapeHtml(screenshot.name)}
${escapeHtml(screenshot.name)}
+
` ) @@ -454,6 +455,15 @@ function bindViewActions(): void { void appStore.getState().captureScreenshot(); }); + viewContent?.querySelectorAll("[data-delete-screenshot]").forEach((button) => { + button.addEventListener("click", () => { + const id = button.dataset.deleteScreenshot; + if (id) { + appStore.getState().deleteIssueScreenshot(id); + } + }); + }); + viewContent?.querySelector("#create-issue")?.addEventListener("click", () => { void appStore.getState().createIssue(); }); diff --git a/src/store.ts b/src/store.ts index d77e6fd..b6d69e3 100644 --- a/src/store.ts +++ b/src/store.ts @@ -62,6 +62,7 @@ interface AppState { setAddUrlDraft: (draft: Partial) => void; setIssueDraft: (draft: Partial>) => void; setIssueFiles: (files: File[]) => void; + deleteIssueScreenshot: (id: string) => void; captureScreenshot: () => Promise; createIssue: () => Promise; refreshActiveTab: () => Promise; @@ -371,6 +372,13 @@ export const appStore = createStore()((set, get) => ({ files } })), + deleteIssueScreenshot: (id) => + set((state) => ({ + issueDraft: { + ...state.issueDraft, + screenshots: state.issueDraft.screenshots.filter((screenshot) => screenshot.id !== id) + } + })), captureScreenshot: async () => { set({ isCapturingScreenshot: true }); setStatus(set, "Capturing screenshot...", "neutral", { autoClear: false }); diff --git a/src/styles.css b/src/styles.css index fec87c5..910543e 100644 --- a/src/styles.css +++ b/src/styles.css @@ -344,6 +344,11 @@ a.item-title:hover, color: #9f1d14; } +.compact-button { + padding: 3px 6px; + font-size: 10px; +} + .secondary-button { border: 1px solid #9fb3c8; background: #eef4f9; @@ -490,7 +495,7 @@ input[readonly] { .screenshot-item { display: grid; - grid-template-columns: 64px minmax(0, 1fr); + grid-template-columns: 64px minmax(0, 1fr) auto; align-items: center; gap: 7px; min-width: 0; @@ -519,14 +524,22 @@ input[readonly] { white-space: nowrap; } -.checkbox-row { +.form-stack .checkbox-row { display: flex; align-items: center; + justify-content: flex-start; gap: 7px; color: #243b53; font-size: 12px; } +.form-stack .checkbox-row input { + flex: 0 0 auto; + width: auto; + min-height: 0; + margin: 0; +} + .statusbar { display: flex; align-items: center;