feat: ШАГ 4 — UI для browser events в TodayScreen

Go bindings:
- bindings_browser.go: ListBrowserEvents, CountPendingBrowserEvents,
  AcceptBrowserEvent, DismissBrowserEvent, AttachBrowserEventToNode

Frontend:
- BrowserEvents.svelte — компонент списка событий с действиями
  (принять/прикрепить/удалить), статусы, домены, длительность
- TodayScreen.svelte — новая вкладка «Браузер» с badge
- App.svelte — loadBrowserEvents, acceptBrowserEvent,
  dismissBrowserEvent, attachBrowserEvent handlers
This commit is contained in:
2026-06-06 18:58:39 +08:00
parent 6bd6c9c5ff
commit fc429ac26e
4 changed files with 352 additions and 0 deletions
+25
View File
@@ -1,5 +1,6 @@
<script>
import { t } from './i18n'
import BrowserEvents from './BrowserEvents.svelte'
export let todayDashboard = null
export let suggestions = []
@@ -22,6 +23,14 @@
export let onOpenInboxArtifact = (item) => {}
export let onOpenTrashNode = (nodeId) => {}
// Browser events
export let browserEvents = []
export let browserLoading = false
export let onBrowserAccept = (ev) => {}
export let onBrowserDismiss = (ev) => {}
export let onBrowserAttach = (ev) => {}
export let onBrowserRefresh = () => {}
let activeTab = 'feed'
function pluralize(n, one, few, many) {
@@ -172,6 +181,10 @@
{t('today.captured')}
{#if todayCaptures.length > 0}<span class="tab-badge">{todayCaptures.length}</span>{/if}
</button>
<button class="today-tab" class:active={activeTab === 'browser'} on:click={() => activeTab = 'browser'}>
Браузер
{#if browserEvents.length > 0}<span class="tab-badge">{browserEvents.length}</span>{/if}
</button>
</div>
{#if activeTab === 'feed'}
@@ -328,6 +341,18 @@
</div>
{/if}
</div>
{:else if activeTab === 'browser'}
<div class="today-tab-content">
<BrowserEvents
events={browserEvents}
loading={browserLoading}
{formatTime}
onAccept={onBrowserAccept}
onDismiss={onBrowserDismiss}
onAttach={onBrowserAttach}
onRefresh={onBrowserRefresh}
/>
</div>
{/if}
</div>