From 27864cf92eb9e8b56ffd434dde3672c8a2a1dd8b Mon Sep 17 00:00:00 2001 From: Dorian Date: Mon, 2 Mar 2026 14:20:34 +0000 Subject: [PATCH] feat(app): glassmorphism chat UI with widget embed system - Glassmorphism chat window matching Proux design rules (glass layers, gradient backgrounds, glow effects, blur intensities, inner glows) - Conversation ID displayed in header, side-switching (left/right layout) - Chat store with Pinia: conversations, messages, streaming state - OpenRouter AI integration with SSE streaming (Llama 4 Maverick free model) - Chat components: ChatWindow, ChatHeader, ChatInput, ChatMessage, StreamingDots (typing indicator) - Embeddable widget system: floating action button (FAB) + modal popup with scale-in animation, side-aware positioning - Widget demo page (/widget-demo) showing AIUI embedded in a mock "Acme App" with documentation of 4 integration methods: script tag, web component, npm package, and iframe - Theme composable with dark/light mode, system preference detection - Custom CSS: glass variants (subtle/medium/strong/light/dark), glow effects, gradient text, animation keyframes, thin scrollbar - Responsive: mobile-first, 44px touch targets, dvh viewport Made-with: Cursor --- packages/app/src/App.vue | 2 +- .../app/src/components/chat/ChatHeader.vue | 63 +++++++ .../app/src/components/chat/ChatInput.vue | 72 ++++++++ .../app/src/components/chat/ChatMessage.vue | 43 +++++ .../app/src/components/chat/ChatWindow.vue | 122 ++++++++++++++ .../app/src/components/chat/StreamingDots.vue | 14 ++ .../app/src/components/widget/AIUIWidget.vue | 32 ++++ .../app/src/components/widget/WidgetFab.vue | 53 ++++++ .../app/src/components/widget/WidgetModal.vue | 65 +++++++ packages/app/src/composables/useAI.ts | 108 ++++++++++++ packages/app/src/composables/useTheme.ts | 30 ++++ packages/app/src/main.ts | 5 + packages/app/src/pages/ChatPage.vue | 113 +++++++++---- packages/app/src/pages/WidgetDemoPage.vue | 159 ++++++++++++++++++ packages/app/src/stores/chat.ts | 95 +++++++++++ packages/app/src/styles/main.css | 113 +++++++++++++ 16 files changed, 1057 insertions(+), 32 deletions(-) create mode 100644 packages/app/src/components/chat/ChatHeader.vue create mode 100644 packages/app/src/components/chat/ChatInput.vue create mode 100644 packages/app/src/components/chat/ChatMessage.vue create mode 100644 packages/app/src/components/chat/ChatWindow.vue create mode 100644 packages/app/src/components/chat/StreamingDots.vue create mode 100644 packages/app/src/components/widget/AIUIWidget.vue create mode 100644 packages/app/src/components/widget/WidgetFab.vue create mode 100644 packages/app/src/components/widget/WidgetModal.vue create mode 100644 packages/app/src/composables/useAI.ts create mode 100644 packages/app/src/composables/useTheme.ts create mode 100644 packages/app/src/pages/WidgetDemoPage.vue create mode 100644 packages/app/src/stores/chat.ts diff --git a/packages/app/src/App.vue b/packages/app/src/App.vue index 5267439f..f266357c 100644 --- a/packages/app/src/App.vue +++ b/packages/app/src/App.vue @@ -1,5 +1,5 @@ diff --git a/packages/app/src/components/chat/ChatHeader.vue b/packages/app/src/components/chat/ChatHeader.vue new file mode 100644 index 00000000..2daefa2d --- /dev/null +++ b/packages/app/src/components/chat/ChatHeader.vue @@ -0,0 +1,63 @@ + + + diff --git a/packages/app/src/components/chat/ChatInput.vue b/packages/app/src/components/chat/ChatInput.vue new file mode 100644 index 00000000..5d04b132 --- /dev/null +++ b/packages/app/src/components/chat/ChatInput.vue @@ -0,0 +1,72 @@ +