@@ -230,100 +201,6 @@
overflow: hidden;
}
- .header {
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: var(--sp-4) var(--sp-6);
- border-bottom: 1px solid var(--border-dim);
- flex-shrink: 0;
- }
-
- .heading-group {
- display: flex;
- align-items: center;
- gap: var(--sp-2);
- }
-
- :global(.heading-icon) { color: var(--text-faint); }
-
- .heading {
- font-family: var(--font-ui);
- font-size: var(--text-xs);
- font-weight: var(--weight-medium);
- color: var(--text-muted);
- letter-spacing: var(--tracking-wider);
- text-transform: uppercase;
- }
-
- .header-right {
- display: flex;
- align-items: center;
- gap: var(--sp-2);
- }
-
- .search-wrap {
- position: relative;
- display: flex;
- align-items: center;
- }
-
- .search-wrap :global(.search-icon) {
- position: absolute;
- left: 8px;
- color: var(--text-faint);
- pointer-events: none;
- }
-
- .search {
- background: var(--bg-raised);
- border: 1px solid var(--border-dim);
- border-radius: var(--radius-md);
- padding: 4px 26px;
- color: var(--text-primary);
- font-size: var(--text-xs);
- width: 148px;
- outline: none;
- transition: border-color var(--t-base), width var(--t-base), background var(--t-base);
- }
-
- .search::placeholder { color: var(--text-faint); }
-
- .search:focus {
- border-color: var(--border-strong);
- background: var(--bg-elevated);
- width: 200px;
- }
-
- .search-clear {
- position: absolute;
- right: 8px;
- color: var(--text-faint);
- font-size: 13px;
- line-height: 1;
- background: none;
- border: none;
- cursor: pointer;
- padding: 2px;
- transition: color var(--t-base);
- }
-
- .search-clear:hover { color: var(--text-muted); }
-
- .clear-btn {
- display: flex; align-items: center; gap: 4px;
- height: 30px; padding: 0 var(--sp-2);
- border-radius: var(--radius-md); border: 1px solid var(--border-dim);
- background: var(--bg-raised); color: var(--text-faint);
- cursor: pointer; font-family: var(--font-ui); font-size: var(--text-2xs);
- letter-spacing: var(--tracking-wide); flex-shrink: 0;
- transition: color var(--t-base), background var(--t-base), border-color var(--t-base);
- }
- .clear-btn:hover { color: var(--color-error); background: var(--color-error-bg); border-color: color-mix(in srgb, var(--color-error) 30%, transparent); }
- .clear-btn.confirm { color: var(--color-error); background: var(--color-error-bg); border-color: var(--color-error); }
-
- .clear-label { font-size: var(--text-2xs); }
-
.stats-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
diff --git a/src/features/recent/components/Recent.svelte b/src/features/recent/components/Recent.svelte
index 532f06a..e7350e3 100644
--- a/src/features/recent/components/Recent.svelte
+++ b/src/features/recent/components/Recent.svelte
@@ -1,14 +1,35 @@
{#if tab === "updates"}
-
+ updatesRefreshFn = fn}
+ />
{:else}
-
+
{/if}
@@ -82,6 +142,83 @@
.tab:hover { color: var(--text-muted); }
.tab.active { background: var(--accent-muted); color: var(--accent-fg); border-color: var(--accent-dim); }
+ .header-right {
+ display: flex;
+ align-items: center;
+ gap: var(--sp-2);
+ margin-left: auto;
+ }
+
+ .icon-btn {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 28px;
+ height: 28px;
+ border-radius: var(--radius-md);
+ border: 1px solid var(--border-dim);
+ background: var(--bg-raised);
+ color: var(--text-faint);
+ cursor: pointer;
+ transition: color var(--t-base), border-color var(--t-base), background var(--t-base);
+ }
+ .icon-btn:hover:not(:disabled) { color: var(--text-primary); border-color: var(--border-strong); }
+ .icon-btn:disabled { opacity: 0.45; cursor: default; }
+
+ .search-wrap {
+ position: relative;
+ display: flex;
+ align-items: center;
+ }
+
+ .search-wrap :global(.search-icon) {
+ position: absolute;
+ left: 8px;
+ color: var(--text-faint);
+ pointer-events: none;
+ }
+
+ .search {
+ background: var(--bg-raised);
+ border: 1px solid var(--border-dim);
+ border-radius: var(--radius-md);
+ padding: 4px 26px;
+ color: var(--text-primary);
+ font-size: var(--text-xs);
+ width: 148px;
+ outline: none;
+ transition: border-color var(--t-base), width var(--t-base), background var(--t-base);
+ }
+ .search::placeholder { color: var(--text-faint); }
+ .search:focus { border-color: var(--border-strong); background: var(--bg-elevated); width: 200px; }
+
+ .search-clear {
+ position: absolute;
+ right: 8px;
+ color: var(--text-faint);
+ font-size: 13px;
+ line-height: 1;
+ background: none;
+ border: none;
+ cursor: pointer;
+ padding: 2px;
+ transition: color var(--t-base);
+ }
+ .search-clear:hover { color: var(--text-muted); }
+
+ .clear-btn {
+ display: flex; align-items: center; gap: 4px;
+ height: 28px; padding: 0 var(--sp-2);
+ border-radius: var(--radius-md); border: 1px solid var(--border-dim);
+ background: var(--bg-raised); color: var(--text-faint);
+ cursor: pointer; font-family: var(--font-ui); font-size: var(--text-2xs);
+ letter-spacing: var(--tracking-wide); flex-shrink: 0;
+ transition: color var(--t-base), background var(--t-base), border-color var(--t-base);
+ }
+ .clear-btn:hover { color: var(--color-error); background: var(--color-error-bg); border-color: color-mix(in srgb, var(--color-error) 30%, transparent); }
+ .clear-btn.confirm { color: var(--color-error); background: var(--color-error-bg); border-color: var(--color-error); }
+ .clear-label { font-size: var(--text-2xs); }
+
.content {
flex: 1;
min-height: 0;
diff --git a/src/features/recent/components/UpdatesPanel.svelte b/src/features/recent/components/UpdatesPanel.svelte
index 8d89e2e..2949387 100644
--- a/src/features/recent/components/UpdatesPanel.svelte
+++ b/src/features/recent/components/UpdatesPanel.svelte
@@ -1,6 +1,6 @@
-