From e8fc54cadee14a13da64a4f5432ac2ca3fd51a1a Mon Sep 17 00:00:00 2001 From: Dorian Date: Tue, 3 Mar 2026 09:31:18 +0000 Subject: [PATCH] feat(content): add places, code mode, mobile context tab, and detail views - Add Places/Restaurants content type with PlaceCard, PlaceDetail, PlaceGrid - Add WebsiteDetail and MagazineSectionDetail views for Context panel - Enhance MagazineGrid hero with background image and 3x taller header - Add mobile 3-tab layout (Chat, Content, Context) with detail navigation - Add /code command system: useCodeContext composable, ProjectGrid, FileTreeNode, CodeDetail for IDE-style code viewing across all three panels - Fix /code bubble and prompt index clicks to re-activate code mode - Fix updatePanelFromText overwriting code tab by skipping command messages Co-Authored-By: Claude Opus 4.6 --- .../app/src/components/chat/ChatMessage.vue | 57 +++- .../app/src/components/chat/ChatWindow.vue | 60 +++- .../app/src/components/chat/PromptIndex.vue | 1 + .../app/src/components/content/CodeDetail.vue | 104 ++++++ .../components/content/ContentGridView.vue | 27 +- .../src/components/content/ContentPanel.vue | 6 + .../app/src/components/content/DetailView.vue | 44 +++ .../src/components/content/FileTreeNode.vue | 79 +++++ .../src/components/content/MagazineGrid.vue | 57 ++-- .../content/MagazineSectionDetail.vue | 157 ++++++++++ .../app/src/components/content/NewsGrid.vue | 6 +- .../app/src/components/content/PlaceCard.vue | 68 ++++ .../src/components/content/PlaceDetail.vue | 197 ++++++++++++ .../app/src/components/content/PlaceGrid.vue | 142 +++++++++ .../src/components/content/ProjectGrid.vue | 140 +++++++++ .../src/components/content/WebsiteDetail.vue | 76 +++++ packages/app/src/composables/useAI.ts | 2 + .../app/src/composables/useCodeContext.ts | 206 ++++++++++++ .../app/src/composables/useContentPanel.ts | 241 +++++++++++++- .../app/src/composables/useImageFallback.ts | 16 + packages/app/src/pages/ChatPage.vue | 296 ++++++++++++++---- packages/core/src/types/content.ts | 26 ++ 22 files changed, 1901 insertions(+), 107 deletions(-) create mode 100644 packages/app/src/components/content/CodeDetail.vue create mode 100644 packages/app/src/components/content/FileTreeNode.vue create mode 100644 packages/app/src/components/content/MagazineSectionDetail.vue create mode 100644 packages/app/src/components/content/PlaceCard.vue create mode 100644 packages/app/src/components/content/PlaceDetail.vue create mode 100644 packages/app/src/components/content/PlaceGrid.vue create mode 100644 packages/app/src/components/content/ProjectGrid.vue create mode 100644 packages/app/src/components/content/WebsiteDetail.vue create mode 100644 packages/app/src/composables/useCodeContext.ts diff --git a/packages/app/src/components/chat/ChatMessage.vue b/packages/app/src/components/chat/ChatMessage.vue index 535d3666..4fd4da9f 100644 --- a/packages/app/src/components/chat/ChatMessage.vue +++ b/packages/app/src/components/chat/ChatMessage.vue @@ -57,6 +57,15 @@ /> +
+ +
+
View all {{ inlineImages.length }} images → +
diff --git a/packages/app/src/components/content/FileTreeNode.vue b/packages/app/src/components/content/FileTreeNode.vue new file mode 100644 index 00000000..ec6ebebc --- /dev/null +++ b/packages/app/src/components/content/FileTreeNode.vue @@ -0,0 +1,79 @@ + + + diff --git a/packages/app/src/components/content/MagazineGrid.vue b/packages/app/src/components/content/MagazineGrid.vue index 45b9389a..e4b9ea64 100644 --- a/packages/app/src/components/content/MagazineGrid.vue +++ b/packages/app/src/components/content/MagazineGrid.vue @@ -14,17 +14,38 @@
- -
-

