Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions packages/desktop/src/renderer/components/ChatPanel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ export default function ChatPanel({
<span className="text-[11px] font-medium text-xibe-text-dim bg-xibe-surface px-3 py-1 rounded-full border border-xibe-border-subtle">{msg.content}</span>
</div>
) : msg.role === 'error' ? (
<div key={msg.id} className="text-sm text-xibe-error bg-xibe-error/10 border border-xibe-error/20 rounded-xl px-4 py-3 shadow-sm">{msg.content}</div>
<div key={msg.id} className="text-sm text-xibe-error bg-xibe-error/10 border border-xibe-error/20 rounded-xl px-4 py-3">{msg.content}</div>
) : (
<MessageBubble key={msg.id} role={msg.role as 'user' | 'assistant'} content={msg.content} isStreaming={msg.isStreaming} timestamp={msg.timestamp} />
),
Expand All @@ -122,7 +122,7 @@ export default function ChatPanel({
</div>

{needsSetup ? (
<button onClick={onOpenSetup} className="rounded-full bg-xibe-accent px-8 py-2.5 text-sm font-medium text-xibe-bg hover:bg-xibe-accent-hover transition-colors shadow-sm">
<button onClick={onOpenSetup} className="rounded-full bg-xibe-accent px-8 py-2.5 text-sm font-medium text-xibe-bg hover:bg-xibe-accent-hover transition-colors">
Complete Setup
</button>
) : (
Expand Down Expand Up @@ -192,7 +192,7 @@ export default function ChatPanel({
<div className={`relative ${CHAT_WIDTH}`}>
{/* Command dropdown above input */}
{isSlashMode && filteredCmds.length > 0 && (
<div className="absolute bottom-full mb-2 w-full rounded-xl border border-xibe-border-subtle bg-xibe-surface/95 backdrop-blur-md shadow-lg overflow-hidden animate-slide-up z-20">
<div className="absolute bottom-full mb-2 w-full rounded-xl border border-xibe-border-subtle bg-xibe-surface/95 backdrop-blur-md overflow-hidden animate-slide-up z-20">
{filteredCmds.slice(0, 6).map((cmd, i) => (
<button key={cmd.name} onClick={() => { setInput(cmd.name + ' '); inputRef.current?.focus(); }} className={`flex w-full items-center justify-between px-4 py-2.5 text-left text-sm transition-colors ${i === selectedCmd ? 'bg-xibe-surface-hover text-xibe-text' : 'text-xibe-text-secondary hover:bg-xibe-surface-hover/50'}`}>
<span className="font-mono font-medium text-xibe-text">{cmd.name}</span>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ export default function CommandPalette({ onClose, onCommand }: Props) {

return (
<div className="fixed inset-0 z-50 flex items-start justify-center pt-[20vh] bg-black/40 backdrop-blur-md" onClick={(e) => { if (e.target === e.currentTarget) onClose(); }}>
<div className="w-full max-w-lg rounded-xl border border-xibe-border bg-xibe-surface shadow-lg overflow-hidden animate-slide-up">
<div className="w-full max-w-lg rounded-xl border border-xibe-border bg-xibe-surface overflow-hidden animate-slide-up">
<div className="flex items-center gap-2 border-b border-xibe-border-subtle px-4 py-3">
<svg className="h-4 w-4 text-xibe-accent shrink-0" fill="none" stroke="currentColor" strokeWidth={2} viewBox="0 0 24 24"><path strokeLinecap="round" strokeLinejoin="round" d="M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5" /></svg>
<input
Expand Down
10 changes: 5 additions & 5 deletions packages/desktop/src/renderer/components/MessageBubble.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ const MessageBubble = memo(function MessageBubble({ role, content, isStreaming }
if (isUser) {
return (
<div className="flex justify-end animate-fade-in w-full group">
<div className="max-w-[85%] sm:max-w-[75%] rounded-2xl bg-xibe-surface px-4 py-3 text-[15px] leading-relaxed text-xibe-text whitespace-pre-wrap">
<div className="max-w-[85%] sm:max-w-[75%] rounded-2xl bg-[#27272a] px-4 py-3 text-[15px] leading-relaxed text-xibe-text whitespace-pre-wrap">
{content}
</div>
</div>
Expand All @@ -27,21 +27,21 @@ const MessageBubble = memo(function MessageBubble({ role, content, isStreaming }
<div className="prose prose-invert max-w-none text-[15px] leading-relaxed text-xibe-text
prose-p:my-3 prose-headings:my-4 prose-ul:my-3 prose-ol:my-3 prose-li:my-1
prose-pre:my-4 prose-pre:bg-transparent prose-pre:p-0
prose-blockquote:my-4 prose-blockquote:border-l-2 prose-blockquote:border-xibe-surface-hover prose-blockquote:pl-4 prose-blockquote:text-xibe-text-dim
prose-blockquote:my-4 prose-blockquote:border-l-2 prose-blockquote:border-xibe-border prose-blockquote:pl-4 prose-blockquote:text-xibe-text-dim
prose-a:text-xibe-text-secondary hover:prose-a:text-xibe-text prose-a:underline prose-a:underline-offset-2
prose-strong:text-xibe-text prose-strong:font-semibold
prose-code:text-xibe-text-secondary prose-code:bg-xibe-surface prose-code:px-1.5 prose-code:py-0.5 prose-code:rounded-md prose-code:font-medium prose-code:before:content-none prose-code:after:content-none
prose-code:text-xibe-text-secondary prose-code:bg-xibe-surface-raised prose-code:px-1.5 prose-code:py-0.5 prose-code:rounded-md prose-code:font-medium prose-code:before:content-none prose-code:after:content-none
prose-h1:text-xl prose-h2:text-lg prose-h3:text-base prose-h1:font-semibold prose-h2:font-semibold prose-h3:font-semibold">
<ReactMarkdown
remarkPlugins={[remarkGfm]}
components={{
pre: ({ children }) => (
<pre className="overflow-x-auto rounded-xl bg-xibe-surface p-4 text-[13px] font-mono leading-relaxed my-4">{children}</pre>
<pre className="overflow-x-auto rounded-xl bg-xibe-surface-raised p-4 text-[13px] font-mono leading-relaxed my-4">{children}</pre>
),
code: ({ className, children }) => {
const isInline = !className;
return isInline ? (
<code className="rounded-md bg-xibe-surface px-1.5 py-0.5 text-[13px] font-mono text-xibe-text-secondary">{children}</code>
<code className="rounded-md bg-xibe-surface-raised px-1.5 py-0.5 text-[13px] font-mono text-xibe-text-secondary">{children}</code>
) : (
<code className={`${className ?? ''} text-[13px] font-mono`}>{children}</code>
);
Expand Down
2 changes: 1 addition & 1 deletion packages/desktop/src/renderer/components/SettingsPanel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ export default function SettingsPanel({ onClose, onModelChange, onProviderChange

return (
<div className="fixed inset-0 z-50 flex items-center justify-center bg-black/40 backdrop-blur-md">
<div className="w-full max-w-2xl h-[70vh] rounded-xl border border-xibe-border bg-xibe-surface shadow-lg flex flex-col animate-slide-up overflow-hidden">
<div className="w-full max-w-2xl h-[70vh] rounded-xl border border-xibe-border bg-xibe-surface flex flex-col animate-slide-up overflow-hidden">
<div className="flex items-center justify-between border-b border-xibe-border-subtle px-5 py-3">
<h2 className="text-sm font-semibold text-xibe-text">Settings</h2>
<button onClick={onClose} className="rounded-md p-1 text-xibe-text-dim hover:text-xibe-text hover:bg-xibe-surface-hover transition-colors">
Expand Down
2 changes: 1 addition & 1 deletion packages/desktop/src/renderer/components/SetupWizard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ export default function SetupWizard({ onComplete, onClose }: Props) {

return (
<div className="fixed inset-0 z-50 flex items-center justify-center bg-black/40 backdrop-blur-md">
<div className="w-full max-w-md rounded-xl border border-xibe-border bg-xibe-surface shadow-lg animate-slide-up">
<div className="w-full max-w-md rounded-xl border border-xibe-border bg-xibe-surface animate-slide-up">
<div className="px-6 pt-6 pb-4">
<div className="flex items-center justify-between mb-4">
<div>
Expand Down
4 changes: 2 additions & 2 deletions packages/desktop/src/renderer/components/ToolCallCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ const ToolCallCard = memo(function ToolCallCard({ toolName, toolInput, toolOutpu
<span className="text-[10px] font-bold uppercase tracking-widest text-xibe-text-dim">Input</span>
<div className="h-px flex-1 bg-xibe-border-subtle/50" />
</div>
<pre className="overflow-x-auto rounded-lg bg-xibe-bg border border-xibe-border-subtle p-3 text-[12px] font-mono text-xibe-text leading-relaxed shadow-inner">{inputStr}</pre>
<pre className="overflow-x-auto rounded-lg bg-xibe-bg border border-xibe-border-subtle p-3 text-[12px] font-mono text-xibe-text leading-relaxed">{inputStr}</pre>
</div>
)}
{outputStr && (
Expand All @@ -60,7 +60,7 @@ const ToolCallCard = memo(function ToolCallCard({ toolName, toolInput, toolOutpu
<span className="text-[10px] font-bold uppercase tracking-widest text-xibe-text-dim">Output</span>
<div className="h-px flex-1 bg-xibe-border-subtle/50" />
</div>
<pre className="overflow-x-auto rounded-lg bg-xibe-bg border border-xibe-border-subtle p-3 text-[12px] font-mono text-xibe-text-secondary leading-relaxed max-h-64 shadow-inner">{outputStr.length > 5000 ? outputStr.slice(0, 5000) + '\n\n...[Output truncated]...' : outputStr}</pre>
<pre className="overflow-x-auto rounded-lg bg-xibe-bg border border-xibe-border-subtle p-3 text-[12px] font-mono text-xibe-text-secondary leading-relaxed max-h-64">{outputStr.length > 5000 ? outputStr.slice(0, 5000) + '\n\n...[Output truncated]...' : outputStr}</pre>
</div>
)}
</div>
Expand Down
14 changes: 7 additions & 7 deletions packages/desktop/src/renderer/styles/global.css
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
@import "tailwindcss";

@theme {
--color-xibe-bg: #0A0A0A;
--color-xibe-surface: #171717;
--color-xibe-surface-raised: #262626;
--color-xibe-bg: #09090b;
--color-xibe-surface: #18181b;
--color-xibe-surface-raised: #27272a;
--color-xibe-surface-hover: #27272a;
--color-xibe-border: #262626;
--color-xibe-border: #27272a;
--color-xibe-border-subtle: #18181b;
--color-xibe-border-focus: #3f3f46;
--color-xibe-muted: #71717a;
--color-xibe-text: #fafafa;
--color-xibe-text-secondary: #a1a1aa;
--color-xibe-text-dim: #71717a;
--color-xibe-accent: #fafafa;
--color-xibe-accent-hover: #e4e4e7;
--color-xibe-accent-muted: rgba(244, 244, 245, 0.15);
--color-xibe-accent: #e4e4e7;
--color-xibe-accent-hover: #ffffff;
--color-xibe-accent-muted: rgba(244, 244, 245, 0.1);
--color-xibe-brand-blue: #60A5FA;
--color-xibe-brand-green: #34D399;
--color-xibe-brand-orange: #FBBF24;
Expand Down
Binary file added screenshot.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
25 changes: 25 additions & 0 deletions screenshot.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
browser = p.chromium.launch()
# open a chat with user and assistant message and tool calls
Comment on lines +1 to +5

# for simplicity, let's just use the current page
page = browser.new_page()
page.goto("http://localhost:5173/")
page.wait_for_timeout(2000)

# Click on the textarea, type some text, and send it
page.fill('textarea', 'Hello')
page.press('textarea', 'Enter')
page.wait_for_timeout(2000)

page.screenshot(path="/home/jules/verification/screenshots/screenshot_chat.png")

# Also open the settings to see it
page.goto("http://localhost:5173/")
page.wait_for_timeout(2000)
page.click('text=Settings')
page.wait_for_timeout(2000)
page.screenshot(path="/home/jules/verification/screenshots/screenshot_settings.png")
browser.close()
Comment on lines +5 to +25
Loading