workspaces to dashboards, imap email sync, ffmpeg tool, tts fix, file browser refresh, automation sidebar reorder

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-02 20:00:45 +00:00
co-authored by Claude Opus 4.6
parent bd362dc586
commit 927267e041
98 changed files with 1176 additions and 802 deletions
@@ -9,10 +9,10 @@ export const BugReportButton = () => {
<>
<button
onClick={bugReport.handleOpen}
className="fixed bottom-20 right-4 z-[90] flex h-10 w-10 items-center justify-center rounded-full bg-destructive text-destructive-foreground shadow-lg transition-transform hover:scale-110"
className="flex h-8 w-8 items-center justify-center rounded-full bg-destructive text-destructive-foreground transition-transform hover:scale-110"
aria-label="Report a bug"
>
<Bug size={20} />
<Bug size={16} />
</button>
<BugReportDialog
open={bugReport.open}
@@ -3,7 +3,6 @@ import { Background } from './Background';
import { Header } from './Header';
import { Dock, ALL_DOCK_ITEMS, DEFAULT_DOCK_PATHS } from './Dock';
import { useIsTouch } from './useIsTouch';
import { BugReportButton } from './BugReport/BugReportButton';
type DashboardLayoutProps = {
children?: React.ReactNode;
@@ -22,7 +21,6 @@ export function DashboardLayout({ children }: DashboardLayoutProps) {
{children}
</div>
</section>
<BugReportButton />
</div>
);
};
@@ -124,7 +124,7 @@ export const ALL_DOCK_ITEMS: DockItem[] = [
{ label: 'Terminal', to: '/terminal', icon: Monitor, color: '#f97316' },
{ label: 'Projects', to: '/projects', icon: FolderKanban, color: '#10b981' },
{ label: 'Browser', to: '/browser', icon: Globe, color: '#06b6d4' },
{ label: 'Workspaces', to: '/workspaces', icon: LayoutGrid, color: '#8b5cf6' },
{ label: 'Dashboards', to: '/dashboards', icon: LayoutGrid, color: '#8b5cf6' },
];
export const DEFAULT_DOCK_PATHS = ['/', '/files', '/automation', '/projects', '/workspaces', '/chat'];
export const DEFAULT_DOCK_PATHS = ['/', '/files', '/automation', '/projects', '/dashboards', '/chat'];
@@ -1,10 +1,11 @@
import { useState } from 'react';
import { Link, useLocation } from 'react-router';
import { Menu } from 'lucide-react';
import { Menu, Terminal } from 'lucide-react';
import { Sheet, SheetContent, SheetHeader, SheetTitle } from '@/components/ui/sheet';
import type { DockItem } from '../Dock';
import { useIsTouch } from '../useIsTouch';
import { UserMenu } from './UserMenu';
import { BugReportButton } from '../BugReport/BugReportButton';
type HeaderProps = {
dockItems?: DockItem[];
@@ -38,7 +39,17 @@ export function Header({ dockItems }: HeaderProps) {
/>
</Link>
</div>
<UserMenu />
<div className="flex items-center gap-2">
<button
onClick={() => (window as any).eruda?.show()}
className="flex h-8 w-8 items-center justify-center rounded-full bg-black/20 text-duck-dark transition-transform hover:scale-110"
aria-label="Dev console"
>
<Terminal size={16} />
</button>
<BugReportButton />
<UserMenu />
</div>
</div>
{isTouch && dockItems && (