From 0fce5fcc55d7ab445aab672e687b865c4ff0101d Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 11 Jun 2026 18:05:17 +0000 Subject: [PATCH] =?UTF-8?q?feat(demo):=20Command=20Palette=20(=E2=8C=98K)?= =?UTF-8?q?=20+=20persistent=20status=20bar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Status bar (position:fixed bottom): kairu logo + version badge, current tab breadcrumb, eval/infer API health dots with live 30s polling, latency display, eval counter that increments on each successful evaluation - Command Palette (⌘K / Ctrl+K): glassmorphism overlay with blur backdrop, fuzzy search across all 18 tabs, quick actions (health check, shortcuts hint), arrow key navigation, Enter to activate, Escape to close - ⌘1-9 / Ctrl+1-9 keyboard shortcuts to jump directly to tabs 1-9 - Session integration: Kairu.session.recordEval() wired into evaluate handler to maintain live eval count in the status bar https://claude.ai/code/session_018AUTq7p346dUTQ6xe5eNVK --- demo/index.html | 345 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 345 insertions(+) diff --git a/demo/index.html b/demo/index.html index 51013e5..8c887ab 100644 --- a/demo/index.html +++ b/demo/index.html @@ -1055,6 +1055,73 @@ @keyframes mp-card-in { from { opacity:0; transform: translateY(12px) scale(0.97); } to { opacity:1; transform: none; } } .mp-card { animation: mp-card-in 0.3s cubic-bezier(.22,1,.36,1) both; } +/* ── Status Bar ─────────────────────────────────────────────────── */ +#status-bar { + position: fixed; bottom: 0; left: 0; right: 0; height: 36px; z-index: 900; + display: flex; align-items: center; justify-content: space-between; padding: 0 20px; + background: rgba(7,7,18,0.92); border-top: 1px solid rgba(124,58,237,0.18); + backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); + font-size: 11.5px; user-select: none; +} +#sb-left { display: flex; align-items: center; gap: 10px; } +#sb-logo { font-weight: 800; letter-spacing: 0.04em; color: var(--accent-3); } +#sb-version { padding: 1px 7px; border-radius: 6px; background: rgba(124,58,237,0.14); color: var(--muted); font-size: 10.5px; font-family: var(--mono); } +#sb-tab-crumb { color: var(--muted); font-size: 11px; } +#sb-tab-crumb span { color: var(--accent-2); font-weight: 600; } +#sb-center { display: flex; align-items: center; gap: 10px; color: var(--dim); } +#sb-right { display: flex; align-items: center; gap: 14px; } +.sb-api { display: flex; align-items: center; gap: 5px; color: var(--dim); } +.sb-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--warn); transition: background 0.3s, box-shadow 0.3s; } +.sb-api.ok .sb-dot { background: #10b981; box-shadow: 0 0 6px rgba(16,185,129,0.6); } +.sb-api.down .sb-dot { background: var(--fail); box-shadow: 0 0 6px rgba(239,68,68,0.5); animation: none; } +.sb-api.ok .sb-label { color: var(--text); } +.sb-label { font-size: 11px; } +#sb-kbd { padding: 2px 8px; border-radius: 5px; border: 1px solid rgba(255,255,255,0.12); color: var(--dim); font-family: var(--mono); font-size: 10.5px; cursor: pointer; transition: border-color 0.15s, color 0.15s; } +#sb-kbd:hover { border-color: var(--accent); color: var(--accent-2); } +#sb-latency { font-family: var(--mono); font-size: 10.5px; } + +/* ── Command Palette ────────────────────────────────────────────── */ +#cmd-overlay { + position: fixed; inset: 0; z-index: 9999; display: flex; align-items: flex-start; justify-content: center; + padding-top: 12vh; background: rgba(0,0,0,0.6); backdrop-filter: blur(8px); + opacity: 0; pointer-events: none; transition: opacity 0.18s; +} +#cmd-overlay.open { opacity: 1; pointer-events: all; } +#cmd-box { + width: min(640px, 92vw); border-radius: 16px; overflow: hidden; + background: rgba(13,13,32,0.97); border: 1px solid rgba(124,58,237,0.35); + box-shadow: 0 40px 80px -20px rgba(0,0,0,0.8), 0 0 0 1px rgba(124,58,237,0.1); + transform: translateY(-12px) scale(0.97); transition: transform 0.2s cubic-bezier(.22,1,.36,1); +} +#cmd-overlay.open #cmd-box { transform: none; } +#cmd-input-row { + display: flex; align-items: center; gap: 10px; padding: 14px 18px; + border-bottom: 1px solid rgba(124,58,237,0.15); +} +#cmd-icon { font-size: 18px; color: var(--accent); flex-shrink: 0; } +#cmd-input { + flex: 1; background: transparent; border: none; outline: none; color: var(--text); + font: inherit; font-size: 15px; caret-color: var(--accent); +} +#cmd-input::placeholder { color: var(--dim); } +#cmd-esc { padding: 2px 7px; border-radius: 5px; border: 1px solid rgba(255,255,255,0.1); color: var(--dim); font: 10.5px var(--mono); } +#cmd-results { max-height: 380px; overflow-y: auto; padding: 8px; } +.cmd-section { padding: 4px 10px; font-size: 10px; text-transform: uppercase; letter-spacing: 0.1em; color: var(--dim); margin-top: 4px; } +.cmd-item { + display: flex; align-items: center; gap: 12px; padding: 10px 14px; border-radius: 10px; + cursor: pointer; transition: background 0.12s; color: var(--text); +} +.cmd-item:hover, .cmd-item.selected { background: rgba(124,58,237,0.14); } +.cmd-item.selected { background: rgba(124,58,237,0.2); outline: none; } +.cmd-item-icon { width: 28px; height: 28px; border-radius: 7px; background: rgba(124,58,237,0.15); display: flex; align-items: center; justify-content: center; font-size: 14px; flex-shrink: 0; } +.cmd-item-label { font-size: 13px; font-weight: 600; } +.cmd-item-desc { font-size: 11px; color: var(--dim); } +.cmd-item-shortcut { margin-left: auto; font-size: 10.5px; font-family: var(--mono); color: var(--dim); } +.cmd-item.action .cmd-item-icon { background: rgba(107,255,142,0.1); } +.cmd-empty { padding: 32px 16px; text-align: center; color: var(--dim); font-size: 13px; } +@keyframes cmd-in { from { opacity:0; transform: translateY(-8px); } to { opacity:1; transform:none; } } +.cmd-item { animation: cmd-in 0.15s both; } + @@ -1990,6 +2057,44 @@

Publish a Rubric<
+ +
+
+ + v0.23.0 + / generate +
+
+ + Eval + + + Infer + + +
+
+ 0 evals + ⌘K +
+
+ + + +