:not(.qwen-message.message-item)
+ + .qwen-message.message-item:not(.user-message-container)::after {
top: 15px;
}
/* 处理每组AI消息序列的结尾 */
-.qwen-message.message-item:not(.user-message-container):last-child::after,
-.qwen-message.message-item:not(.user-message-container):has(+ .user-message-container)::after {
- bottom: calc(100% - 15px);
+/* 后一个兄弟是用户消息时 */
+.qwen-message.message-item:not(.user-message-container):has(+ .user-message-container)::after,
+/* 或者后一个兄弟不是 .qwen-message.message-item(如等待提示、哨兵元素、卡片样式工具调用等)时 */
+.qwen-message.message-item:not(.user-message-container):has(+ :not(.qwen-message.message-item))::after,
+/* 真正是父容器最后一个子元素时 */
+.qwen-message.message-item:not(.user-message-container):last-child::after {
+ /* 注意:同时设置 top 和 bottom 时高度为 (容器高度 - top - bottom)。
+ * 这里期望“底部留 15px 间距”,因此 bottom 应为 15px(而不是 calc(100% - 15px))。 */
top: 0;
-}
\ No newline at end of file
+ bottom: calc(100% - 15px);
+}
+
+.user-message-container:first-child {
+ margin-top: 0;
+}
+
+.message-item {
+ padding: 8px 0;
+ width: 100%;
+ align-items: flex-start;
+ padding-left: 30px;
+ user-select: text;
+ position: relative;
+ padding-top: 8px;
+ padding-bottom: 8px;
+}
diff --git a/packages/vscode-ide-companion/src/webview/components/messages/UserMessage.tsx b/packages/vscode-ide-companion/src/webview/components/messages/UserMessage.tsx
index f327546c..ad665048 100644
--- a/packages/vscode-ide-companion/src/webview/components/messages/UserMessage.tsx
+++ b/packages/vscode-ide-companion/src/webview/components/messages/UserMessage.tsx
@@ -45,7 +45,7 @@ export const UserMessage: React.FC = ({
return (
void;
+
+ /**
+ * Optional: Custom message content (if not provided, uses default)
+ */
+ message?: React.ReactNode;
+
+ /**
+ * Optional: Custom link text
+ */
+ linkText?: string;
+
+ /**
+ * Optional: Callback when the link is clicked
+ */
+ onLinkClick?: (e: React.MouseEvent
) => void;
+}
+
+export const InfoBanner: React.FC = ({
+ visible,
+ onDismiss,
+ message,
+ linkText = 'Switch back in Settings.',
+ onLinkClick,
+}) => {
+ if (!visible) {
+ return null;
+ }
+
+ return (
+
+
+ {/* Icon */}
+
+
+ {/* Message */}
+
+
+
+ {/* Close button */}
+
+
+ );
+};
diff --git a/packages/vscode-ide-companion/src/webview/styles/ClaudeCodeStyles.css b/packages/vscode-ide-companion/src/webview/styles/ClaudeCodeStyles.css
index 429263ce..424b2a64 100644
--- a/packages/vscode-ide-companion/src/webview/styles/ClaudeCodeStyles.css
+++ b/packages/vscode-ide-companion/src/webview/styles/ClaudeCodeStyles.css
@@ -10,8 +10,9 @@
/* Import component styles */
@import '../components/toolcalls/shared/DiffDisplay.css';
@import '../components/messages/AssistantMessage.css';
-@import '../components/toolcalls/shared/MergedSimpleTimeline.css';
+@import '../components/toolcalls/shared/SimpleTimeline.css';
@import '../components/messages/QwenMessageTimeline.css';
+@import '../components/MarkdownRenderer.css';
/* ===========================
diff --git a/packages/vscode-ide-companion/src/webview/styles/tailwind.css b/packages/vscode-ide-companion/src/webview/styles/tailwind.css
index 82811298..bb501050 100644
--- a/packages/vscode-ide-companion/src/webview/styles/tailwind.css
+++ b/packages/vscode-ide-companion/src/webview/styles/tailwind.css
@@ -95,7 +95,8 @@
color: var(--app-secondary-foreground);
}
.btn-text-compact--primary {
- color: var(--app-primary-foreground);
+ color: var(--app-secondary-foreground);
+ /* color: var(--app-primary-foreground); */
}
.btn-text-compact:hover {
background-color: var(--app-ghost-button-hover-background);
diff --git a/packages/vscode-ide-companion/tailwind.config.js b/packages/vscode-ide-companion/tailwind.config.js
index a6994918..573a8d67 100644
--- a/packages/vscode-ide-companion/tailwind.config.js
+++ b/packages/vscode-ide-companion/tailwind.config.js
@@ -15,7 +15,6 @@ export default {
'./src/webview/components/toolcalls/**/*.{js,jsx,ts,tsx}',
'./src/webview/components/InProgressToolCall.tsx',
'./src/webview/components/MessageContent.tsx',
- './src/webview/components/InfoBanner.tsx',
'./src/webview/components/InputForm.tsx',
'./src/webview/components/PermissionDrawer.tsx',
'./src/webview/components/PlanDisplay.tsx',