@builderos/create-agent-os 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -0
- package/bin/cli.js +133 -0
- package/package.json +40 -0
- package/src/template/App.tsx +68 -0
- package/src/template/agent-os/commands/create-tasks/1-get-spec-requirements.md +19 -0
- package/src/template/agent-os/commands/create-tasks/2-create-tasks-list.md +234 -0
- package/src/template/agent-os/commands/create-tasks/create-tasks.md +254 -0
- package/src/template/agent-os/commands/design-screen/design-screen.md +32 -0
- package/src/template/agent-os/commands/design-shell/design-shell.md +34 -0
- package/src/template/agent-os/commands/design-tokens/design-tokens.md +36 -0
- package/src/template/agent-os/commands/export-product/export-product.md +44 -0
- package/src/template/agent-os/commands/implement-tasks/1-determine-tasks.md +13 -0
- package/src/template/agent-os/commands/implement-tasks/2-implement-tasks.md +63 -0
- package/src/template/agent-os/commands/implement-tasks/3-verify-implementation.md +113 -0
- package/src/template/agent-os/commands/implement-tasks/implement-tasks.md +207 -0
- package/src/template/agent-os/commands/initialize-design/initialize-design.md +54 -0
- package/src/template/agent-os/commands/orchestrate-tasks/orchestrate-tasks.md +180 -0
- package/src/template/agent-os/commands/plan-product/1-product-concept.md +53 -0
- package/src/template/agent-os/commands/plan-product/2-create-mission.md +78 -0
- package/src/template/agent-os/commands/plan-product/3-create-roadmap.md +73 -0
- package/src/template/agent-os/commands/plan-product/4-create-tech-stack.md +46 -0
- package/src/template/agent-os/commands/plan-product/plan-product.md +241 -0
- package/src/template/agent-os/commands/sample-data/sample-data.md +51 -0
- package/src/template/agent-os/commands/scaffold-implementation/scaffold-implementation.md +36 -0
- package/src/template/agent-os/commands/screenshot-design/screenshot-design.md +21 -0
- package/src/template/agent-os/commands/shape-spec/1-initialize-spec.md +95 -0
- package/src/template/agent-os/commands/shape-spec/2-shape-spec.md +300 -0
- package/src/template/agent-os/commands/shape-spec/shape-spec.md +40 -0
- package/src/template/agent-os/commands/write-spec/write-spec.md +134 -0
- package/src/template/agent-os/config.yml +13 -0
- package/src/template/agent-os/product/mission.md +29 -0
- package/src/template/agent-os/product/roadmap.md +9 -0
- package/src/template/agent-os/product/tech-stack.md +14 -0
- package/src/template/agent-os/specs/README.md +1 -0
- package/src/template/agent-os/standards/backend/api.md +10 -0
- package/src/template/agent-os/standards/backend/migrations.md +9 -0
- package/src/template/agent-os/standards/backend/models.md +10 -0
- package/src/template/agent-os/standards/backend/queries.md +9 -0
- package/src/template/agent-os/standards/frontend/accessibility.md +10 -0
- package/src/template/agent-os/standards/frontend/components.md +11 -0
- package/src/template/agent-os/standards/frontend/css.md +7 -0
- package/src/template/agent-os/standards/frontend/responsive.md +11 -0
- package/src/template/agent-os/standards/global/coding-style.md +10 -0
- package/src/template/agent-os/standards/global/commenting.md +5 -0
- package/src/template/agent-os/standards/global/conventions.md +11 -0
- package/src/template/agent-os/standards/global/error-handling.md +9 -0
- package/src/template/agent-os/standards/global/tech-stack.md +31 -0
- package/src/template/agent-os/standards/global/validation.md +11 -0
- package/src/template/agent-os/standards/testing/test-writing.md +9 -0
- package/src/template/agent-os-ui/README.md +73 -0
- package/src/template/agent-os-ui/package-lock.json +5028 -0
- package/src/template/agent-os-ui/package.json +52 -0
- package/src/template/agent-os-ui/postcss.config.js +6 -0
- package/src/template/agent-os-ui/src/components/AgentShell.tsx +31 -0
- package/src/template/agent-os-ui/src/components/AgentSidebar.tsx +65 -0
- package/src/template/agent-os-ui/src/components/GuidanceCard.tsx +75 -0
- package/src/template/agent-os-ui/src/components/MarkdownViewer.tsx +25 -0
- package/src/template/agent-os-ui/src/components/PromptButton.tsx +28 -0
- package/src/template/agent-os-ui/src/components/StatusItem.tsx +45 -0
- package/src/template/agent-os-ui/src/components/ThemeToggle.tsx +72 -0
- package/src/template/agent-os-ui/src/index.ts +11 -0
- package/src/template/agent-os-ui/src/style.css +3 -0
- package/src/template/agent-os-ui/tailwind.config.js +50 -0
- package/src/template/agent-os-ui/tsconfig.json +33 -0
- package/src/template/agent-os-ui/vite.config.ts +32 -0
- package/src/template/control-center/backend/backend.log +2 -0
- package/src/template/control-center/backend/index.js +228 -0
- package/src/template/control-center/backend/package-lock.json +951 -0
- package/src/template/control-center/backend/package.json +19 -0
- package/src/template/control-center/frontend/README.md +73 -0
- package/src/template/control-center/frontend/eslint.config.js +23 -0
- package/src/template/control-center/frontend/index.html +21 -0
- package/src/template/control-center/frontend/package-lock.json +5752 -0
- package/src/template/control-center/frontend/package.json +42 -0
- package/src/template/control-center/frontend/public/runtime-config.json +11 -0
- package/src/template/control-center/frontend/public/vite.svg +1 -0
- package/src/template/control-center/frontend/src/App.css +42 -0
- package/src/template/control-center/frontend/src/App.tsx +738 -0
- package/src/template/control-center/frontend/src/assets/react.svg +1 -0
- package/src/template/control-center/frontend/src/components/ThemeToggle.tsx +64 -0
- package/src/template/control-center/frontend/src/components/ui/ToastContext.tsx +81 -0
- package/src/template/control-center/frontend/src/index.css +194 -0
- package/src/template/control-center/frontend/src/main.tsx +14 -0
- package/src/template/control-center/frontend/src/vite-env.d.ts +1 -0
- package/src/template/control-center/frontend/tsconfig.app.json +28 -0
- package/src/template/control-center/frontend/tsconfig.json +7 -0
- package/src/template/control-center/frontend/tsconfig.node.json +26 -0
- package/src/template/control-center/frontend/vite.config.ts +22 -0
- package/src/template/design/.claude/commands/design-os/data-model.md +122 -0
- package/src/template/design/.claude/commands/design-os/design-screen.md +309 -0
- package/src/template/design/.claude/commands/design-os/design-shell.md +238 -0
- package/src/template/design/.claude/commands/design-os/design-tokens.md +166 -0
- package/src/template/design/.claude/commands/design-os/export-product.md +1105 -0
- package/src/template/design/.claude/commands/design-os/product-roadmap.md +121 -0
- package/src/template/design/.claude/commands/design-os/product-vision.md +99 -0
- package/src/template/design/.claude/commands/design-os/sample-data.md +263 -0
- package/src/template/design/.claude/commands/design-os/screenshot-design.md +112 -0
- package/src/template/design/.claude/commands/design-os/shape-section.md +138 -0
- package/src/template/design/.claude/skills/frontend-design/SKILL.md +42 -0
- package/src/template/design/.github/CODE_OF_CONDUCT.md +5 -0
- package/src/template/design/.github/CONTRIBUTING.md +51 -0
- package/src/template/design/.github/ISSUE_TEMPLATE/config.yml +22 -0
- package/src/template/design/.github/PULL_REQUEST_TEMPLATE.md +20 -0
- package/src/template/design/.github/SECURITY.yml +5 -0
- package/src/template/design/.github/SUPPORT.md +19 -0
- package/src/template/design/.github/workflows/pr-decline.yml +135 -0
- package/src/template/design/.github/workflows/stale.yml +25 -0
- package/src/template/design/CHANGELOG.md +13 -0
- package/src/template/design/LICENSE +21 -0
- package/src/template/design/README.md +54 -0
- package/src/template/design/agents.md +218 -0
- package/src/template/design/claude.md +1 -0
- package/src/template/design/components.json +22 -0
- package/src/template/design/docs/codebase-implementation.md +153 -0
- package/src/template/design/docs/design-section.md +135 -0
- package/src/template/design/docs/export.md +149 -0
- package/src/template/design/docs/getting-started.md +59 -0
- package/src/template/design/docs/index.md +56 -0
- package/src/template/design/docs/product-planning.md +113 -0
- package/src/template/design/docs/requirements.md +22 -0
- package/src/template/design/docs/usage.md +62 -0
- package/src/template/design/eslint.config.js +23 -0
- package/src/template/design/index.html +21 -0
- package/src/template/design/package-lock.json +5473 -0
- package/src/template/design/package.json +47 -0
- package/src/template/design/product-plan.zip +0 -0
- package/src/template/design/public/vite.svg +1 -0
- package/src/template/design/src/assets/react.svg +1 -0
- package/src/template/design/src/components/AppLayout.tsx +95 -0
- package/src/template/design/src/components/DataCard.tsx +139 -0
- package/src/template/design/src/components/DataModelPage.tsx +120 -0
- package/src/template/design/src/components/DesignPage.tsx +284 -0
- package/src/template/design/src/components/EmptyState.tsx +155 -0
- package/src/template/design/src/components/ExportPage.tsx +344 -0
- package/src/template/design/src/components/NextPhaseButton.tsx +33 -0
- package/src/template/design/src/components/PhaseNav.tsx +152 -0
- package/src/template/design/src/components/PhaseWarningBanner.tsx +81 -0
- package/src/template/design/src/components/ProductOverviewCard.tsx +102 -0
- package/src/template/design/src/components/ProductPage.tsx +97 -0
- package/src/template/design/src/components/ScreenDesignPage.tsx +370 -0
- package/src/template/design/src/components/ScreenDesignsCard.tsx +49 -0
- package/src/template/design/src/components/SectionPage.tsx +256 -0
- package/src/template/design/src/components/SectionsCard.tsx +47 -0
- package/src/template/design/src/components/SectionsPage.tsx +181 -0
- package/src/template/design/src/components/ShellCard.tsx +85 -0
- package/src/template/design/src/components/ShellDesignPage.tsx +242 -0
- package/src/template/design/src/components/SpecCard.tsx +121 -0
- package/src/template/design/src/components/StepIndicator.tsx +75 -0
- package/src/template/design/src/components/ThemeToggle.tsx +86 -0
- package/src/template/design/src/components/ui/ToastContext.tsx +81 -0
- package/src/template/design/src/components/ui/avatar.tsx +53 -0
- package/src/template/design/src/components/ui/badge.tsx +46 -0
- package/src/template/design/src/components/ui/button.tsx +60 -0
- package/src/template/design/src/components/ui/card.tsx +92 -0
- package/src/template/design/src/components/ui/collapsible.tsx +48 -0
- package/src/template/design/src/components/ui/dialog.tsx +143 -0
- package/src/template/design/src/components/ui/dropdown-menu.tsx +255 -0
- package/src/template/design/src/components/ui/input.tsx +21 -0
- package/src/template/design/src/components/ui/label.tsx +22 -0
- package/src/template/design/src/components/ui/progress.tsx +24 -0
- package/src/template/design/src/components/ui/scroll-area.tsx +18 -0
- package/src/template/design/src/components/ui/select.tsx +67 -0
- package/src/template/design/src/components/ui/separator.tsx +28 -0
- package/src/template/design/src/components/ui/sheet.tsx +137 -0
- package/src/template/design/src/components/ui/skeleton.tsx +13 -0
- package/src/template/design/src/components/ui/switch.tsx +46 -0
- package/src/template/design/src/components/ui/table.tsx +116 -0
- package/src/template/design/src/components/ui/tabs.tsx +64 -0
- package/src/template/design/src/index.css +284 -0
- package/src/template/design/src/lib/data-model-loader.ts +91 -0
- package/src/template/design/src/lib/design-system-loader.ts +101 -0
- package/src/template/design/src/lib/product-loader.ts +221 -0
- package/src/template/design/src/lib/router.tsx +52 -0
- package/src/template/design/src/lib/section-loader.ts +272 -0
- package/src/template/design/src/lib/shell-loader.ts +175 -0
- package/src/template/design/src/lib/utils.ts +6 -0
- package/src/template/design/src/main.tsx +15 -0
- package/src/template/design/src/sections/.gitkeep +0 -0
- package/src/template/design/src/sections/ai-orchestration-engine-oai/OrchestrationEngine.tsx +348 -0
- package/src/template/design/src/sections/core-platform-shell/AppShell.tsx +403 -0
- package/src/template/design/src/sections/gemini-live-integration/GeminiIntegration.tsx +332 -0
- package/src/template/design/src/sections/interactive-2d-canvas/WhiteboardCanvas.tsx +334 -0
- package/src/template/design/src/sections/participation-equity-tracker/EquityTracker.tsx +383 -0
- package/src/template/design/src/sections/persistent-memory-system/PersistentMemory.tsx +308 -0
- package/src/template/design/src/sections/real-time-communication-layer/VideoSession.tsx +342 -0
- package/src/template/design/src/sections/visual-intelligence-agents/VisualAgents.tsx +311 -0
- package/src/template/design/src/types/product.ts +97 -0
- package/src/template/design/src/types/section.ts +33 -0
- package/src/template/design/tsconfig.app.json +34 -0
- package/src/template/design/tsconfig.json +13 -0
- package/src/template/design/tsconfig.node.json +26 -0
- package/src/template/design/vite.config.ts +18 -0
- package/src/template/package.json +27 -0
- package/src/template/vite.config.ts +16 -0
|
@@ -0,0 +1,403 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import {
|
|
3
|
+
Menu,
|
|
4
|
+
Bell,
|
|
5
|
+
Search,
|
|
6
|
+
LayoutDashboard,
|
|
7
|
+
Activity,
|
|
8
|
+
PieChart,
|
|
9
|
+
BookOpen,
|
|
10
|
+
Settings,
|
|
11
|
+
LogOut,
|
|
12
|
+
ChevronLeft,
|
|
13
|
+
ChevronRight,
|
|
14
|
+
Moon,
|
|
15
|
+
Sun,
|
|
16
|
+
MoreVertical,
|
|
17
|
+
Plus
|
|
18
|
+
} from 'lucide-react';
|
|
19
|
+
import {
|
|
20
|
+
DropdownMenu,
|
|
21
|
+
DropdownMenuContent,
|
|
22
|
+
DropdownMenuItem,
|
|
23
|
+
DropdownMenuLabel,
|
|
24
|
+
DropdownMenuSeparator,
|
|
25
|
+
DropdownMenuTrigger
|
|
26
|
+
} from '@/components/ui/dropdown-menu';
|
|
27
|
+
import { Button } from '@/components/ui/button';
|
|
28
|
+
import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar';
|
|
29
|
+
import { Badge } from '@/components/ui/badge';
|
|
30
|
+
import { ScrollArea } from '@/components/ui/scroll-area';
|
|
31
|
+
import { Card, CardHeader, CardTitle, CardDescription, CardContent } from '@/components/ui/card';
|
|
32
|
+
|
|
33
|
+
// Mock Data Types matching data.json
|
|
34
|
+
interface User {
|
|
35
|
+
id: string;
|
|
36
|
+
name: string;
|
|
37
|
+
email: string;
|
|
38
|
+
avatarUrl: string;
|
|
39
|
+
role: string;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
interface Workspace {
|
|
43
|
+
id: string;
|
|
44
|
+
name: string;
|
|
45
|
+
plan: string;
|
|
46
|
+
memberCount: number;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
interface Notification {
|
|
50
|
+
id: string;
|
|
51
|
+
type: 'invitation' | 'system' | 'mention';
|
|
52
|
+
message: string;
|
|
53
|
+
isRead: boolean;
|
|
54
|
+
timestamp: string;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Mock Data
|
|
58
|
+
const MOCK_DATA: { user: User; workspace: Workspace; notifications: Notification[] } = {
|
|
59
|
+
"user": {
|
|
60
|
+
"id": "usr_123456789",
|
|
61
|
+
"name": "Sarah Chen",
|
|
62
|
+
"email": "sarah.chen@acme-corp.com",
|
|
63
|
+
"avatarUrl": "https://api.dicebear.com/7.x/avataaars/svg?seed=Sarah",
|
|
64
|
+
"role": "Facilitator"
|
|
65
|
+
},
|
|
66
|
+
"workspace": {
|
|
67
|
+
"id": "ws_987654321",
|
|
68
|
+
"name": "Acme Innovation Lab",
|
|
69
|
+
"plan": "Enterprise",
|
|
70
|
+
"memberCount": 42
|
|
71
|
+
},
|
|
72
|
+
"notifications": [
|
|
73
|
+
{
|
|
74
|
+
"id": "notif_1",
|
|
75
|
+
"type": "invitation",
|
|
76
|
+
"message": "Product Strategy Sync starting in 5 mins",
|
|
77
|
+
"isRead": false,
|
|
78
|
+
"timestamp": "2023-11-15T09:55:00Z"
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"id": "notif_2",
|
|
82
|
+
"type": "system",
|
|
83
|
+
"message": "Orchestration templates updated",
|
|
84
|
+
"isRead": true,
|
|
85
|
+
"timestamp": "2023-11-14T14:30:00Z"
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"id": "notif_3",
|
|
89
|
+
"type": "mention",
|
|
90
|
+
"message": "Alex mentioned you in 'Q4 Roadmap'",
|
|
91
|
+
"isRead": true,
|
|
92
|
+
"timestamp": "2023-11-13T11:20:00Z"
|
|
93
|
+
}
|
|
94
|
+
]
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
const NavItem = ({ icon: Icon, label, isActive, isCollapsed }: { icon: any, label: string, isActive?: boolean, isCollapsed?: boolean }) => (
|
|
98
|
+
<button
|
|
99
|
+
className={`w-full flex items-center gap-3 px-3 py-2 rounded-md transition-colors ${isActive
|
|
100
|
+
? 'bg-indigo-50 text-indigo-700 dark:bg-indigo-900/20 dark:text-indigo-300'
|
|
101
|
+
: 'text-stone-600 dark:text-stone-400 hover:bg-stone-100 dark:hover:bg-stone-800'
|
|
102
|
+
}`}
|
|
103
|
+
title={isCollapsed ? label : undefined}
|
|
104
|
+
>
|
|
105
|
+
<Icon className="w-5 h-5 shrink-0" strokeWidth={isActive ? 2 : 1.5} />
|
|
106
|
+
{!isCollapsed && <span className="text-sm font-medium truncate">{label}</span>}
|
|
107
|
+
</button>
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
export default function AppShell() {
|
|
111
|
+
const [isCollapsed, setIsCollapsed] = useState(false);
|
|
112
|
+
const [activeTab, setActiveTab] = useState('dashboard');
|
|
113
|
+
const [isDarkMode, setIsDarkMode] = useState(false); // Simulated theme toggle
|
|
114
|
+
|
|
115
|
+
return (
|
|
116
|
+
<div className={`flex h-screen w-full bg-stone-50 dark:bg-stone-950 text-stone-900 dark:text-stone-100 font-sans transition-colors duration-300 ${isDarkMode ? 'dark' : ''}`}>
|
|
117
|
+
|
|
118
|
+
{/* Sidebar */}
|
|
119
|
+
<aside
|
|
120
|
+
className={`${isCollapsed ? 'w-20' : 'w-72'} bg-white dark:bg-stone-900 border-r border-stone-200 dark:border-stone-800 flex flex-col transition-all duration-300 shadow-sm relative z-20`}
|
|
121
|
+
>
|
|
122
|
+
{/* Workspace Header */}
|
|
123
|
+
<div className="h-16 flex items-center px-4 border-b border-stone-200 dark:border-stone-800 shrink-0">
|
|
124
|
+
<div className="flex items-center gap-3 overflow-hidden">
|
|
125
|
+
<div className="w-10 h-10 rounded-lg bg-gradient-to-br from-indigo-500 to-purple-600 flex items-center justify-center text-white font-bold shrink-0">
|
|
126
|
+
{MOCK_DATA.workspace.name.substring(0, 2).toUpperCase()}
|
|
127
|
+
</div>
|
|
128
|
+
{!isCollapsed && (
|
|
129
|
+
<div className="min-w-0">
|
|
130
|
+
<h3 className="font-semibold text-sm truncate">{MOCK_DATA.workspace.name}</h3>
|
|
131
|
+
<p className="text-xs text-stone-500 truncate">{MOCK_DATA.workspace.plan} Plan • {MOCK_DATA.workspace.memberCount} Members</p>
|
|
132
|
+
</div>
|
|
133
|
+
)}
|
|
134
|
+
</div>
|
|
135
|
+
</div>
|
|
136
|
+
|
|
137
|
+
{/* Navigation */}
|
|
138
|
+
<ScrollArea className="flex-1 py-4 px-3">
|
|
139
|
+
<div className="space-y-1">
|
|
140
|
+
<div onClick={() => setActiveTab('dashboard')}>
|
|
141
|
+
<NavItem icon={LayoutDashboard} label="Dashboard" isActive={activeTab === 'dashboard'} isCollapsed={isCollapsed} />
|
|
142
|
+
</div>
|
|
143
|
+
<div onClick={() => setActiveTab('orchestration')}>
|
|
144
|
+
<NavItem icon={Activity} label="Live Orchestration" isActive={activeTab === 'orchestration'} isCollapsed={isCollapsed} />
|
|
145
|
+
</div>
|
|
146
|
+
<div onClick={() => setActiveTab('analytics')}>
|
|
147
|
+
<NavItem icon={PieChart} label="Analytics" isActive={activeTab === 'analytics'} isCollapsed={isCollapsed} />
|
|
148
|
+
</div>
|
|
149
|
+
<div onClick={() => setActiveTab('memory')}>
|
|
150
|
+
<NavItem icon={BookOpen} label="Wisdom Network" isActive={activeTab === 'memory'} isCollapsed={isCollapsed} />
|
|
151
|
+
</div>
|
|
152
|
+
</div>
|
|
153
|
+
|
|
154
|
+
<div className="my-6 border-t border-stone-100 dark:border-stone-800" />
|
|
155
|
+
|
|
156
|
+
<div className="space-y-1">
|
|
157
|
+
{!isCollapsed && <p className="px-3 text-xs font-semibold text-stone-400 uppercase tracking-wider mb-2">System</p>}
|
|
158
|
+
<div onClick={() => setActiveTab('settings')}>
|
|
159
|
+
<NavItem icon={Settings} label="Settings" isActive={activeTab === 'settings'} isCollapsed={isCollapsed} />
|
|
160
|
+
</div>
|
|
161
|
+
</div>
|
|
162
|
+
</ScrollArea>
|
|
163
|
+
|
|
164
|
+
{/* User Footer */}
|
|
165
|
+
<div className="p-3 border-t border-stone-200 dark:border-stone-800">
|
|
166
|
+
<DropdownMenu>
|
|
167
|
+
<DropdownMenuTrigger asChild>
|
|
168
|
+
<button className={`w-full flex items-center gap-3 p-2 rounded-md hover:bg-stone-100 dark:hover:bg-stone-800 transition-colors ${isCollapsed ? 'justify-center' : ''}`}>
|
|
169
|
+
<Avatar className="h-9 w-9 border border-stone-200 dark:border-stone-700">
|
|
170
|
+
<AvatarImage src={MOCK_DATA.user.avatarUrl} alt={MOCK_DATA.user.name} />
|
|
171
|
+
<AvatarFallback>SC</AvatarFallback>
|
|
172
|
+
</Avatar>
|
|
173
|
+
{!isCollapsed && (
|
|
174
|
+
<>
|
|
175
|
+
<div className="text-left min-w-0 flex-1">
|
|
176
|
+
<p className="text-sm font-medium truncate">{MOCK_DATA.user.name}</p>
|
|
177
|
+
<p className="text-xs text-stone-500 truncate">{MOCK_DATA.user.role}</p>
|
|
178
|
+
</div>
|
|
179
|
+
<MoreVertical className="w-4 h-4 text-stone-400" />
|
|
180
|
+
</>
|
|
181
|
+
)}
|
|
182
|
+
</button>
|
|
183
|
+
</DropdownMenuTrigger>
|
|
184
|
+
<DropdownMenuContent className="w-56" align="end" forceMount>
|
|
185
|
+
<DropdownMenuLabel>My Account</DropdownMenuLabel>
|
|
186
|
+
<DropdownMenuSeparator />
|
|
187
|
+
<DropdownMenuItem>Profile</DropdownMenuItem>
|
|
188
|
+
<DropdownMenuItem>Billing</DropdownMenuItem>
|
|
189
|
+
<DropdownMenuItem>Team</DropdownMenuItem>
|
|
190
|
+
<DropdownMenuSeparator />
|
|
191
|
+
<DropdownMenuItem className="text-red-600 focus:text-red-700 focus:bg-red-50 dark:focus:bg-red-900/20">
|
|
192
|
+
<LogOut className="mr-2 h-4 w-4" /> Log out
|
|
193
|
+
</DropdownMenuItem>
|
|
194
|
+
</DropdownMenuContent>
|
|
195
|
+
</DropdownMenu>
|
|
196
|
+
</div>
|
|
197
|
+
|
|
198
|
+
{/* Collapse Toggle */}
|
|
199
|
+
<button
|
|
200
|
+
onClick={() => setIsCollapsed(!isCollapsed)}
|
|
201
|
+
className="absolute -right-3 top-20 bg-white dark:bg-stone-800 border border-stone-200 dark:border-stone-700 rounded-full p-1 shadow-sm text-stone-500 hover:text-stone-900 dark:hover:text-stone-100 transition-colors z-30"
|
|
202
|
+
>
|
|
203
|
+
{isCollapsed ? <ChevronRight className="w-3 h-3" /> : <ChevronLeft className="w-3 h-3" />}
|
|
204
|
+
</button>
|
|
205
|
+
</aside>
|
|
206
|
+
|
|
207
|
+
{/* Main Content Area */}
|
|
208
|
+
<main className="flex-1 flex flex-col min-w-0 bg-stone-50 dark:bg-stone-950 relative overflow-hidden">
|
|
209
|
+
|
|
210
|
+
{/* Top Header */}
|
|
211
|
+
<header className="h-16 bg-white/80 dark:bg-stone-900/80 backdrop-blur-sm border-b border-stone-200 dark:border-stone-800 flex items-center justify-between px-6 sticky top-0 z-10">
|
|
212
|
+
|
|
213
|
+
{/* Left: Breadcrumbs / Title */}
|
|
214
|
+
<div>
|
|
215
|
+
<h1 className="text-lg font-semibold capitalize text-stone-900 dark:text-stone-100">
|
|
216
|
+
{activeTab.replace('-', ' ')}
|
|
217
|
+
</h1>
|
|
218
|
+
</div>
|
|
219
|
+
|
|
220
|
+
{/* Right: Actions */}
|
|
221
|
+
<div className="flex items-center gap-2">
|
|
222
|
+
|
|
223
|
+
{/* Search */}
|
|
224
|
+
<div className="relative hidden md:block group">
|
|
225
|
+
<Search className="absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-stone-400 group-focus-within:text-indigo-500 transition-colors" />
|
|
226
|
+
<input
|
|
227
|
+
type="text"
|
|
228
|
+
placeholder="Search..."
|
|
229
|
+
className="pl-9 pr-4 py-2 w-64 bg-stone-100 dark:bg-stone-800 border-none rounded-full text-sm focus:ring-2 focus:ring-indigo-500/20 focus:bg-white dark:focus:bg-stone-900 transition-all outline-none"
|
|
230
|
+
/>
|
|
231
|
+
</div>
|
|
232
|
+
|
|
233
|
+
{/* Notifications */}
|
|
234
|
+
<DropdownMenu>
|
|
235
|
+
<DropdownMenuTrigger asChild>
|
|
236
|
+
<Button variant="ghost" size="icon" className="relative text-stone-500 hover:text-stone-900 dark:hover:text-stone-100">
|
|
237
|
+
<Bell className="w-5 h-5" />
|
|
238
|
+
<span className="absolute top-2 right-2 w-2 h-2 bg-red-500 rounded-full border-2 border-white dark:border-stone-900" />
|
|
239
|
+
</Button>
|
|
240
|
+
</DropdownMenuTrigger>
|
|
241
|
+
<DropdownMenuContent align="end" className="w-80 p-0">
|
|
242
|
+
<div className="flex items-center justify-between px-4 py-3 border-b border-stone-100 dark:border-stone-800">
|
|
243
|
+
<span className="font-semibold text-sm">Notifications</span>
|
|
244
|
+
<span className="text-xs text-indigo-600 font-medium cursor-pointer">Mark all read</span>
|
|
245
|
+
</div>
|
|
246
|
+
<div className="max-h-[300px] overflow-y-auto">
|
|
247
|
+
{MOCK_DATA.notifications.map(notif => (
|
|
248
|
+
<div key={notif.id} className={`px-4 py-3 border-b border-stone-100 dark:border-stone-800 hover:bg-stone-50 dark:hover:bg-stone-800/50 transition-colors ${!notif.isRead ? 'bg-indigo-50/30' : ''}`}>
|
|
249
|
+
<p className="text-sm text-stone-800 dark:text-stone-200">{notif.message}</p>
|
|
250
|
+
<p className="text-xs text-stone-400 mt-1">{new Date(notif.timestamp).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}</p>
|
|
251
|
+
</div>
|
|
252
|
+
))}
|
|
253
|
+
</div>
|
|
254
|
+
</DropdownMenuContent>
|
|
255
|
+
</DropdownMenu>
|
|
256
|
+
|
|
257
|
+
{/* Theme Toggle */}
|
|
258
|
+
<Button
|
|
259
|
+
variant="ghost"
|
|
260
|
+
size="icon"
|
|
261
|
+
onClick={() => setIsDarkMode(!isDarkMode)}
|
|
262
|
+
className="text-stone-500 hover:text-stone-900 dark:hover:text-stone-100"
|
|
263
|
+
>
|
|
264
|
+
{isDarkMode ? <Sun className="w-5 h-5" /> : <Moon className="w-5 h-5" />}
|
|
265
|
+
</Button>
|
|
266
|
+
</div>
|
|
267
|
+
</header>
|
|
268
|
+
|
|
269
|
+
{/* Scrollable Content */}
|
|
270
|
+
<div className="flex-1 overflow-auto p-6 md:p-8">
|
|
271
|
+
|
|
272
|
+
{activeTab === 'dashboard' && (
|
|
273
|
+
<div className="max-w-6xl mx-auto space-y-6">
|
|
274
|
+
|
|
275
|
+
{/* Welcome Banner */}
|
|
276
|
+
<div className="bg-gradient-to-r from-indigo-500 to-purple-600 rounded-2xl p-8 text-white shadow-lg relative overflow-hidden">
|
|
277
|
+
<div className="relative z-10">
|
|
278
|
+
<h2 className="text-3xl font-bold mb-2">Good morning, {MOCK_DATA.user.name.split(' ')[0]}!</h2>
|
|
279
|
+
<p className="text-indigo-100 max-w-xl text-lg">You have 3 upcoming meetings today. The "Product Strategy Sync" is about to start.</p>
|
|
280
|
+
<div className="mt-6 flex gap-3">
|
|
281
|
+
<Button className="bg-white text-indigo-600 hover:bg-indigo-50 border-none font-semibold shadow-none">
|
|
282
|
+
Join Meeting Now
|
|
283
|
+
</Button>
|
|
284
|
+
<Button variant="outline" className="text-white border-white/30 hover:bg-white/10 hover:text-white">
|
|
285
|
+
View Calendar
|
|
286
|
+
</Button>
|
|
287
|
+
</div>
|
|
288
|
+
</div>
|
|
289
|
+
{/* Abstract Shapes */}
|
|
290
|
+
<div className="absolute -right-10 -bottom-20 w-64 h-64 bg-white/10 rounded-full blur-3xl" />
|
|
291
|
+
<div className="absolute right-40 -top-20 w-48 h-48 bg-purple-500/30 rounded-full blur-2xl" />
|
|
292
|
+
</div>
|
|
293
|
+
|
|
294
|
+
{/* Key Metrics Grid */}
|
|
295
|
+
<div className="grid grid-cols-1 md:grid-cols-3 gap-6">
|
|
296
|
+
<Card>
|
|
297
|
+
<CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
|
|
298
|
+
<CardTitle className="text-sm font-medium">Participation Equity</CardTitle>
|
|
299
|
+
<Activity className="h-4 w-4 text-emerald-500" />
|
|
300
|
+
</CardHeader>
|
|
301
|
+
<CardContent>
|
|
302
|
+
<div className="text-2xl font-bold">94%</div>
|
|
303
|
+
<p className="text-xs text-muted-foreground">+2.5% from last week</p>
|
|
304
|
+
</CardContent>
|
|
305
|
+
</Card>
|
|
306
|
+
<Card>
|
|
307
|
+
<CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
|
|
308
|
+
<CardTitle className="text-sm font-medium">Active Orchestrations</CardTitle>
|
|
309
|
+
<LayoutDashboard className="h-4 w-4 text-indigo-500" />
|
|
310
|
+
</CardHeader>
|
|
311
|
+
<CardContent>
|
|
312
|
+
<div className="text-2xl font-bold">12</div>
|
|
313
|
+
<p className="text-xs text-muted-foreground">Across 4 workspaces</p>
|
|
314
|
+
</CardContent>
|
|
315
|
+
</Card>
|
|
316
|
+
<Card>
|
|
317
|
+
<CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
|
|
318
|
+
<CardTitle className="text-sm font-medium">Cognitive Load Saved</CardTitle>
|
|
319
|
+
<svg
|
|
320
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
321
|
+
viewBox="0 0 24 24"
|
|
322
|
+
fill="none"
|
|
323
|
+
stroke="currentColor"
|
|
324
|
+
strokeLinecap="round"
|
|
325
|
+
strokeLinejoin="round"
|
|
326
|
+
strokeWidth="2"
|
|
327
|
+
className="h-4 w-4 text-purple-500"
|
|
328
|
+
>
|
|
329
|
+
<path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6" />
|
|
330
|
+
</svg>
|
|
331
|
+
</CardHeader>
|
|
332
|
+
<CardContent>
|
|
333
|
+
<div className="text-2xl font-bold">18 hrs</div>
|
|
334
|
+
<p className="text-xs text-muted-foreground">Estimated this month</p>
|
|
335
|
+
</CardContent>
|
|
336
|
+
</Card>
|
|
337
|
+
</div>
|
|
338
|
+
|
|
339
|
+
<div className="grid grid-cols-1 lg:grid-cols-2 gap-6">
|
|
340
|
+
{/* Recent Meetings */}
|
|
341
|
+
<Card>
|
|
342
|
+
<CardHeader>
|
|
343
|
+
<CardTitle>Recent Meetings</CardTitle>
|
|
344
|
+
<CardDescription>
|
|
345
|
+
Review orchestrations from the last 24 hours.
|
|
346
|
+
</CardDescription>
|
|
347
|
+
</CardHeader>
|
|
348
|
+
<CardContent>
|
|
349
|
+
<div className="space-y-4">
|
|
350
|
+
{[1, 2, 3].map((i) => (
|
|
351
|
+
<div key={i} className="flex items-center justify-between p-3 bg-stone-50 dark:bg-stone-900 rounded-lg border border-stone-100 dark:border-stone-800">
|
|
352
|
+
<div className="flex items-center gap-3">
|
|
353
|
+
<div className="w-10 h-10 rounded bg-indigo-100 dark:bg-indigo-900/30 flex items-center justify-center text-indigo-600 dark:text-indigo-400">
|
|
354
|
+
<Activity size={18} />
|
|
355
|
+
</div>
|
|
356
|
+
<div>
|
|
357
|
+
<p className="font-medium text-sm">Design Review: Agent OS</p>
|
|
358
|
+
<p className="text-xs text-stone-500">Yesterday • 45m • 8 Participants</p>
|
|
359
|
+
</div>
|
|
360
|
+
</div>
|
|
361
|
+
<Button variant="ghost" size="sm">View Report</Button>
|
|
362
|
+
</div>
|
|
363
|
+
))}
|
|
364
|
+
</div>
|
|
365
|
+
</CardContent>
|
|
366
|
+
</Card>
|
|
367
|
+
|
|
368
|
+
{/* Quick Actions */}
|
|
369
|
+
<Card>
|
|
370
|
+
<CardHeader>
|
|
371
|
+
<CardTitle>Quick Actions</CardTitle>
|
|
372
|
+
</CardHeader>
|
|
373
|
+
<CardContent className="grid grid-cols-2 gap-4">
|
|
374
|
+
<Button variant="outline" className="h-24 flex flex-col gap-2 hover:border-indigo-500 hover:text-indigo-600 dark:hover:text-indigo-400 transition-all group">
|
|
375
|
+
<Plus className="w-6 h-6 text-stone-400 group-hover:text-indigo-500" />
|
|
376
|
+
<span>New Meeting</span>
|
|
377
|
+
</Button>
|
|
378
|
+
<Button variant="outline" className="h-24 flex flex-col gap-2 hover:border-purple-500 hover:text-purple-600 dark:hover:text-purple-400 transition-all group">
|
|
379
|
+
<LayoutDashboard className="w-6 h-6 text-stone-400 group-hover:text-purple-500" />
|
|
380
|
+
<span>View Templates</span>
|
|
381
|
+
</Button>
|
|
382
|
+
</CardContent>
|
|
383
|
+
</Card>
|
|
384
|
+
</div>
|
|
385
|
+
|
|
386
|
+
</div>
|
|
387
|
+
)}
|
|
388
|
+
|
|
389
|
+
{activeTab === 'orchestration' && (
|
|
390
|
+
<div className="h-full flex items-center justify-center border-2 border-dashed border-stone-300 dark:border-stone-700 rounded-xl bg-stone-50/50 dark:bg-stone-900/50">
|
|
391
|
+
<div className="text-center">
|
|
392
|
+
<Activity className="w-12 h-12 text-stone-300 mx-auto mb-3" />
|
|
393
|
+
<h3 className="text-lg font-medium text-stone-500">Canvas Placeholder</h3>
|
|
394
|
+
<p className="text-stone-400">The infinite 2D canvas will be rendered here.</p>
|
|
395
|
+
</div>
|
|
396
|
+
</div>
|
|
397
|
+
)}
|
|
398
|
+
|
|
399
|
+
</div>
|
|
400
|
+
</main>
|
|
401
|
+
</div>
|
|
402
|
+
);
|
|
403
|
+
}
|