From 2963bca7feab74c45ad2aa201008fc374886e319 Mon Sep 17 00:00:00 2001 From: Dorian Date: Wed, 4 Mar 2026 18:08:58 +0000 Subject: [PATCH] feat(app): add always-visible Prompt tab with magazine brief style Adds a 'Prompt' tab that is always present as the rightmost tab in the content panel. Shows the user's original query as a single magazine-style tile using the existing MagazineGrid component. Co-Authored-By: Claude Opus 4.6 --- packages/app/src/components/content/ContentGridView.vue | 7 +++++++ packages/app/src/components/content/ContentPanel.vue | 1 + packages/app/src/composables/contentFiltering.ts | 2 +- packages/app/src/composables/useContentPanel.ts | 6 ++++-- packages/app/src/pages/ChatPage.vue | 1 + 5 files changed, 14 insertions(+), 3 deletions(-) diff --git a/packages/app/src/components/content/ContentGridView.vue b/packages/app/src/components/content/ContentGridView.vue index aeb35218..9b257754 100644 --- a/packages/app/src/components/content/ContentGridView.vue +++ b/packages/app/src/components/content/ContentGridView.vue @@ -72,6 +72,13 @@ + diff --git a/packages/app/src/components/content/ContentPanel.vue b/packages/app/src/components/content/ContentPanel.vue index e0bfb94b..d76c9446 100644 --- a/packages/app/src/components/content/ContentPanel.vue +++ b/packages/app/src/components/content/ContentPanel.vue @@ -348,6 +348,7 @@ const TAB_LABELS: Record = { nostr: 'Nostr', favorites: 'Favorites', discover: 'Discover', + prompt: 'Prompt', } function tabLabel(tab: ContentTab): string { diff --git a/packages/app/src/composables/contentFiltering.ts b/packages/app/src/composables/contentFiltering.ts index dba24d26..66db2ac8 100644 --- a/packages/app/src/composables/contentFiltering.ts +++ b/packages/app/src/composables/contentFiltering.ts @@ -1,4 +1,4 @@ -export type ContentTab = 'film' | 'song' | 'podcast' | 'book' | 'tvshow' | 'image' | 'place' | 'news' | 'websites' | 'magazine' | 'code' | 'design-system' | 'nostr' | 'app' | 'favorites' | 'discover' +export type ContentTab = 'film' | 'song' | 'podcast' | 'book' | 'tvshow' | 'image' | 'place' | 'news' | 'websites' | 'magazine' | 'code' | 'design-system' | 'nostr' | 'app' | 'favorites' | 'discover' | 'prompt' export interface MagazineSection { title: string diff --git a/packages/app/src/composables/useContentPanel.ts b/packages/app/src/composables/useContentPanel.ts index 14c1c5ab..31e1b703 100644 --- a/packages/app/src/composables/useContentPanel.ts +++ b/packages/app/src/composables/useContentPanel.ts @@ -139,8 +139,10 @@ export function useContentPanel() { } const tabs = filterTabsByContext(userQuery, films.length > 0, songs.length > 0, podcasts.length > 0, books.length > 0, tvSeries.length > 0, images.length > 0, places.length > 0, hasNews, hasWebsites, hasMagazine, hasNostr, hasApps, hasCode) - availableTabs.value = tabs.length > 0 ? tabs : ['film'] - activeTab.value = tabs[0] ?? 'film' + // Always append Prompt tab as the rightmost tab + const tabsWithPrompt = tabs.length > 0 ? [...tabs, 'prompt' as const] : ['prompt' as const] + availableTabs.value = tabsWithPrompt + activeTab.value = tabs[0] ?? 'prompt' const showFilms = tabs.includes('film') const showBooks = tabs.includes('book') diff --git a/packages/app/src/pages/ChatPage.vue b/packages/app/src/pages/ChatPage.vue index fad20645..e31e5e12 100644 --- a/packages/app/src/pages/ChatPage.vue +++ b/packages/app/src/pages/ChatPage.vue @@ -591,6 +591,7 @@ const TAB_LABELS: Record = { nostr: 'Nostr', favorites: 'Favorites', discover: 'Discover', + prompt: 'Prompt', } function tabLabel(tab: ContentTab): string {