From 58fdc133aa7d536f2d48ac6d96653030a6b0ac9a Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 3 Mar 2026 02:25:15 +0000 Subject: [PATCH 1/2] =?UTF-8?q?Add=20=E2=8C=98K=20keyboard=20shortcut=20to?= =?UTF-8?q?=20focus=20search=20input?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add Cmd+K / Ctrl+K keyboard shortcut that focuses the search input - Show a ⌘K badge inside the search input when not focused and empty - Badge hides when input is focused or has a query Co-authored-by: Ishaan Jaff --- src/App.svelte | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/App.svelte b/src/App.svelte index 121404e..af3b653 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -35,6 +35,17 @@ // Copy toast let copiedModel = ""; + // Search input ref and focus tracking + let searchInput: HTMLInputElement; + let searchFocused = false; + + function handleKeydown(e: KeyboardEvent) { + if ((e.metaKey || e.ctrlKey) && e.key === "k") { + e.preventDefault(); + searchInput?.focus(); + } + } + // Quick start tab state per model let codeTabStates: Record = {}; @@ -295,6 +306,8 @@ We also need to update [${RESOURCE_BACKUP_NAME}](https://github.com/${REPO_FULL_ } + +
@@ -370,7 +383,10 @@ We also need to update [${RESOURCE_BACKUP_NAME}](https://github.com/${REPO_FULL_ { searchFocused = true; }} + on:blur={() => { searchFocused = false; }} type="text" autocomplete="off" name="query" @@ -383,6 +399,9 @@ We also need to update [${RESOURCE_BACKUP_NAME}](https://github.com/${REPO_FULL_ {/if} + {#if !query && !searchFocused} + ⌘K + {/if}
@@ -925,6 +944,26 @@ curl http://0.0.0.0:4000/v1/chat/completions \ .search-clear:hover { color: var(--text-color); background: var(--bg-tertiary); } + .search-shortcut { + position: absolute; + right: 0.75rem; + top: 50%; + transform: translateY(-50%); + display: inline-flex; + align-items: center; + justify-content: center; + padding: 0.125rem 0.4375rem; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif; + font-size: 0.6875rem; + font-weight: 500; + color: var(--muted-color); + background: var(--bg-secondary); + border: 1px solid var(--border-color); + border-radius: 5px; + pointer-events: none; + line-height: 1.4; + } + /* Filters */ .filters-row { display: grid; From 449d2c1c483a9e1b95ab27713eb0a5ca602ba7f6 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 3 Mar 2026 02:58:38 +0000 Subject: [PATCH 2/2] Add 10 polish improvements for a more professional feel MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Scroll to top on tab change — no more stranded mid-scroll 2. Sticky table header — stays visible when scrolling 2600+ models 3. Custom ::selection color — brand-consistent indigo highlight 4. Escape key blurs search — complements ⌘K shortcut 5. Logo is a clickable home link — returns to Models tab 6. Indigo left-border accent on row hover — visual affordance 7. Global focus-visible ring — keyboard accessibility polish 8. Fade transition on tab content — smooth tab switching 9. Title tooltip on truncated model names — full name on hover 10. Animated stat card numbers — count-up from 0 on load Co-authored-by: Ishaan Jaff --- src/App.svelte | 13 +++++++-- src/Main.svelte | 76 +++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 72 insertions(+), 17 deletions(-) diff --git a/src/App.svelte b/src/App.svelte index af3b653..3b1c2f4 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -44,6 +44,9 @@ e.preventDefault(); searchInput?.focus(); } + if (e.key === "Escape" && document.activeElement === searchInput) { + searchInput?.blur(); + } } // Quick start tab state per model @@ -521,7 +524,7 @@ We also need to update [${RESOURCE_BACKUP_NAME}](https://github.com/${REPO_FULL_ {/if}
- {getDisplayModelName(name, litellm_provider)} + {getDisplayModelName(name, litellm_provider)} {#if mode} {getModeLabel(mode)} {/if} @@ -1092,6 +1095,9 @@ curl http://0.0.0.0:4000/v1/chat/completions \ background-color: var(--bg-secondary); white-space: nowrap; user-select: none; + position: sticky; + top: 63px; + z-index: 10; } .th-model { padding-left: 1rem; } @@ -1121,7 +1127,10 @@ curl http://0.0.0.0:4000/v1/chat/completions \ cursor: pointer; } - tbody tr.model-row:hover { background-color: var(--hover-bg); } + tbody tr.model-row:hover { + background-color: var(--hover-bg); + box-shadow: inset 3px 0 0 var(--litellm-primary); + } tbody tr.model-row.expanded { background-color: var(--bg-secondary); } tbody tr.model-row:last-child { border-bottom: none; } diff --git a/src/Main.svelte b/src/Main.svelte index a5fb346..1e6cbc1 100644 --- a/src/Main.svelte +++ b/src/Main.svelte @@ -1,5 +1,6 @@