diff --git a/src/background/service-worker.ts b/src/background/service-worker.ts index baa527d..051ef53 100644 --- a/src/background/service-worker.ts +++ b/src/background/service-worker.ts @@ -9,8 +9,12 @@ import { addPDF, getActionableCount, getAllPDFs, + getLiveProxies, + getArchivedProxies, getPendingPDFs, updatePDFStatus, + archiveProxy, + restoreProxy, dismissPDF, removePDF, cleanupOldEntries, @@ -130,6 +134,24 @@ chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { return true; } + // Get live proxy documents (not archived) + if (request.action === 'getLiveProxies') { + getLiveProxies().then(entries => { + console.log('[Service Worker] Returning live proxies:', entries.length, 'entries'); + sendResponse({ entries }); + }); + return true; + } + + // Get archived proxy documents + if (request.action === 'getArchivedProxies') { + getArchivedProxies().then(entries => { + console.log('[Service Worker] Returning archived proxies:', entries.length, 'entries'); + sendResponse({ entries }); + }); + return true; + } + // Add a PDF to the queue (from popup discovery) if (request.action === 'addPDF') { addPDF(request.pdf).then(entry => { @@ -171,6 +193,26 @@ chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { return true; } + // Archive a proxy document (move to archive view) + if (request.action === 'archiveProxy') { + archiveProxy(request.id).then(() => { + return updateBadge(); + }).then(() => { + sendResponse({ success: true }); + }); + return true; + } + + // Restore a proxy document (move back to live view) + if (request.action === 'restoreProxy') { + restoreProxy(request.id).then(() => { + return updateBadge(); + }).then(() => { + sendResponse({ success: true }); + }); + return true; + } + if (request.action === 'removePDF') { removePDF(request.id).then(() => { return updateBadge(); diff --git a/src/popup/popup.css b/src/popup/popup.css index 6f0c39e..bc715be 100644 --- a/src/popup/popup.css +++ b/src/popup/popup.css @@ -101,6 +101,45 @@ body { animation: spin 1s linear infinite; } +/* Archive Toggle Button */ +.toggle-btn { + width: 32px; + height: 32px; + border-radius: 50%; + border: 2px solid var(--binect-blue); + background: var(--paper); + color: var(--binect-blue); + cursor: pointer; + transition: all 0.2s; + display: flex; + align-items: center; + justify-content: center; +} + +.toggle-btn:hover { + background: var(--binect-blue); + color: var(--paper); +} + +.toggle-btn:focus { + outline: 2px solid var(--binect-blue); + outline-offset: 2px; +} + +.toggle-btn.active { + background: var(--binect-blue); + color: var(--paper); +} + +.toggle-btn.active:hover { + background: var(--binect-blue-deep); + border-color: var(--binect-blue-deep); +} + +.toggle-btn svg { + display: block; +} + @keyframes spin { from { transform: rotate(0deg); @@ -507,6 +546,40 @@ body { color: var(--text-secondary); } +/* Archive button */ +.btn-archive { + padding: 4px 8px; + font-size: 10px; + background: transparent; + color: var(--text-light); + border: 1px solid var(--border-color); + border-radius: 4px; + cursor: pointer; + transition: all 0.2s; +} + +.btn-archive:hover { + background: var(--light-bg); + color: var(--text-secondary); +} + +/* Restore button */ +.btn-restore { + padding: 6px 12px; + font-size: 11px; + min-height: auto; + background: var(--binect-blue); + color: white; + border: none; + border-radius: 4px; + cursor: pointer; + transition: background 0.2s; +} + +.btn-restore:hover { + background: var(--binect-blue-deep); +} + /* Order button */ .btn-order-item { padding: 6px 12px; diff --git a/src/popup/popup.html b/src/popup/popup.html index e20321c..7a3a72c 100644 --- a/src/popup/popup.html +++ b/src/popup/popup.html @@ -11,6 +11,17 @@