From df0363804d6d402913bf3c029222bfd56afb390f Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sun, 1 Mar 2026 12:15:57 +0000 Subject: [PATCH 1/2] feat: add global command palette with Cmd+K shortcut MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - New CommandPalette.svelte component with thread search, actions, navigation - Keyboard navigation (arrows/Enter/Escape), auto-focus input on open - Features: search threads, new thread, add resource, toggle theme, nav shortcuts - Sidebar search input now opens command palette with ⌘K hint - Global Cmd+K shortcut wired in app layout - AddResourceModal accessible from palette Co-authored-by: Ben Davis --- .../src/lib/components/CommandPalette.svelte | 332 ++++++++++++++++++ apps/web/src/lib/components/Sidebar.svelte | 59 ++-- apps/web/src/routes/app/+layout.svelte | 35 +- 3 files changed, 382 insertions(+), 44 deletions(-) create mode 100644 apps/web/src/lib/components/CommandPalette.svelte diff --git a/apps/web/src/lib/components/CommandPalette.svelte b/apps/web/src/lib/components/CommandPalette.svelte new file mode 100644 index 00000000..a85c52e5 --- /dev/null +++ b/apps/web/src/lib/components/CommandPalette.svelte @@ -0,0 +1,332 @@ + + + + +{#if isOpen} + +{/if} diff --git a/apps/web/src/lib/components/Sidebar.svelte b/apps/web/src/lib/components/Sidebar.svelte index ea4315a0..9201d5dc 100644 --- a/apps/web/src/lib/components/Sidebar.svelte +++ b/apps/web/src/lib/components/Sidebar.svelte @@ -14,8 +14,7 @@ Settings, Sun, Trash2, - User, - X + User } from '@lucide/svelte'; import { goto } from '$app/navigation'; import { createEventDispatcher, onDestroy } from 'svelte'; @@ -41,9 +40,11 @@ currentThreadId: string | null; isOpen: boolean; isLoading?: boolean; + onOpenCommandPalette: () => void; } - let { threads, currentThreadId, isOpen, isLoading = false }: Props = $props(); + let { threads, currentThreadId, isOpen, isLoading = false, onOpenCommandPalette }: Props = + $props(); const dispatch = createEventDispatcher<{ close: void }>(); const auth = getAuthState(); @@ -51,19 +52,12 @@ const projectStore = getProjectStore(); const client = useConvexClient(); - let searchValue = $state(''); let showUserMenu = $state(false); let showProjectsSection = $state(false); const preloadDelayMs = 120; const preloadTimers = new Map>(); const preloadInFlight = new Set(); - const filteredThreads = $derived.by(() => { - const query = searchValue.trim().toLowerCase(); - if (!query) return threads; - return threads.filter((thread) => (thread.title ?? thread._id).toLowerCase().includes(query)); - }); - function formatDate(timestamp: number): string { return new Date(timestamp).toLocaleDateString(undefined, { month: 'short', @@ -265,25 +259,20 @@
- +
@@ -296,17 +285,13 @@ Loading threads...
- {:else if filteredThreads.length === 0} + {:else if threads.length === 0}
-
- {searchValue ? 'No matches found' : 'No threads yet'} -
-

- {searchValue ? 'Try a different search.' : 'Create a new thread to get started.'} -

+
No threads yet
+

Create a new thread to get started.

{:else} - {#each filteredThreads as thread (thread._id)} + {#each threads as thread (thread._id)} + + btca | App @@ -157,13 +170,14 @@ sidebarOpen ? 'translate-x-0' : '-translate-x-full' }`} > - (sidebarOpen = false)} - /> + (commandPaletteOpen = true)} + on:close={() => (sidebarOpen = false)} + /> {#if sidebarOpen} @@ -189,3 +203,10 @@ + (commandPaletteOpen = false)} + onOpenAddResource={() => (addResourceModalOpen = true)} +/> + (addResourceModalOpen = false)} /> From 67cdab5bec8f1e1caed7805480ba541286c00e57 Mon Sep 17 00:00:00 2001 From: Ben Davis Date: Sun, 1 Mar 2026 16:47:33 -0800 Subject: [PATCH 2/2] cleanup --- apps/web/src/convex/_generated/api.d.ts | 307 +++++++++--------- apps/web/src/convex/_generated/api.js | 2 +- apps/web/src/convex/_generated/dataModel.d.ts | 22 +- apps/web/src/convex/_generated/server.d.ts | 34 +- apps/web/src/convex/_generated/server.js | 16 +- .../lib/components/AddResourceModal.svelte | 235 ++++++++++---- .../src/lib/components/CommandPalette.svelte | 49 +-- apps/web/src/lib/components/Sidebar.svelte | 12 +- apps/web/src/routes/app/+layout.svelte | 16 +- 9 files changed, 415 insertions(+), 278 deletions(-) diff --git a/apps/web/src/convex/_generated/api.d.ts b/apps/web/src/convex/_generated/api.d.ts index 6d941959..7c558585 100644 --- a/apps/web/src/convex/_generated/api.d.ts +++ b/apps/web/src/convex/_generated/api.d.ts @@ -8,72 +8,76 @@ * @module */ -import type * as analytics from '../analytics.js'; -import type * as analyticsEvents from '../analyticsEvents.js'; -import type * as apiHelpers from '../apiHelpers.js'; -import type * as authHelpers from '../authHelpers.js'; -import type * as clerkApiKeys from '../clerkApiKeys.js'; -import type * as clerkApiKeysQueries from '../clerkApiKeysQueries.js'; -import type * as crons from '../crons.js'; -import type * as githubAuth from '../githubAuth.js'; -import type * as githubConnections from '../githubConnections.js'; -import type * as http from '../http.js'; -import type * as instances_actions from '../instances/actions.js'; -import type * as instances_mutations from '../instances/mutations.js'; -import type * as instances_queries from '../instances/queries.js'; -import type * as mcp from '../mcp.js'; -import type * as mcp_resourceContract from '../mcp/resourceContract.js'; -import type * as mcpInternal from '../mcpInternal.js'; -import type * as mcpQuestions from '../mcpQuestions.js'; -import type * as messages from '../messages.js'; -import type * as migrations from '../migrations.js'; -import type * as privateWrappers from '../privateWrappers.js'; -import type * as projects from '../projects.js'; -import type * as resourceActions from '../resourceActions.js'; -import type * as resources from '../resources.js'; -import type * as scheduled_queries from '../scheduled/queries.js'; -import type * as scheduled_updates from '../scheduled/updates.js'; -import type * as scheduled_versionCheck from '../scheduled/versionCheck.js'; -import type * as streamSessions from '../streamSessions.js'; -import type * as threadTitle from '../threadTitle.js'; -import type * as threads from '../threads.js'; -import type * as usage from '../usage.js'; -import type * as users from '../users.js'; +import type * as analytics from "../analytics.js"; +import type * as analyticsEvents from "../analyticsEvents.js"; +import type * as apiHelpers from "../apiHelpers.js"; +import type * as authHelpers from "../authHelpers.js"; +import type * as clerkApiKeys from "../clerkApiKeys.js"; +import type * as clerkApiKeysQueries from "../clerkApiKeysQueries.js"; +import type * as crons from "../crons.js"; +import type * as githubAuth from "../githubAuth.js"; +import type * as githubConnections from "../githubConnections.js"; +import type * as http from "../http.js"; +import type * as instances_actions from "../instances/actions.js"; +import type * as instances_mutations from "../instances/mutations.js"; +import type * as instances_queries from "../instances/queries.js"; +import type * as mcp from "../mcp.js"; +import type * as mcp_resourceContract from "../mcp/resourceContract.js"; +import type * as mcpInternal from "../mcpInternal.js"; +import type * as mcpQuestions from "../mcpQuestions.js"; +import type * as messages from "../messages.js"; +import type * as migrations from "../migrations.js"; +import type * as privateWrappers from "../privateWrappers.js"; +import type * as projects from "../projects.js"; +import type * as resourceActions from "../resourceActions.js"; +import type * as resources from "../resources.js"; +import type * as scheduled_queries from "../scheduled/queries.js"; +import type * as scheduled_updates from "../scheduled/updates.js"; +import type * as scheduled_versionCheck from "../scheduled/versionCheck.js"; +import type * as streamSessions from "../streamSessions.js"; +import type * as threadTitle from "../threadTitle.js"; +import type * as threads from "../threads.js"; +import type * as usage from "../usage.js"; +import type * as users from "../users.js"; -import type { ApiFromModules, FilterApi, FunctionReference } from 'convex/server'; +import type { + ApiFromModules, + FilterApi, + FunctionReference, +} from "convex/server"; declare const fullApi: ApiFromModules<{ - analytics: typeof analytics; - analyticsEvents: typeof analyticsEvents; - apiHelpers: typeof apiHelpers; - authHelpers: typeof authHelpers; - clerkApiKeys: typeof clerkApiKeys; - clerkApiKeysQueries: typeof clerkApiKeysQueries; - crons: typeof crons; - githubAuth: typeof githubAuth; - githubConnections: typeof githubConnections; - http: typeof http; - 'instances/actions': typeof instances_actions; - 'instances/mutations': typeof instances_mutations; - 'instances/queries': typeof instances_queries; - mcp: typeof mcp; - 'mcp/resourceContract': typeof mcp_resourceContract; - mcpInternal: typeof mcpInternal; - mcpQuestions: typeof mcpQuestions; - messages: typeof messages; - migrations: typeof migrations; - privateWrappers: typeof privateWrappers; - projects: typeof projects; - resourceActions: typeof resourceActions; - resources: typeof resources; - 'scheduled/queries': typeof scheduled_queries; - 'scheduled/updates': typeof scheduled_updates; - 'scheduled/versionCheck': typeof scheduled_versionCheck; - streamSessions: typeof streamSessions; - threadTitle: typeof threadTitle; - threads: typeof threads; - usage: typeof usage; - users: typeof users; + analytics: typeof analytics; + analyticsEvents: typeof analyticsEvents; + apiHelpers: typeof apiHelpers; + authHelpers: typeof authHelpers; + clerkApiKeys: typeof clerkApiKeys; + clerkApiKeysQueries: typeof clerkApiKeysQueries; + crons: typeof crons; + githubAuth: typeof githubAuth; + githubConnections: typeof githubConnections; + http: typeof http; + "instances/actions": typeof instances_actions; + "instances/mutations": typeof instances_mutations; + "instances/queries": typeof instances_queries; + mcp: typeof mcp; + "mcp/resourceContract": typeof mcp_resourceContract; + mcpInternal: typeof mcpInternal; + mcpQuestions: typeof mcpQuestions; + messages: typeof messages; + migrations: typeof migrations; + privateWrappers: typeof privateWrappers; + projects: typeof projects; + resourceActions: typeof resourceActions; + resources: typeof resources; + "scheduled/queries": typeof scheduled_queries; + "scheduled/updates": typeof scheduled_updates; + "scheduled/versionCheck": typeof scheduled_versionCheck; + streamSessions: typeof streamSessions; + threadTitle: typeof threadTitle; + threads: typeof threads; + usage: typeof usage; + users: typeof users; }>; /** @@ -84,7 +88,10 @@ declare const fullApi: ApiFromModules<{ * const myFunctionReference = api.myModule.myFunction; * ``` */ -export declare const api: FilterApi>; +export declare const api: FilterApi< + typeof fullApi, + FunctionReference +>; /** * A utility for referencing Convex functions in your app's internal API. @@ -94,88 +101,96 @@ export declare const api: FilterApi>; +export declare const internal: FilterApi< + typeof fullApi, + FunctionReference +>; export declare const components: { - migrations: { - lib: { - cancel: FunctionReference< - 'mutation', - 'internal', - { name: string }, - { - batchSize?: number; - cursor?: string | null; - error?: string; - isDone: boolean; - latestEnd?: number; - latestStart: number; - name: string; - next?: Array; - processed: number; - state: 'inProgress' | 'success' | 'failed' | 'canceled' | 'unknown'; - } - >; - cancelAll: FunctionReference< - 'mutation', - 'internal', - { sinceTs?: number }, - Array<{ - batchSize?: number; - cursor?: string | null; - error?: string; - isDone: boolean; - latestEnd?: number; - latestStart: number; - name: string; - next?: Array; - processed: number; - state: 'inProgress' | 'success' | 'failed' | 'canceled' | 'unknown'; - }> - >; - clearAll: FunctionReference<'mutation', 'internal', { before?: number }, null>; - getStatus: FunctionReference< - 'query', - 'internal', - { limit?: number; names?: Array }, - Array<{ - batchSize?: number; - cursor?: string | null; - error?: string; - isDone: boolean; - latestEnd?: number; - latestStart: number; - name: string; - next?: Array; - processed: number; - state: 'inProgress' | 'success' | 'failed' | 'canceled' | 'unknown'; - }> - >; - migrate: FunctionReference< - 'mutation', - 'internal', - { - batchSize?: number; - cursor?: string | null; - dryRun: boolean; - fnHandle: string; - name: string; - next?: Array<{ fnHandle: string; name: string }>; - oneBatchOnly?: boolean; - }, - { - batchSize?: number; - cursor?: string | null; - error?: string; - isDone: boolean; - latestEnd?: number; - latestStart: number; - name: string; - next?: Array; - processed: number; - state: 'inProgress' | 'success' | 'failed' | 'canceled' | 'unknown'; - } - >; - }; - }; + migrations: { + lib: { + cancel: FunctionReference< + "mutation", + "internal", + { name: string }, + { + batchSize?: number; + cursor?: string | null; + error?: string; + isDone: boolean; + latestEnd?: number; + latestStart: number; + name: string; + next?: Array; + processed: number; + state: "inProgress" | "success" | "failed" | "canceled" | "unknown"; + } + >; + cancelAll: FunctionReference< + "mutation", + "internal", + { sinceTs?: number }, + Array<{ + batchSize?: number; + cursor?: string | null; + error?: string; + isDone: boolean; + latestEnd?: number; + latestStart: number; + name: string; + next?: Array; + processed: number; + state: "inProgress" | "success" | "failed" | "canceled" | "unknown"; + }> + >; + clearAll: FunctionReference< + "mutation", + "internal", + { before?: number }, + null + >; + getStatus: FunctionReference< + "query", + "internal", + { limit?: number; names?: Array }, + Array<{ + batchSize?: number; + cursor?: string | null; + error?: string; + isDone: boolean; + latestEnd?: number; + latestStart: number; + name: string; + next?: Array; + processed: number; + state: "inProgress" | "success" | "failed" | "canceled" | "unknown"; + }> + >; + migrate: FunctionReference< + "mutation", + "internal", + { + batchSize?: number; + cursor?: string | null; + dryRun: boolean; + fnHandle: string; + name: string; + next?: Array<{ fnHandle: string; name: string }>; + oneBatchOnly?: boolean; + }, + { + batchSize?: number; + cursor?: string | null; + error?: string; + isDone: boolean; + latestEnd?: number; + latestStart: number; + name: string; + next?: Array; + processed: number; + state: "inProgress" | "success" | "failed" | "canceled" | "unknown"; + } + >; + }; + }; }; diff --git a/apps/web/src/convex/_generated/api.js b/apps/web/src/convex/_generated/api.js index 24593c74..44bf9858 100644 --- a/apps/web/src/convex/_generated/api.js +++ b/apps/web/src/convex/_generated/api.js @@ -8,7 +8,7 @@ * @module */ -import { anyApi, componentsGeneric } from 'convex/server'; +import { anyApi, componentsGeneric } from "convex/server"; /** * A utility for referencing Convex functions in your app's API. diff --git a/apps/web/src/convex/_generated/dataModel.d.ts b/apps/web/src/convex/_generated/dataModel.d.ts index 5428df6f..f97fd194 100644 --- a/apps/web/src/convex/_generated/dataModel.d.ts +++ b/apps/web/src/convex/_generated/dataModel.d.ts @@ -9,13 +9,13 @@ */ import type { - DataModelFromSchemaDefinition, - DocumentByName, - TableNamesInDataModel, - SystemTableNames -} from 'convex/server'; -import type { GenericId } from 'convex/values'; -import schema from '../schema.js'; + DataModelFromSchemaDefinition, + DocumentByName, + TableNamesInDataModel, + SystemTableNames, +} from "convex/server"; +import type { GenericId } from "convex/values"; +import schema from "../schema.js"; /** * The names of all of your Convex tables. @@ -27,7 +27,10 @@ export type TableNames = TableNamesInDataModel; * * @typeParam TableName - A string literal type of the table name (like "users"). */ -export type Doc = DocumentByName; +export type Doc = DocumentByName< + DataModel, + TableName +>; /** * An identifier for a document in Convex. @@ -42,7 +45,8 @@ export type Doc = DocumentByName = GenericId; +export type Id = + GenericId; /** * A type describing your Convex data model. diff --git a/apps/web/src/convex/_generated/server.d.ts b/apps/web/src/convex/_generated/server.d.ts index 1cc047ef..bec05e68 100644 --- a/apps/web/src/convex/_generated/server.d.ts +++ b/apps/web/src/convex/_generated/server.d.ts @@ -9,17 +9,17 @@ */ import { - ActionBuilder, - HttpActionBuilder, - MutationBuilder, - QueryBuilder, - GenericActionCtx, - GenericMutationCtx, - GenericQueryCtx, - GenericDatabaseReader, - GenericDatabaseWriter -} from 'convex/server'; -import type { DataModel } from './dataModel.js'; + ActionBuilder, + HttpActionBuilder, + MutationBuilder, + QueryBuilder, + GenericActionCtx, + GenericMutationCtx, + GenericQueryCtx, + GenericDatabaseReader, + GenericDatabaseWriter, +} from "convex/server"; +import type { DataModel } from "./dataModel.js"; /** * Define a query in this Convex app's public API. @@ -29,7 +29,7 @@ import type { DataModel } from './dataModel.js'; * @param func - The query function. It receives a {@link QueryCtx} as its first argument. * @returns The wrapped query. Include this as an `export` to name it and make it accessible. */ -export declare const query: QueryBuilder; +export declare const query: QueryBuilder; /** * Define a query that is only accessible from other Convex functions (but not from the client). @@ -39,7 +39,7 @@ export declare const query: QueryBuilder; * @param func - The query function. It receives a {@link QueryCtx} as its first argument. * @returns The wrapped query. Include this as an `export` to name it and make it accessible. */ -export declare const internalQuery: QueryBuilder; +export declare const internalQuery: QueryBuilder; /** * Define a mutation in this Convex app's public API. @@ -49,7 +49,7 @@ export declare const internalQuery: QueryBuilder; * @param func - The mutation function. It receives a {@link MutationCtx} as its first argument. * @returns The wrapped mutation. Include this as an `export` to name it and make it accessible. */ -export declare const mutation: MutationBuilder; +export declare const mutation: MutationBuilder; /** * Define a mutation that is only accessible from other Convex functions (but not from the client). @@ -59,7 +59,7 @@ export declare const mutation: MutationBuilder; * @param func - The mutation function. It receives a {@link MutationCtx} as its first argument. * @returns The wrapped mutation. Include this as an `export` to name it and make it accessible. */ -export declare const internalMutation: MutationBuilder; +export declare const internalMutation: MutationBuilder; /** * Define an action in this Convex app's public API. @@ -72,7 +72,7 @@ export declare const internalMutation: MutationBuilder; * @param func - The action. It receives an {@link ActionCtx} as its first argument. * @returns The wrapped action. Include this as an `export` to name it and make it accessible. */ -export declare const action: ActionBuilder; +export declare const action: ActionBuilder; /** * Define an action that is only accessible from other Convex functions (but not from the client). @@ -80,7 +80,7 @@ export declare const action: ActionBuilder; * @param func - The function. It receives an {@link ActionCtx} as its first argument. * @returns The wrapped function. Include this as an `export` to name it and make it accessible. */ -export declare const internalAction: ActionBuilder; +export declare const internalAction: ActionBuilder; /** * Define an HTTP action. diff --git a/apps/web/src/convex/_generated/server.js b/apps/web/src/convex/_generated/server.js index a18aa285..bf3d25ad 100644 --- a/apps/web/src/convex/_generated/server.js +++ b/apps/web/src/convex/_generated/server.js @@ -9,14 +9,14 @@ */ import { - actionGeneric, - httpActionGeneric, - queryGeneric, - mutationGeneric, - internalActionGeneric, - internalMutationGeneric, - internalQueryGeneric -} from 'convex/server'; + actionGeneric, + httpActionGeneric, + queryGeneric, + mutationGeneric, + internalActionGeneric, + internalMutationGeneric, + internalQueryGeneric, +} from "convex/server"; /** * Define a query in this Convex app's public API. diff --git a/apps/web/src/lib/components/AddResourceModal.svelte b/apps/web/src/lib/components/AddResourceModal.svelte index 47234127..a0567e7e 100644 --- a/apps/web/src/lib/components/AddResourceModal.svelte +++ b/apps/web/src/lib/components/AddResourceModal.svelte @@ -1,5 +1,12 @@ - - {#if isOpen}
event.stopPropagation()} - onkeydown={(event) => { - event.stopPropagation(); - }} + onkeydown={handleKeydown} > -
-
+
+
- + {#if resourceType === 'git'} + + {:else} + + {/if}
-
+

Add a resource

-

Connect a git repository so btca can index it.

+

+ {resourceType === 'git' + ? 'Connect a git repository so btca can index it.' + : 'Attach an npm package so btca can use its published docs and metadata.'} +

-
-
- - - {#if parseError} -

{parseError}

- {/if} - {#if detectedRepo} -
- - - Detected {detectedRepo} · default branch {branchName} - +
+ +
+ {#if resourceType === 'git'} +
+ + + {#if parseError} +

{parseError}

+ {/if} + {#if detectedRepo} +
+ + + Detected {detectedRepo} · default branch {branchName} + +
+ {/if} +
+ {:else} +
+ + +
+ {/if} +
-
- -
- + {#if resourceType === 'git'} +
+ +
+ + +
+
+ {:else} +
+
-
+ {/if}
{#if submitError} @@ -305,7 +413,7 @@

- We'll cache the repo on your instance after the next chat mention. + We'll sync this resource onto your instance after the next chat mention.

diff --git a/apps/web/src/lib/components/CommandPalette.svelte b/apps/web/src/lib/components/CommandPalette.svelte index a85c52e5..b81851eb 100644 --- a/apps/web/src/lib/components/CommandPalette.svelte +++ b/apps/web/src/lib/components/CommandPalette.svelte @@ -41,6 +41,7 @@ let { isOpen, threads, onClose, onOpenAddResource }: Props = $props(); const themeStore = getThemeStore(); + const MAX_VISIBLE_THREADS = 3; let searchQuery = $state(''); let selectedIndex = $state(0); @@ -65,22 +66,24 @@ const threadItems: CommandItem[] = (() => { const filtered = !query - ? threads.slice(0, 6) - : threads.filter((t) => (t.title ?? t._id).toLowerCase().includes(query)).slice(0, 8); - return filtered.map((t) => ({ - id: `thread-${t._id}`, - group: 'Threads', - label: t.title ?? `Thread ${t._id.slice(0, 8)}…`, - sublabel: new Date(t.lastActivityAt).toLocaleDateString(undefined, { - month: 'short', - day: 'numeric' - }), - icon: MessageSquare, - onSelect: () => { - goto(`/app/chat/${t._id}`); - onClose(); - } - })); + ? threads + : threads.filter((t) => (t.title ?? t._id).toLowerCase().includes(query)); + return filtered + .map((t) => ({ + id: `thread-${t._id}`, + group: 'Threads', + label: t.title ?? `Thread ${t._id.slice(0, 8)}…`, + sublabel: new Date(t.lastActivityAt).toLocaleDateString(undefined, { + month: 'short', + day: 'numeric' + }), + icon: MessageSquare, + onSelect: () => { + goto(`/app/chat/${t._id}`); + onClose(); + } + })) + .slice(0, MAX_VISIBLE_THREADS); })(); const actionItems: CommandItem[] = [ @@ -162,8 +165,7 @@ const filteredNonThread = query ? [...actionItems, ...navItems].filter( (item) => - item.label.toLowerCase().includes(query) || - item.group.toLowerCase().includes(query) + item.label.toLowerCase().includes(query) || item.group.toLowerCase().includes(query) ) : [...actionItems, ...navItems]; @@ -198,6 +200,7 @@ onClose(); return; } + if (allItems.length === 0) return; if (event.key === 'ArrowDown') { event.preventDefault(); selectedIndex = Math.min(selectedIndex + 1, allItems.length - 1); @@ -216,8 +219,6 @@ } - - {#if isOpen}
e.stopPropagation()} - onkeydown={(e) => e.stopPropagation()} + onkeydown={handleKeydown} >
@@ -309,7 +310,8 @@ ↑↓ + >↑↓ navigate @@ -323,7 +325,8 @@ Esc + >Esc close
diff --git a/apps/web/src/lib/components/Sidebar.svelte b/apps/web/src/lib/components/Sidebar.svelte index 9201d5dc..97a3ed7d 100644 --- a/apps/web/src/lib/components/Sidebar.svelte +++ b/apps/web/src/lib/components/Sidebar.svelte @@ -43,8 +43,13 @@ onOpenCommandPalette: () => void; } - let { threads, currentThreadId, isOpen, isLoading = false, onOpenCommandPalette }: Props = - $props(); + let { + threads, + currentThreadId, + isOpen, + isLoading = false, + onOpenCommandPalette + }: Props = $props(); const dispatch = createEventDispatcher<{ close: void }>(); const auth = getAuthState(); @@ -271,7 +276,8 @@ ⌘K + >⌘K
diff --git a/apps/web/src/routes/app/+layout.svelte b/apps/web/src/routes/app/+layout.svelte index 7318f740..4186d7ce 100644 --- a/apps/web/src/routes/app/+layout.svelte +++ b/apps/web/src/routes/app/+layout.svelte @@ -170,14 +170,14 @@ sidebarOpen ? 'translate-x-0' : '-translate-x-full' }`} > - (commandPaletteOpen = true)} - on:close={() => (sidebarOpen = false)} - /> + (commandPaletteOpen = true)} + on:close={() => (sidebarOpen = false)} + /> {#if sidebarOpen}