feat: nav counter badges, login backdrop, events i18n + misc fixes
Build / build (push) Successful in 10m29s
Build / build (push) Successful in 10m29s
Nav & UI polish
- Sidebar nav items show monospace count badges (projects, sites, stacks,
proxies). Events badge shows error count only, styled red as actionable
- New $lib/stores/navCounts.ts polls all counts in parallel every 60s and
refreshes on route change so badges track mutations
- Login page gets a dynamic forge backdrop: rotating conic glow, drifting
embers, dot-grid texture, vignette — all pure CSS, reduced-motion safe
- main element gets scrollbar-gutter: stable so Settings tab switching no
longer shifts horizontally when content heights differ
Events i18n
- events.source.* dictionary rewritten to match actually-emitted backend
sources (deploy, static_site, stale_scanner, stale_cleanup, admin);
dead keys (container, proxy, system) removed
- EventLogFilter.allSources + /events default sources state updated to match
- Localize "{N} total" via events.totalCount in the page hero toolbar
Backend
- Stage API accepts enable_proxy on create/update (defaults to true) so
proxy registration can be opted out per stage
Concurrency
- api.ts: queued request waiters no longer double-increment the inflight
counter; releasing a slot hands it off directly
Reactive effects
- project detail / env / volumes pages wrap side-effect calls in untrack()
to prevent $effect feedback loops when their loaders mutate tracked state
This commit is contained in:
@@ -29,7 +29,7 @@
|
||||
|
||||
// Filters
|
||||
let severities = $state<string[]>(['info', 'warn', 'error']);
|
||||
let sources = $state<string[]>(['deploy', 'container', 'proxy', 'system']);
|
||||
let sources = $state<string[]>(['deploy', 'static_site', 'stale_scanner', 'stale_cleanup', 'admin']);
|
||||
let dateRange = $state('all');
|
||||
let searchText = $state('');
|
||||
|
||||
@@ -216,7 +216,7 @@
|
||||
<div class="space-y-4">
|
||||
{#snippet heroToolbar()}
|
||||
{#if stats.total > 0}
|
||||
<span class="forge-pill"><span class="pulse"></span>{stats.total} total</span>
|
||||
<span class="forge-pill"><span class="pulse"></span>{$t('events.totalCount', { count: String(stats.total) })}</span>
|
||||
<button
|
||||
type="button"
|
||||
onclick={() => { showClearConfirm = true; }}
|
||||
|
||||
Reference in New Issue
Block a user