Skip to content

Commit a94971e

Browse files
bloveclaude
andauthored
feat(chat): sidenav composition + Cmd+K history search palette (#253)
* docs(specs): chat sidenav + history search design (Phase 1+2) Sidenav composition with expanded/collapsed/drawer modes plus a modal history-search palette driven by Cmd/Ctrl+K. Hard-replaces chat-thread-drawer. Defers archive, projects, library, GPTs, apps, agents, group chats, and workspace switching to later phases. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(plans): chat sidenav + history search implementation plan Ten tasks across Phase 1 (sidenav composition + drawer hard-replace + examples migration) and Phase 2 (search palette + Cmd+K + example wiring + docs regen + manual verification). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * feat(chat): sidenav width tokens; export Thread type * feat(chat): chat-sidenav styles * feat(chat): chat-sidenav composition with three responsive modes Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(chat): drop unused agent input from chat-sidenav * feat(chat)!: remove chat-thread-drawer; replaced by chat-sidenav Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * refactor(examples-chat): migrate from chat-thread-drawer to chat-sidenav Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat(chat): chat-history-search-palette styles * feat(chat): chat-history-search-palette primitive (Cmd+K modal) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat(examples-chat): wire Cmd+K palette with default client-side title filter Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs(chat): regenerate chat API docs for sidenav + search palette Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent f784e4f commit a94971e

15 files changed

Lines changed: 2837 additions & 212 deletions

apps/website/content/docs/chat/api/api-docs.json

Lines changed: 216 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2355,6 +2355,129 @@
23552355
"properties": [],
23562356
"methods": []
23572357
},
2358+
{
2359+
"name": "ChatHistorySearchPaletteComponent",
2360+
"kind": "class",
2361+
"description": "",
2362+
"params": [],
2363+
"examples": [],
2364+
"properties": [
2365+
{
2366+
"name": "activeIndex",
2367+
"type": "WritableSignal<number>",
2368+
"description": "",
2369+
"optional": false
2370+
},
2371+
{
2372+
"name": "close",
2373+
"type": "OutputEmitterRef<void>",
2374+
"description": "",
2375+
"optional": false
2376+
},
2377+
{
2378+
"name": "listId",
2379+
"type": "string",
2380+
"description": "",
2381+
"optional": false
2382+
},
2383+
{
2384+
"name": "loading",
2385+
"type": "InputSignal<boolean>",
2386+
"description": "",
2387+
"optional": false
2388+
},
2389+
{
2390+
"name": "open",
2391+
"type": "ModelSignal<boolean>",
2392+
"description": "",
2393+
"optional": false
2394+
},
2395+
{
2396+
"name": "placeholder",
2397+
"type": "InputSignal<string>",
2398+
"description": "",
2399+
"optional": false
2400+
},
2401+
{
2402+
"name": "query",
2403+
"type": "ModelSignal<string>",
2404+
"description": "",
2405+
"optional": false
2406+
},
2407+
{
2408+
"name": "results",
2409+
"type": "InputSignal<ThreadMatch[]>",
2410+
"description": "",
2411+
"optional": false
2412+
},
2413+
{
2414+
"name": "threadSelected",
2415+
"type": "OutputEmitterRef<string>",
2416+
"description": "",
2417+
"optional": false
2418+
}
2419+
],
2420+
"methods": [
2421+
{
2422+
"name": "activeRowId",
2423+
"signature": "activeRowId()",
2424+
"description": "",
2425+
"params": []
2426+
},
2427+
{
2428+
"name": "onInput",
2429+
"signature": "onInput(e: Event)",
2430+
"description": "",
2431+
"params": [
2432+
{
2433+
"name": "e",
2434+
"type": "Event",
2435+
"description": "",
2436+
"optional": false
2437+
}
2438+
]
2439+
},
2440+
{
2441+
"name": "onInputKeydown",
2442+
"signature": "onInputKeydown(e: KeyboardEvent)",
2443+
"description": "",
2444+
"params": [
2445+
{
2446+
"name": "e",
2447+
"type": "KeyboardEvent",
2448+
"description": "",
2449+
"optional": false
2450+
}
2451+
]
2452+
},
2453+
{
2454+
"name": "onRowClick",
2455+
"signature": "onRowClick(id: string)",
2456+
"description": "",
2457+
"params": [
2458+
{
2459+
"name": "id",
2460+
"type": "string",
2461+
"description": "",
2462+
"optional": false
2463+
}
2464+
]
2465+
},
2466+
{
2467+
"name": "rowId",
2468+
"signature": "rowId(index: number)",
2469+
"description": "",
2470+
"params": [
2471+
{
2472+
"name": "index",
2473+
"type": "number",
2474+
"description": "",
2475+
"optional": false
2476+
}
2477+
]
2478+
}
2479+
]
2480+
},
23582481
{
23592482
"name": "ChatInputComponent",
23602483
"kind": "class",
@@ -3089,6 +3212,71 @@
30893212
}
30903213
]
30913214
},
3215+
{
3216+
"name": "ChatSidenavComponent",
3217+
"kind": "class",
3218+
"description": "",
3219+
"params": [],
3220+
"examples": [],
3221+
"properties": [
3222+
{
3223+
"name": "activeThreadId",
3224+
"type": "InputSignal<string | null>",
3225+
"description": "",
3226+
"optional": false
3227+
},
3228+
{
3229+
"name": "mode",
3230+
"type": "InputSignal<ChatSidenavMode>",
3231+
"description": "",
3232+
"optional": false
3233+
},
3234+
{
3235+
"name": "newChat",
3236+
"type": "OutputEmitterRef<void>",
3237+
"description": "",
3238+
"optional": false
3239+
},
3240+
{
3241+
"name": "open",
3242+
"type": "InputSignal<boolean>",
3243+
"description": "",
3244+
"optional": false
3245+
},
3246+
{
3247+
"name": "openChange",
3248+
"type": "OutputEmitterRef<boolean>",
3249+
"description": "",
3250+
"optional": false
3251+
},
3252+
{
3253+
"name": "searchOpened",
3254+
"type": "OutputEmitterRef<void>",
3255+
"description": "",
3256+
"optional": false
3257+
},
3258+
{
3259+
"name": "threads",
3260+
"type": "InputSignal<Thread[] | null>",
3261+
"description": "",
3262+
"optional": false
3263+
},
3264+
{
3265+
"name": "threadSelected",
3266+
"type": "OutputEmitterRef<string>",
3267+
"description": "",
3268+
"optional": false
3269+
}
3270+
],
3271+
"methods": [
3272+
{
3273+
"name": "onEscape",
3274+
"signature": "onEscape()",
3275+
"description": "",
3276+
"params": []
3277+
}
3278+
]
3279+
},
30923280
{
30933281
"name": "ChatStreamingMdComponent",
30943282
"kind": "class",
@@ -3207,34 +3395,6 @@
32073395
],
32083396
"methods": []
32093397
},
3210-
{
3211-
"name": "ChatThreadDrawerComponent",
3212-
"kind": "class",
3213-
"description": "",
3214-
"params": [],
3215-
"examples": [],
3216-
"properties": [
3217-
{
3218-
"name": "mode",
3219-
"type": "InputSignal<ChatThreadDrawerMode>",
3220-
"description": "",
3221-
"optional": false
3222-
},
3223-
{
3224-
"name": "open",
3225-
"type": "InputSignal<boolean>",
3226-
"description": "",
3227-
"optional": false
3228-
},
3229-
{
3230-
"name": "openChange",
3231-
"type": "OutputEmitterRef<boolean>",
3232-
"description": "",
3233-
"optional": false
3234-
}
3235-
],
3236-
"methods": []
3237-
},
32383398
{
32393399
"name": "ChatThreadListComponent",
32403400
"kind": "class",
@@ -5361,6 +5521,32 @@
53615521
],
53625522
"examples": []
53635523
},
5524+
{
5525+
"name": "ThreadMatch",
5526+
"kind": "interface",
5527+
"description": "",
5528+
"properties": [
5529+
{
5530+
"name": "id",
5531+
"type": "string",
5532+
"description": "",
5533+
"optional": false
5534+
},
5535+
{
5536+
"name": "subtitle",
5537+
"type": "string",
5538+
"description": "Optional secondary line, rendered muted under the title.",
5539+
"optional": true
5540+
},
5541+
{
5542+
"name": "title",
5543+
"type": "string",
5544+
"description": "",
5545+
"optional": false
5546+
}
5547+
],
5548+
"examples": []
5549+
},
53645550
{
53655551
"name": "ToolCall",
53665552
"kind": "interface",
@@ -5486,10 +5672,10 @@
54865672
"examples": []
54875673
},
54885674
{
5489-
"name": "ChatThreadDrawerMode",
5675+
"name": "ChatSidenavMode",
54905676
"kind": "type",
54915677
"description": "",
5492-
"signature": "\"push\" | \"overlay\"",
5678+
"signature": "\"expanded\" | \"collapsed\" | \"drawer\"",
54935679
"examples": []
54945680
},
54955681
{

0 commit comments

Comments
 (0)