- In response to -

-

- {{ headlineText }} -

-
+ +
+ +
+ +
+
+ +
+ +
+

+ In response to +

+

+ {{ headlineText }} +

+
@@ -59,7 +80,7 @@ :class="isDark ? 'bg-[#0a0a0a] hover:bg-white/[0.03]' : 'bg-[#faf9f6] hover:bg-black/[0.02]'" - @click="tile.section?.url && openLink(tile.section.url)"> + @click="tile.section && openTile(tile.section)">

@@ -91,7 +112,7 @@ ? isDark ? 'bg-white/[0.04]' : 'bg-black/[0.04]' : '' ]" - @click="tile.section?.url && openLink(tile.section.url)"> + @click="tile.section && openTile(tile.section)">

@@ -127,8 +148,7 @@ diff --git a/packages/app/src/components/content/NewsGrid.vue b/packages/app/src/components/content/NewsGrid.vue index 50419311..d50eee5e 100644 --- a/packages/app/src/components/content/NewsGrid.vue +++ b/packages/app/src/components/content/NewsGrid.vue @@ -122,7 +122,6 @@ import { ref, computed } from 'vue' import type { WebSearchResult } from '@aiui/core/types/message' import { useTheme } from '@/composables/useTheme' import { useContentPanel } from '@/composables/useContentPanel' -import { useArticleOverlayStore } from '@/stores/articleOverlay' const props = withDefaults(defineProps<{ articles: WebSearchResult[] @@ -138,8 +137,7 @@ const props = withDefaults(defineProps<{ }) const { isDark } = useTheme() -const { openArticleDetail } = useContentPanel() -const overlayStore = useArticleOverlayStore() +const { openArticleDetail, openWebsiteDetail } = useContentPanel() const search = ref('') const failedImgs = ref>(new Set()) @@ -172,7 +170,7 @@ function faviconUrl(url: string): string | null { function openArticle(article: WebSearchResult) { if (props.variant === 'websites') { - overlayStore.open(article.url, article.title, undefined, article.imgSrc) + openWebsiteDetail(article) } else { openArticleDetail(article) } diff --git a/packages/app/src/components/content/PlaceCard.vue b/packages/app/src/components/content/PlaceCard.vue new file mode 100644 index 00000000..6f9b84d1 --- /dev/null +++ b/packages/app/src/components/content/PlaceCard.vue @@ -0,0 +1,68 @@ + + + diff --git a/packages/app/src/components/content/PlaceDetail.vue b/packages/app/src/components/content/PlaceDetail.vue new file mode 100644 index 00000000..270be57a --- /dev/null +++ b/packages/app/src/components/content/PlaceDetail.vue @@ -0,0 +1,197 @@ + + + diff --git a/packages/app/src/components/content/PlaceGrid.vue b/packages/app/src/components/content/PlaceGrid.vue new file mode 100644 index 00000000..2d91a689 --- /dev/null +++ b/packages/app/src/components/content/PlaceGrid.vue @@ -0,0 +1,142 @@ + + + diff --git a/packages/app/src/components/content/ProjectGrid.vue b/packages/app/src/components/content/ProjectGrid.vue new file mode 100644 index 00000000..59bf5f10 --- /dev/null +++ b/packages/app/src/components/content/ProjectGrid.vue @@ -0,0 +1,140 @@ + + + diff --git a/packages/app/src/components/content/WebsiteDetail.vue b/packages/app/src/components/content/WebsiteDetail.vue new file mode 100644 index 00000000..a665ffa8 --- /dev/null +++ b/packages/app/src/components/content/WebsiteDetail.vue @@ -0,0 +1,76 @@ +