From 782bf4ec35a46410af1000e4c2154f10e38a3d13 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 7 Jun 2026 20:34:12 +0000 Subject: [PATCH 1/2] Initial plan From 393c0a508422d2f50fa43a353852a0e5bfa3b732 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 7 Jun 2026 20:37:54 +0000 Subject: [PATCH 2/2] feat: add hover remove control for tags --- eml-client/src/App.svelte | 4 ++ eml-client/src/components/Eml.svelte | 9 ++- eml-client/src/components/EmlList.svelte | 11 +++- eml-client/src/components/EmlListItem.svelte | 14 +++- eml-client/src/components/TagBadges.svelte | 68 +++++++++++++++++++- 5 files changed, 102 insertions(+), 4 deletions(-) diff --git a/eml-client/src/App.svelte b/eml-client/src/App.svelte index 8d34cbbb..09e8982c 100644 --- a/eml-client/src/App.svelte +++ b/eml-client/src/App.svelte @@ -184,6 +184,10 @@ hideTags={new Set([ (tagQueries.find((t) => t.query == querySelected) ?? {}).name, ])} + on:tagsUpdated={() => { + refreshTagList() + refreshQuery() + }} /> diff --git a/eml-client/src/components/Eml.svelte b/eml-client/src/components/Eml.svelte index 904d0ad2..9343ee8a 100644 --- a/eml-client/src/components/Eml.svelte +++ b/eml-client/src/components/Eml.svelte @@ -101,7 +101,14 @@ .format(new Date(emlMeta.timestamp * 1000))} - + { + emlMeta.tags = emlMeta.tags.filter((tag) => tag != event.detail.tag) + dispatch("tagsUpdated", event.detail) + }} + /> diff --git a/eml-client/src/components/EmlList.svelte b/eml-client/src/components/EmlList.svelte index a0a44b3b..adeb85cb 100644 --- a/eml-client/src/components/EmlList.svelte +++ b/eml-client/src/components/EmlList.svelte @@ -1,4 +1,7 @@

{#each tags as tag} - + {tag} + {#if query != null} + + {/if} {/each} @@ -29,4 +58,41 @@ overflow: hidden; white-space: nowrap; } + + .tag { + display: inline-block; + margin-right: 0.25rem; + } + + :global(.tag-badge-removable) { + padding-right: 1.4rem; + position: relative; + } + + .tag-remove { + align-items: center; + background: rgba(255, 255, 255, 0.9); + border: 0; + border-radius: 999px; + color: #000; + display: inline-flex; + font-size: 0.75rem; + height: 1rem; + justify-content: center; + line-height: 1; + opacity: 0; + padding: 0; + pointer-events: none; + position: absolute; + right: -0.2rem; + top: -0.2rem; + transition: opacity 0.15s ease-in-out; + width: 1rem; + } + + .tag:hover .tag-remove, + .tag .tag-remove:focus { + opacity: 1; + pointer-events: auto; + }