@mdxui/do 2.1.1 → 3.0.0

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.
Files changed (71) hide show
  1. package/README.md +253 -266
  2. package/dist/{agents-xcIn2dUB.d.ts → agents-2_r9e9i7.d.ts} +213 -2
  3. package/dist/app/index.d.ts +347 -0
  4. package/dist/app/index.js +13 -0
  5. package/dist/app/index.js.map +1 -0
  6. package/dist/chunk-4KXVN3EQ.js +56 -0
  7. package/dist/chunk-4KXVN3EQ.js.map +1 -0
  8. package/dist/chunk-5AWTQDRF.js +76 -0
  9. package/dist/chunk-5AWTQDRF.js.map +1 -0
  10. package/dist/chunk-EQVOEEQO.js +95 -0
  11. package/dist/chunk-EQVOEEQO.js.map +1 -0
  12. package/dist/chunk-FO3N7SXV.js +469 -0
  13. package/dist/chunk-FO3N7SXV.js.map +1 -0
  14. package/dist/chunk-IESVTECE.js +536 -0
  15. package/dist/chunk-IESVTECE.js.map +1 -0
  16. package/dist/chunk-JWKIONEO.js +234 -0
  17. package/dist/chunk-JWKIONEO.js.map +1 -0
  18. package/dist/chunk-NTSEARBC.js +715 -0
  19. package/dist/chunk-NTSEARBC.js.map +1 -0
  20. package/dist/chunk-OWEAW4U6.js +116 -0
  21. package/dist/chunk-OWEAW4U6.js.map +1 -0
  22. package/dist/chunk-VRLUXCLD.js +31 -0
  23. package/dist/chunk-VRLUXCLD.js.map +1 -0
  24. package/dist/chunk-Y52IEYVM.js +131 -0
  25. package/dist/chunk-Y52IEYVM.js.map +1 -0
  26. package/dist/chunk-YGIBMNRH.js +1991 -0
  27. package/dist/chunk-YGIBMNRH.js.map +1 -0
  28. package/dist/components/index.d.ts +1 -738
  29. package/dist/components/index.js +2 -6
  30. package/dist/config-CmZBQQaT.d.ts +122 -0
  31. package/dist/{do-CaQVueZw.d.ts → do-C-t9UgjT.d.ts} +31 -33
  32. package/dist/errors-B4Oyyj4Z.d.ts +346 -0
  33. package/dist/hooks/index.d.ts +428 -696
  34. package/dist/hooks/index.js +6 -4
  35. package/dist/hooks/things/index.d.ts +298 -0
  36. package/dist/hooks/things/index.js +8 -0
  37. package/dist/hooks/things/index.js.map +1 -0
  38. package/dist/index.d.ts +21 -1010
  39. package/dist/index.js +11 -839
  40. package/dist/index.js.map +1 -1
  41. package/dist/lib/index.d.ts +100 -0
  42. package/dist/lib/index.js +6 -0
  43. package/dist/lib/index.js.map +1 -0
  44. package/dist/providers/index.d.ts +244 -32
  45. package/dist/providers/index.js +3 -2
  46. package/dist/query-keys-BC901wog.d.ts +153 -0
  47. package/dist/schemas/index.d.ts +1 -1
  48. package/dist/schemas/index.js +2 -2
  49. package/dist/schemas/index.js.map +1 -1
  50. package/dist/{thing-DtI25yZh.d.ts → thing-BVhCTzOi.d.ts} +4 -4
  51. package/dist/types/index.d.ts +251 -216
  52. package/dist/types/index.js +1 -2
  53. package/dist/views/index.d.ts +131 -0
  54. package/dist/views/index.js +11 -0
  55. package/dist/views/index.js.map +1 -0
  56. package/package.json +39 -17
  57. package/dist/__test-utils__/index.d.ts +0 -399
  58. package/dist/__test-utils__/index.js +0 -34641
  59. package/dist/__test-utils__/index.js.map +0 -1
  60. package/dist/chunk-EEDMN7UF.js +0 -1351
  61. package/dist/chunk-EEDMN7UF.js.map +0 -1
  62. package/dist/chunk-G3PMV62Z.js +0 -33
  63. package/dist/chunk-G3PMV62Z.js.map +0 -1
  64. package/dist/chunk-NXPXL5NA.js +0 -3789
  65. package/dist/chunk-NXPXL5NA.js.map +0 -1
  66. package/dist/chunk-PC5FJY6M.js +0 -20
  67. package/dist/chunk-PC5FJY6M.js.map +0 -1
  68. package/dist/chunk-XF6LKY2M.js +0 -445
  69. package/dist/chunk-XF6LKY2M.js.map +0 -1
  70. package/dist/magic-string.es-J7BYFTTJ.js +0 -1307
  71. package/dist/magic-string.es-J7BYFTTJ.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/shell/do-shell.tsx","../src/components/shell/do-sidebar.tsx","../src/components/shell/do-header.tsx","../src/components/shell/sync-status.tsx","../src/components/dashboard/stats-cards.tsx","../src/components/things/things-list.tsx","../src/components/things/thing-form.tsx","../src/components/things/thing-form-dialog.tsx","../src/components/things/confirm-dialog.tsx","../src/components/things/toast.tsx","../src/components/things/things-page.tsx","../src/components/workflows/workflows-list.tsx","../src/components/workflows/workflow-execution-view.tsx","../src/components/workflows/trigger-workflow-dialog.tsx","../src/components/agents/agents-grid.tsx","../src/components/agents/agent-execute-panel.tsx","../src/components/agents/agent-feedback-panel.tsx","../src/components/agents/agent-history-table.tsx","../src/components/error-boundary.tsx"],"names":["React","React2","jsxs","jsx","React3","ChevronDown","Fragment","Database","GitBranch","Workflow","Bot","Zap","React4","Search","React5","React6","React7","React8","React10","Plus","MoreHorizontal","Eye","RefreshCw","STATUS_COLORS","ChevronRight","React11","React12","Loader2","Play","TrendingUp","Clock","React13","React14","X","AlertCircle","CheckCircle2","React15","STATUS_ICONS","XCircle","StopCircle","ThumbsUp","ThumbsDown","React16"],"mappings":"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","file":"chunk-NXPXL5NA.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../lib/utils'\n\n/**\n * Props for DOShell\n */\nexport interface DOShellProps {\n /** Sidebar content */\n sidebar?: React.ReactNode\n /** Header content */\n header?: React.ReactNode\n /** Main content */\n children: React.ReactNode\n /** Default sidebar open state */\n defaultSidebarOpen?: boolean\n /** Controlled sidebar open state */\n sidebarOpen?: boolean\n /** Callback when sidebar state changes */\n onSidebarOpenChange?: (open: boolean) => void\n /** Additional class name */\n className?: string\n}\n\n/**\n * Shell context\n */\ninterface ShellContextValue {\n sidebarOpen: boolean\n setSidebarOpen: (open: boolean) => void\n toggleSidebar: () => void\n}\n\nconst ShellContext = React.createContext<ShellContextValue | null>(null)\n\nexport function useShell() {\n const context = React.useContext(ShellContext)\n if (!context) {\n throw new Error('useShell must be used within a DOShell')\n }\n return context\n}\n\n/**\n * DOShell - Main layout shell for the admin interface\n *\n * Provides:\n * - Collapsible sidebar\n * - Header area\n * - Main content area with proper scrolling\n *\n * @example\n * ```tsx\n * <DOShell\n * sidebar={<DOSidebar />}\n * header={<DOHeader />}\n * >\n * <ThingsBrowser />\n * </DOShell>\n * ```\n */\nexport function DOShell({\n sidebar,\n header,\n children,\n defaultSidebarOpen = true,\n sidebarOpen: controlledSidebarOpen,\n onSidebarOpenChange,\n className,\n}: DOShellProps) {\n const [internalSidebarOpen, setInternalSidebarOpen] = React.useState(defaultSidebarOpen)\n\n const sidebarOpen = controlledSidebarOpen ?? internalSidebarOpen\n const setSidebarOpen = onSidebarOpenChange ?? setInternalSidebarOpen\n\n const contextValue = React.useMemo<ShellContextValue>(\n () => ({\n sidebarOpen,\n setSidebarOpen,\n toggleSidebar: () => setSidebarOpen(!sidebarOpen),\n }),\n [sidebarOpen, setSidebarOpen]\n )\n\n return (\n <ShellContext.Provider value={contextValue}>\n <div\n data-testid=\"do-shell\"\n className={cn('flex h-screen w-full overflow-hidden bg-background', className)}\n >\n {/* Sidebar */}\n {sidebar && (\n <aside\n data-testid=\"do-sidebar\"\n className={cn(\n 'flex h-full flex-col border-r border-border bg-muted/30 transition-all duration-300',\n sidebarOpen ? 'w-64' : 'w-0 overflow-hidden'\n )}\n >\n {sidebar}\n </aside>\n )}\n\n {/* Main area */}\n <div className=\"flex flex-1 flex-col overflow-hidden\">\n {/* Header */}\n {header && (\n <header\n data-testid=\"do-header\"\n className=\"flex h-14 shrink-0 items-center border-b border-border bg-background px-4\"\n >\n {header}\n </header>\n )}\n\n {/* Content */}\n <main data-testid=\"do-main\" className=\"flex-1 overflow-auto\">\n {children}\n </main>\n </div>\n </div>\n </ShellContext.Provider>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport {\n Database,\n GitBranch,\n Workflow,\n Bot,\n Zap,\n Plug,\n Settings,\n Users,\n Key,\n Building,\n LayoutDashboard,\n ChevronDown,\n ChevronRight,\n type LucideIcon,\n} from 'lucide-react'\nimport { cn } from '../../lib/utils'\n\n/**\n * Navigation item definition\n */\nexport interface NavItem {\n /** Item ID */\n id: string\n /** Item label */\n label: string\n /** Item icon */\n icon?: LucideIcon\n /** URL to navigate to */\n href?: string\n /** Child items */\n children?: NavItem[]\n /** Is this item active? */\n active?: boolean\n /** Badge content */\n badge?: string | number\n /** Is this item disabled? */\n disabled?: boolean\n}\n\n/**\n * Props for DOSidebar\n */\nexport interface DOSidebarProps {\n /** Header content (logo, title) */\n header?: React.ReactNode\n /** Navigation items */\n items?: NavItem[]\n /** Currently active item ID */\n activeItem?: string\n /** Footer content */\n footer?: React.ReactNode\n /** Callback when item is clicked */\n onItemClick?: (item: NavItem) => void\n /** Additional class name */\n className?: string\n}\n\n/**\n * Default navigation items for DO admin\n */\nexport const defaultNavItems: NavItem[] = [\n {\n id: 'dashboard',\n label: 'Dashboard',\n icon: LayoutDashboard,\n href: '/',\n },\n {\n id: 'things',\n label: 'Things',\n icon: Database,\n href: '/things',\n },\n {\n id: 'relationships',\n label: 'Relationships',\n icon: GitBranch,\n href: '/relationships',\n },\n {\n id: 'workflows',\n label: 'Workflows',\n icon: Workflow,\n href: '/workflows',\n },\n {\n id: 'agents',\n label: 'Agents',\n icon: Bot,\n href: '/agents',\n },\n {\n id: 'events',\n label: 'Events',\n icon: Zap,\n href: '/events',\n },\n {\n id: 'integrations',\n label: 'Integrations',\n icon: Plug,\n href: '/integrations',\n },\n {\n id: 'settings',\n label: 'Settings',\n icon: Settings,\n children: [\n {\n id: 'users',\n label: 'Users',\n icon: Users,\n href: '/settings/users',\n },\n {\n id: 'organizations',\n label: 'Organizations',\n icon: Building,\n href: '/settings/organizations',\n },\n {\n id: 'api-keys',\n label: 'API Keys',\n icon: Key,\n href: '/settings/api-keys',\n },\n ],\n },\n]\n\n/**\n * DOSidebar - Navigation sidebar for the admin interface\n */\nexport function DOSidebar({\n header,\n items = defaultNavItems,\n activeItem,\n footer,\n onItemClick,\n className,\n}: DOSidebarProps) {\n const [expandedItems, setExpandedItems] = React.useState<Set<string>>(new Set())\n\n const toggleExpanded = (id: string) => {\n setExpandedItems((prev) => {\n const next = new Set(prev)\n if (next.has(id)) {\n next.delete(id)\n } else {\n next.add(id)\n }\n return next\n })\n }\n\n const renderNavItem = (item: NavItem, depth = 0) => {\n const Icon = item.icon\n const hasChildren = item.children && item.children.length > 0\n const isExpanded = expandedItems.has(item.id)\n const isActive = activeItem === item.id\n\n return (\n <div key={item.id}>\n <button\n data-testid={`nav-${item.id}`}\n data-active={isActive ? 'true' : undefined}\n onClick={() => {\n if (hasChildren) {\n toggleExpanded(item.id)\n } else {\n onItemClick?.(item)\n }\n }}\n disabled={item.disabled}\n className={cn(\n 'flex w-full items-center gap-3 rounded-md px-3 py-2 text-sm font-medium transition-colors',\n 'hover:bg-accent hover:text-accent-foreground',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n isActive && 'bg-accent text-accent-foreground',\n item.disabled && 'cursor-not-allowed opacity-50',\n depth > 0 && 'ml-6'\n )}\n >\n {Icon && <Icon className=\"h-4 w-4 shrink-0\" />}\n <span className=\"flex-1 truncate text-left\">{item.label}</span>\n {item.badge !== undefined && (\n <span className=\"rounded-full bg-primary px-2 py-0.5 text-xs text-primary-foreground\">\n {item.badge}\n </span>\n )}\n {hasChildren && (\n <span className=\"shrink-0\">\n {isExpanded ? (\n <ChevronDown className=\"h-4 w-4\" />\n ) : (\n <ChevronRight className=\"h-4 w-4\" />\n )}\n </span>\n )}\n </button>\n\n {/* Children */}\n {hasChildren && isExpanded && (\n <div className=\"mt-1 space-y-1\">\n {item.children!.map((child) => renderNavItem(child, depth + 1))}\n </div>\n )}\n </div>\n )\n }\n\n return (\n <div className={cn('flex h-full flex-col', className)}>\n {/* Header */}\n {header && <div className=\"shrink-0 border-b border-border p-4\">{header}</div>}\n\n {/* Navigation */}\n <nav className=\"flex-1 space-y-1 overflow-auto p-4\">{items.map((item) => renderNavItem(item))}</nav>\n\n {/* Footer */}\n {footer && <div className=\"shrink-0 border-t border-border p-4\">{footer}</div>}\n </div>\n )\n}\n\n/**\n * DOSidebarHeader - Logo and title for sidebar\n */\nexport interface DOSidebarHeaderProps {\n /** Logo element or URL */\n logo?: React.ReactNode | string\n /** Title */\n title?: string\n /** Subtitle */\n subtitle?: string\n /** Additional class name */\n className?: string\n}\n\nexport function DOSidebarHeader({ logo, title = '.do Admin', subtitle, className }: DOSidebarHeaderProps) {\n return (\n <div className={cn('flex items-center gap-3', className)}>\n {logo && (\n <div className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-md bg-primary text-primary-foreground\">\n {typeof logo === 'string' ? <img src={logo} alt=\"\" className=\"h-6 w-6\" /> : logo}\n </div>\n )}\n <div className=\"min-w-0 flex-1\">\n <div className=\"truncate font-semibold\">{title}</div>\n {subtitle && <div className=\"truncate text-xs text-muted-foreground\">{subtitle}</div>}\n </div>\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { Menu, Search, Bell, User, ChevronDown } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport { useShell } from './do-shell'\n\n/**\n * Props for DOHeader\n */\nexport interface DOHeaderProps {\n /** Title to display */\n title?: string\n /** Breadcrumbs */\n breadcrumbs?: Array<{ label: string; href?: string }>\n /** Show search input */\n showSearch?: boolean\n /** Search placeholder */\n searchPlaceholder?: string\n /** Search value */\n searchValue?: string\n /** Callback when search changes */\n onSearchChange?: (value: string) => void\n /** Actions to show on the right */\n actions?: React.ReactNode\n /** User info */\n user?: {\n name: string\n email?: string\n avatar?: string\n }\n /** Callback when user menu item is clicked */\n onUserMenuClick?: (action: 'profile' | 'settings' | 'logout') => void\n /** Additional class name */\n className?: string\n}\n\n/**\n * DOHeader - Header bar for the admin interface\n */\nexport function DOHeader({\n title,\n breadcrumbs,\n showSearch = true,\n searchPlaceholder = 'Search...',\n searchValue,\n onSearchChange,\n actions,\n user,\n onUserMenuClick,\n className,\n}: DOHeaderProps) {\n const shell = useShell()\n const [isUserMenuOpen, setIsUserMenuOpen] = React.useState(false)\n\n return (\n <div className={cn('flex w-full items-center gap-4', className)}>\n {/* Sidebar toggle */}\n <button\n data-testid=\"sidebar-toggle\"\n onClick={shell.toggleSidebar}\n className=\"flex h-8 w-8 items-center justify-center rounded-md hover:bg-accent\"\n aria-label={shell.sidebarOpen ? 'Close sidebar' : 'Open sidebar'}\n >\n <Menu className=\"h-5 w-5\" />\n </button>\n\n {/* Breadcrumbs / Title */}\n <div className=\"flex-1\">\n {breadcrumbs && breadcrumbs.length > 0 ? (\n <nav className=\"flex items-center gap-1 text-sm\">\n {breadcrumbs.map((crumb, index) => (\n <React.Fragment key={index}>\n {index > 0 && <span className=\"text-muted-foreground\">/</span>}\n {crumb.href ? (\n <a href={crumb.href} className=\"text-muted-foreground hover:text-foreground\">\n {crumb.label}\n </a>\n ) : (\n <span className=\"font-medium\">{crumb.label}</span>\n )}\n </React.Fragment>\n ))}\n </nav>\n ) : title ? (\n <h1 className=\"text-lg font-semibold\">{title}</h1>\n ) : null}\n </div>\n\n {/* Search */}\n {showSearch && (\n <div className=\"relative w-64\">\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n <input\n data-testid=\"header-search-input\"\n type=\"text\"\n placeholder={searchPlaceholder}\n value={searchValue}\n onChange={(e) => onSearchChange?.(e.target.value)}\n className={cn(\n 'h-9 w-full rounded-md border border-input bg-background pl-9 pr-4 text-sm',\n 'placeholder:text-muted-foreground',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring'\n )}\n />\n </div>\n )}\n\n {/* Actions */}\n {actions}\n\n {/* Notifications */}\n <button\n data-testid=\"notifications-button\"\n className=\"relative flex h-8 w-8 items-center justify-center rounded-md hover:bg-accent\"\n >\n <Bell className=\"h-5 w-5\" />\n <span className=\"absolute right-1 top-1 h-2 w-2 rounded-full bg-destructive\" />\n </button>\n\n {/* User menu */}\n {user && (\n <div className=\"relative\">\n <button\n data-testid=\"user-menu\"\n onClick={() => setIsUserMenuOpen(!isUserMenuOpen)}\n className=\"flex items-center gap-2 rounded-md px-2 py-1 hover:bg-accent\"\n >\n <div className=\"flex h-8 w-8 items-center justify-center rounded-full bg-muted\">\n {user.avatar ? (\n <img src={user.avatar} alt=\"\" className=\"h-8 w-8 rounded-full\" />\n ) : (\n <User className=\"h-4 w-4\" />\n )}\n </div>\n <div className=\"hidden text-left sm:block\">\n <div className=\"text-sm font-medium\">{user.name}</div>\n {user.email && <div className=\"text-xs text-muted-foreground\">{user.email}</div>}\n </div>\n <ChevronDown className=\"h-4 w-4 text-muted-foreground\" />\n </button>\n\n {/* Dropdown menu */}\n {isUserMenuOpen && (\n <>\n <div className=\"fixed inset-0 z-40\" onClick={() => setIsUserMenuOpen(false)} />\n <div className=\"absolute right-0 top-full z-50 mt-2 w-48 rounded-md border border-border bg-popover py-1 shadow-lg\">\n <button\n data-testid=\"user-menu-profile\"\n onClick={() => {\n onUserMenuClick?.('profile')\n setIsUserMenuOpen(false)\n }}\n className=\"flex w-full items-center px-4 py-2 text-sm hover:bg-accent\"\n >\n Profile\n </button>\n <button\n data-testid=\"user-menu-settings\"\n onClick={() => {\n onUserMenuClick?.('settings')\n setIsUserMenuOpen(false)\n }}\n className=\"flex w-full items-center px-4 py-2 text-sm hover:bg-accent\"\n >\n Settings\n </button>\n <div className=\"my-1 border-t border-border\" />\n <button\n data-testid=\"user-menu-logout\"\n onClick={() => {\n onUserMenuClick?.('logout')\n setIsUserMenuOpen(false)\n }}\n className=\"flex w-full items-center px-4 py-2 text-sm text-destructive hover:bg-accent\"\n >\n Log out\n </button>\n </div>\n </>\n )}\n </div>\n )}\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { Wifi, WifiOff, RefreshCw } from 'lucide-react'\nimport { cn } from '../../lib/utils'\n\n/**\n * Sync state values for the SyncStatusIndicator component\n *\n * Note: This is separate from the SyncStatus type in types/do.ts which\n * represents backend sync states. This type is for the UI indicator component.\n */\nexport type SyncIndicatorState = 'connected' | 'disconnected' | 'syncing'\n\n/**\n * Props for SyncStatusIndicator\n */\nexport interface SyncStatusIndicatorProps {\n /** Current sync state */\n state?: SyncIndicatorState\n /** Whether to show label text */\n showLabel?: boolean\n /** Label text override */\n label?: string\n /** Additional class name */\n className?: string\n}\n\n/**\n * SyncStatusIndicator - Connection/sync status indicator\n *\n * Displays the current connection state with appropriate icon and color.\n * Used in the header to show real-time sync status.\n *\n * @example\n * ```tsx\n * <SyncStatusIndicator state=\"connected\" />\n * <SyncStatusIndicator state=\"syncing\" showLabel />\n * <SyncStatusIndicator state=\"disconnected\" label=\"Offline\" />\n * ```\n */\nexport function SyncStatusIndicator({\n state = 'connected',\n showLabel = false,\n label,\n className,\n}: SyncStatusIndicatorProps) {\n const getStatusConfig = () => {\n switch (state) {\n case 'connected':\n return {\n icon: Wifi,\n color: 'text-green-500',\n defaultLabel: 'Connected',\n }\n case 'disconnected':\n return {\n icon: WifiOff,\n color: 'text-destructive',\n defaultLabel: 'Disconnected',\n }\n case 'syncing':\n return {\n icon: RefreshCw,\n color: 'text-yellow-500',\n defaultLabel: 'Syncing...',\n animate: true,\n }\n }\n }\n\n const config = getStatusConfig()\n const Icon = config.icon\n const displayLabel = label ?? config.defaultLabel\n\n return (\n <div\n data-testid=\"sync-status\"\n data-sync-state={state}\n className={cn('flex items-center gap-2', className)}\n >\n <Icon\n className={cn(\n 'h-4 w-4',\n config.color,\n 'animate' in config && config.animate && 'animate-spin'\n )}\n />\n {showLabel && (\n <span className={cn('text-sm', config.color)}>{displayLabel}</span>\n )}\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport {\n Database,\n GitBranch,\n Workflow,\n Bot,\n Zap,\n TrendingUp,\n TrendingDown,\n type LucideIcon,\n} from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport { formatNumber } from '../../lib/utils'\n\n/**\n * Stat card data\n */\nexport interface StatCardData {\n /** Card title */\n title: string\n /** Current value */\n value: number\n /** Previous value (for trend calculation) */\n previousValue?: number\n /** Icon */\n icon?: LucideIcon\n /** Card color */\n color?: 'default' | 'primary' | 'success' | 'warning' | 'destructive'\n /** Link */\n href?: string\n}\n\n/**\n * Props for StatsCards\n */\nexport interface StatsCardsProps {\n /** Stats to display */\n stats: StatCardData[]\n /** Loading state */\n loading?: boolean\n /** Callback when card is clicked */\n onCardClick?: (stat: StatCardData) => void\n /** Additional class name */\n className?: string\n}\n\n/**\n * Default stats for DO admin dashboard\n */\nexport const defaultStats: StatCardData[] = [\n { title: 'Things', value: 0, icon: Database, color: 'primary' },\n { title: 'Relationships', value: 0, icon: GitBranch, color: 'default' },\n { title: 'Workflows', value: 0, icon: Workflow, color: 'success' },\n { title: 'Agents', value: 0, icon: Bot, color: 'warning' },\n { title: 'Events Today', value: 0, icon: Zap, color: 'destructive' },\n]\n\nconst colorClasses = {\n default: 'bg-muted text-muted-foreground',\n primary: 'bg-primary/10 text-primary',\n success: 'bg-green-500/10 text-green-600 dark:text-green-400',\n warning: 'bg-yellow-500/10 text-yellow-600 dark:text-yellow-400',\n destructive: 'bg-destructive/10 text-destructive',\n}\n\n/**\n * StatsCards - Dashboard statistics cards\n */\nexport function StatsCards({ stats, loading = false, onCardClick, className }: StatsCardsProps) {\n return (\n <div className={cn('grid gap-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-5', className)}>\n {stats.map((stat, index) => {\n const Icon = stat.icon\n const trend = stat.previousValue !== undefined\n ? ((stat.value - stat.previousValue) / stat.previousValue) * 100\n : undefined\n const isPositive = trend !== undefined && trend >= 0\n\n return (\n <button\n key={index}\n onClick={() => onCardClick?.(stat)}\n className={cn(\n 'flex flex-col rounded-lg border border-border bg-card p-4 text-left transition-colors',\n 'hover:bg-accent/50',\n loading && 'animate-pulse'\n )}\n >\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm font-medium text-muted-foreground\">{stat.title}</span>\n {Icon && (\n <div className={cn('rounded-md p-2', colorClasses[stat.color || 'default'])}>\n <Icon className=\"h-4 w-4\" />\n </div>\n )}\n </div>\n <div className=\"mt-2 flex items-baseline gap-2\">\n <span className=\"text-2xl font-bold\">{formatNumber(stat.value)}</span>\n {trend !== undefined && (\n <span\n className={cn(\n 'flex items-center text-xs font-medium',\n isPositive ? 'text-green-600' : 'text-destructive'\n )}\n >\n {isPositive ? (\n <TrendingUp className=\"mr-0.5 h-3 w-3\" />\n ) : (\n <TrendingDown className=\"mr-0.5 h-3 w-3\" />\n )}\n {Math.abs(trend).toFixed(1)}%\n </span>\n )}\n </div>\n </button>\n )\n })}\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { Search, Filter, Plus, MoreHorizontal, Eye, Edit, Trash2, History, ChevronDown } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport { formatRelativeTime, truncate } from '../../lib/utils'\nimport type { Thing, ThingFilter, ThingSort, ThingPagination } from '../../types'\n\n/**\n * Props for ThingsList\n */\nexport interface ThingsListProps {\n /** Things to display */\n things: Thing[]\n /** Total count */\n total: number\n /** Loading state */\n loading?: boolean\n /** Selected thing IDs */\n selectedIds?: string[]\n /** Current filter */\n filter?: ThingFilter\n /** Current sort */\n sort?: ThingSort\n /** Current pagination */\n pagination?: ThingPagination\n /** Available types for filtering */\n availableTypes?: string[]\n /** Callback when filter changes */\n onFilterChange?: (filter: ThingFilter) => void\n /** Callback when sort changes */\n onSortChange?: (sort: ThingSort) => void\n /** Callback when pagination changes */\n onPaginationChange?: (pagination: ThingPagination) => void\n /** Callback when thing is clicked */\n onThingClick?: (thing: Thing) => void\n /** Callback when thing is double-clicked (edit shortcut) */\n onThingDoubleClick?: (thing: Thing) => void\n /** Callback when thing is selected */\n onThingSelect?: (thing: Thing, selected: boolean) => void\n /** Callback for action */\n onAction?: (thing: Thing, action: 'view' | 'edit' | 'delete' | 'history') => void\n /** Callback to create new thing */\n onCreate?: () => void\n /** Additional class name */\n className?: string\n}\n\n/**\n * ThingsList - List view for Things\n *\n * A data table for displaying and managing Things with search, filter,\n * pagination, and row actions. Includes proper data-testid attributes\n * for Playwright E2E testing.\n *\n * @example\n * ```tsx\n * <ThingsList\n * things={thingsData}\n * total={100}\n * onCreate={() => openCreateDialog()}\n * onAction={(thing, action) => handleAction(thing, action)}\n * />\n * ```\n */\nexport function ThingsList({\n things,\n total,\n loading = false,\n selectedIds = [],\n filter,\n sort,\n pagination = { page: 1, perPage: 20 },\n availableTypes = [],\n onFilterChange,\n onSortChange,\n onPaginationChange,\n onThingClick,\n onThingDoubleClick,\n onThingSelect,\n onAction,\n onCreate,\n className,\n}: ThingsListProps) {\n const [searchValue, setSearchValue] = React.useState(filter?.nameSearch || '')\n const [showFilters, setShowFilters] = React.useState(false)\n const [openMenuId, setOpenMenuId] = React.useState<string | null>(null)\n const [selectedRowId, setSelectedRowId] = React.useState<string | null>(null)\n\n const totalPages = Math.ceil(total / pagination.perPage) || 1\n const currentTypeFilter = filter?.type\n ? Array.isArray(filter.type)\n ? filter.type[0]\n : filter.type\n : ''\n\n /**\n * Handle search input\n */\n const handleSearch = (value: string) => {\n setSearchValue(value)\n onFilterChange?.({ ...filter, nameSearch: value || undefined })\n }\n\n /**\n * Handle search on Enter key\n */\n const handleSearchKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n onFilterChange?.({ ...filter, nameSearch: searchValue || undefined })\n }\n }\n\n /**\n * Clear search\n */\n const handleClearSearch = () => {\n setSearchValue('')\n onFilterChange?.({ ...filter, nameSearch: undefined })\n }\n\n /**\n * Handle type filter change\n */\n const handleTypeFilter = (type: string) => {\n onFilterChange?.({ ...filter, type: type || undefined })\n }\n\n /**\n * Handle column sort\n */\n const handleSort = (field: ThingSort['field']) => {\n const newOrder = sort?.field === field && sort.order === 'asc' ? 'desc' : 'asc'\n onSortChange?.({ field, order: newOrder })\n }\n\n /**\n * Handle row click for selection\n */\n const handleRowClick = (thing: Thing) => {\n setSelectedRowId(thing.id)\n onThingClick?.(thing)\n }\n\n /**\n * Handle row double-click for editing\n */\n const handleRowDoubleClick = (thing: Thing) => {\n onThingDoubleClick?.(thing)\n onAction?.(thing, 'edit')\n }\n\n /**\n * Handle keyboard navigation in table\n */\n React.useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (!selectedRowId) return\n\n const selectedThing = things.find((t) => t.id === selectedRowId)\n if (!selectedThing) return\n\n if (e.key === 'e') {\n e.preventDefault()\n onAction?.(selectedThing, 'edit')\n } else if (e.key === 'Delete' || e.key === 'Backspace') {\n e.preventDefault()\n onAction?.(selectedThing, 'delete')\n } else if (e.key === 'Enter') {\n e.preventDefault()\n onAction?.(selectedThing, 'edit')\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [selectedRowId, things, onAction])\n\n return (\n <div className={cn('flex flex-col', className)}>\n {/* Toolbar */}\n <div className=\"flex items-center justify-between gap-4 border-b border-border p-4\">\n <div className=\"flex items-center gap-2\">\n {/* Search */}\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n <input\n type=\"text\"\n data-testid=\"search-input\"\n placeholder=\"Search things...\"\n value={searchValue}\n onChange={(e) => handleSearch(e.target.value)}\n onKeyDown={handleSearchKeyDown}\n className={cn(\n 'h-9 w-64 rounded-md border border-input bg-background pl-9 pr-8 text-sm',\n 'placeholder:text-muted-foreground',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring'\n )}\n />\n {searchValue && (\n <button\n data-testid=\"clear-search\"\n onClick={handleClearSearch}\n className=\"absolute right-2 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n )}\n </div>\n\n {/* Type Filter */}\n <div className=\"relative\">\n <select\n data-testid=\"type-filter\"\n value={currentTypeFilter}\n onChange={(e) => handleTypeFilter(e.target.value)}\n className={cn(\n 'h-9 appearance-none rounded-md border border-input bg-background pl-3 pr-8 text-sm',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring'\n )}\n >\n <option value=\"\">All Types</option>\n {availableTypes.map((type) => (\n <option key={type} value={type} data-testid={`type-option-${type}`}>\n {type}\n </option>\n ))}\n </select>\n <ChevronDown className=\"absolute right-2 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground pointer-events-none\" />\n </div>\n\n {/* Filters Toggle */}\n <button\n onClick={() => setShowFilters(!showFilters)}\n className={cn(\n 'flex h-9 items-center gap-2 rounded-md border border-input px-3 text-sm',\n 'hover:bg-accent',\n showFilters && 'bg-accent'\n )}\n >\n <Filter className=\"h-4 w-4\" />\n Filters\n </button>\n\n {/* Selection Count */}\n {selectedIds.length > 0 && (\n <span\n data-testid=\"selection-count\"\n className=\"text-sm text-muted-foreground\"\n >\n {selectedIds.length} selected\n </span>\n )}\n\n {/* Bulk Delete Button */}\n {selectedIds.length > 0 && (\n <button\n data-testid=\"bulk-delete-btn\"\n onClick={() => {\n // Find first selected thing to trigger action\n const selectedThing = things.find((t) => selectedIds.includes(t.id))\n if (selectedThing) {\n onAction?.(selectedThing, 'delete')\n }\n }}\n className={cn(\n 'flex h-9 items-center gap-2 rounded-md px-3 text-sm',\n 'bg-destructive text-destructive-foreground hover:bg-destructive/90'\n )}\n >\n <Trash2 className=\"h-4 w-4\" />\n Delete\n </button>\n )}\n </div>\n\n {/* Create button */}\n {onCreate && (\n <button\n data-testid=\"create-thing-btn\"\n onClick={onCreate}\n className={cn(\n 'flex h-9 items-center gap-2 rounded-md bg-primary px-4 text-sm font-medium text-primary-foreground',\n 'hover:bg-primary/90',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring'\n )}\n >\n <Plus className=\"h-4 w-4\" />\n Create Thing\n </button>\n )}\n </div>\n\n {/* Table */}\n <div className=\"flex-1 overflow-auto\">\n <table data-testid=\"things-table\" className=\"w-full\">\n <thead className=\"sticky top-0 bg-muted/50\">\n <tr>\n <th className=\"w-8 p-4\">\n <input\n type=\"checkbox\"\n data-testid=\"select-all-checkbox\"\n className=\"h-4 w-4 rounded border-input\"\n checked={selectedIds.length > 0 && selectedIds.length === things.length}\n onChange={(e) => {\n things.forEach((thing) => onThingSelect?.(thing, e.target.checked))\n }}\n />\n </th>\n <th\n data-testid=\"header-name\"\n className=\"cursor-pointer p-4 text-left text-sm font-medium text-muted-foreground hover:text-foreground\"\n onClick={() => handleSort('name')}\n >\n <span className=\"flex items-center gap-1\">\n Name\n {sort?.field === 'name' && (\n <span data-testid=\"sort-indicator\">\n {sort.order === 'asc' ? '↑' : '↓'}\n </span>\n )}\n </span>\n </th>\n <th\n data-testid=\"header-type\"\n className=\"cursor-pointer p-4 text-left text-sm font-medium text-muted-foreground hover:text-foreground\"\n onClick={() => handleSort('type')}\n >\n <span className=\"flex items-center gap-1\">\n Type\n {sort?.field === 'type' && (\n <span data-testid=\"sort-indicator\">\n {sort.order === 'asc' ? '↑' : '↓'}\n </span>\n )}\n </span>\n </th>\n <th className=\"p-4 text-left text-sm font-medium text-muted-foreground\">\n Namespace\n </th>\n <th\n data-testid=\"header-updated\"\n className=\"cursor-pointer p-4 text-left text-sm font-medium text-muted-foreground hover:text-foreground\"\n onClick={() => handleSort('updatedAt')}\n >\n <span className=\"flex items-center gap-1\">\n Updated\n {sort?.field === 'updatedAt' && (\n <span data-testid=\"sort-indicator\">\n {sort.order === 'asc' ? '↑' : '↓'}\n </span>\n )}\n </span>\n </th>\n <th className=\"w-12 p-4\" />\n </tr>\n </thead>\n <tbody>\n {loading ? (\n // Loading skeleton\n Array.from({ length: 5 }).map((_, i) => (\n <tr key={i} className=\"animate-pulse\">\n <td className=\"p-4\">\n <div className=\"h-4 w-4 rounded bg-muted\" />\n </td>\n <td className=\"p-4\">\n <div className=\"h-4 w-32 rounded bg-muted\" />\n </td>\n <td className=\"p-4\">\n <div className=\"h-4 w-24 rounded bg-muted\" />\n </td>\n <td className=\"p-4\">\n <div className=\"h-4 w-20 rounded bg-muted\" />\n </td>\n <td className=\"p-4\">\n <div className=\"h-4 w-28 rounded bg-muted\" />\n </td>\n <td className=\"p-4\" />\n </tr>\n ))\n ) : things.length === 0 ? (\n <tr>\n <td colSpan={6}>\n <div\n data-testid=\"things-empty-state\"\n className=\"flex flex-col items-center justify-center gap-2 p-8 text-center\"\n >\n <p className=\"text-muted-foreground\">No things found</p>\n {onCreate && (\n <button\n onClick={onCreate}\n className=\"text-sm text-primary hover:underline\"\n >\n Create your first Thing\n </button>\n )}\n </div>\n </td>\n </tr>\n ) : (\n things.map((thing) => (\n <tr\n key={`${thing.ns}/${thing.type}/${thing.id}`}\n data-testid=\"things-row\"\n data-selected={selectedRowId === thing.id ? 'true' : undefined}\n className={cn(\n 'cursor-pointer border-b border-border',\n 'hover:bg-muted/50',\n selectedRowId === thing.id && 'bg-muted'\n )}\n onClick={() => handleRowClick(thing)}\n onDoubleClick={() => handleRowDoubleClick(thing)}\n >\n <td className=\"p-4\" onClick={(e) => e.stopPropagation()}>\n <input\n type=\"checkbox\"\n data-testid=\"row-checkbox\"\n className=\"h-4 w-4 rounded border-input\"\n checked={selectedIds.includes(thing.id)}\n onChange={(e) => onThingSelect?.(thing, e.target.checked)}\n />\n </td>\n <td className=\"p-4\" data-testid=\"thing-name-cell\">\n <div className=\"font-medium\">{thing.name || thing.id}</div>\n <div className=\"text-xs text-muted-foreground\">\n {truncate(thing.id, 30)}\n </div>\n </td>\n <td className=\"p-4\" data-testid=\"thing-type-cell\">\n <span className=\"rounded-full bg-muted px-2 py-1 text-xs font-medium\">\n {thing.type}\n </span>\n </td>\n <td className=\"p-4 text-sm text-muted-foreground\">{thing.ns}</td>\n <td className=\"p-4 text-sm text-muted-foreground\">\n {formatRelativeTime(thing.updatedAt)}\n </td>\n <td className=\"p-4\" onClick={(e) => e.stopPropagation()}>\n <div className=\"relative\">\n <button\n data-testid=\"row-actions-menu\"\n onClick={() =>\n setOpenMenuId(openMenuId === thing.id ? null : thing.id)\n }\n className=\"flex h-8 w-8 items-center justify-center rounded-md hover:bg-accent\"\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n </button>\n {openMenuId === thing.id && (\n <>\n <div\n className=\"fixed inset-0 z-40\"\n onClick={() => setOpenMenuId(null)}\n />\n <div className=\"absolute right-0 top-full z-50 mt-1 w-36 rounded-md border border-border bg-popover py-1 shadow-lg\">\n <button\n onClick={() => {\n onAction?.(thing, 'view')\n setOpenMenuId(null)\n }}\n className=\"flex w-full items-center gap-2 px-3 py-2 text-sm hover:bg-accent\"\n >\n <Eye className=\"h-4 w-4\" /> View\n </button>\n <button\n data-testid=\"edit-btn\"\n onClick={() => {\n onAction?.(thing, 'edit')\n setOpenMenuId(null)\n }}\n className=\"flex w-full items-center gap-2 px-3 py-2 text-sm hover:bg-accent\"\n >\n <Edit className=\"h-4 w-4\" /> Edit\n </button>\n <button\n onClick={() => {\n onAction?.(thing, 'history')\n setOpenMenuId(null)\n }}\n className=\"flex w-full items-center gap-2 px-3 py-2 text-sm hover:bg-accent\"\n >\n <History className=\"h-4 w-4\" /> History\n </button>\n <div className=\"my-1 border-t border-border\" />\n <button\n data-testid=\"delete-btn\"\n onClick={() => {\n onAction?.(thing, 'delete')\n setOpenMenuId(null)\n }}\n className=\"flex w-full items-center gap-2 px-3 py-2 text-sm text-destructive hover:bg-accent\"\n >\n <Trash2 className=\"h-4 w-4\" /> Delete\n </button>\n </div>\n </>\n )}\n </div>\n </td>\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n\n {/* Pagination */}\n <div\n data-testid=\"pagination\"\n className=\"flex items-center justify-between border-t border-border p-4\"\n >\n <div data-testid=\"page-info\" className=\"text-sm text-muted-foreground\">\n {total > 0 ? (\n <>\n Showing {(pagination.page - 1) * pagination.perPage + 1} to{' '}\n {Math.min(pagination.page * pagination.perPage, total)} of {total} things\n {' - '}Page {pagination.page} of {totalPages}\n </>\n ) : (\n 'No results'\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n <button\n data-testid=\"prev-page\"\n onClick={() =>\n onPaginationChange?.({ ...pagination, page: pagination.page - 1 })\n }\n disabled={pagination.page <= 1}\n className={cn(\n 'h-8 rounded-md border border-input px-3 text-sm',\n 'hover:bg-accent disabled:opacity-50 disabled:cursor-not-allowed'\n )}\n >\n Previous\n </button>\n <button\n data-testid=\"next-page\"\n onClick={() =>\n onPaginationChange?.({ ...pagination, page: pagination.page + 1 })\n }\n disabled={pagination.page >= totalPages}\n className={cn(\n 'h-8 rounded-md border border-input px-3 text-sm',\n 'hover:bg-accent disabled:opacity-50 disabled:cursor-not-allowed'\n )}\n >\n Next\n </button>\n </div>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../lib/utils'\nimport type { Thing, ThingCreateInput, ThingUpdateInput } from '../../types'\n\n/**\n * Form data for creating or updating a Thing\n */\nexport interface ThingFormData {\n type: string\n name: string\n description: string\n}\n\n/**\n * Validation errors for form fields\n */\nexport interface ThingFormErrors {\n type?: string\n name?: string\n description?: string\n}\n\n/**\n * Props for ThingForm component\n */\nexport interface ThingFormProps {\n /** Existing thing for edit mode (undefined = create mode) */\n thing?: Thing\n /** Called when form is submitted with valid data */\n onSubmit: (data: ThingFormData) => void | Promise<void>\n /** Called when cancel button is clicked */\n onCancel: () => void\n /** Whether form is currently submitting */\n isSubmitting?: boolean\n /** Additional class name */\n className?: string\n}\n\n/**\n * ThingForm - Form for creating or editing Things\n *\n * Provides validated input fields for Thing data with proper test IDs\n * for Playwright E2E testing.\n *\n * @example\n * ```tsx\n * <ThingForm\n * onSubmit={(data) => createThing(data)}\n * onCancel={() => closeDialog()}\n * />\n * ```\n */\nexport function ThingForm({\n thing,\n onSubmit,\n onCancel,\n isSubmitting = false,\n className,\n}: ThingFormProps) {\n const isEditMode = Boolean(thing)\n\n // Form state\n const [formData, setFormData] = React.useState<ThingFormData>({\n type: thing?.type ?? '',\n name: thing?.name ?? '',\n description: (thing?.data?.description as string) ?? '',\n })\n\n // Validation errors\n const [errors, setErrors] = React.useState<ThingFormErrors>({})\n\n // Track if form has been submitted (for showing validation errors)\n const [hasSubmitted, setHasSubmitted] = React.useState(false)\n\n // Ref for first input focus\n const typeInputRef = React.useRef<HTMLInputElement>(null)\n\n // Focus first input on mount\n React.useEffect(() => {\n typeInputRef.current?.focus()\n }, [])\n\n /**\n * Validate form data\n */\n const validateForm = (data: ThingFormData): ThingFormErrors => {\n const newErrors: ThingFormErrors = {}\n\n // Type is required\n const trimmedType = data.type.trim()\n if (!trimmedType) {\n newErrors.type = 'Type is required'\n }\n\n // Name is required\n const trimmedName = data.name.trim()\n if (!trimmedName) {\n newErrors.name = 'Name is required'\n }\n\n return newErrors\n }\n\n /**\n * Handle input change\n */\n const handleChange = (field: keyof ThingFormData, value: string) => {\n setFormData((prev) => ({ ...prev, [field]: value }))\n\n // Clear error for this field when user types (only if we've already submitted)\n if (hasSubmitted) {\n const newData = { ...formData, [field]: value }\n const newErrors = validateForm(newData)\n setErrors((prev) => ({\n ...prev,\n [field]: newErrors[field],\n }))\n }\n }\n\n /**\n * Handle form submission\n */\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n setHasSubmitted(true)\n\n // Validate form\n const validationErrors = validateForm(formData)\n setErrors(validationErrors)\n\n // If there are errors, don't submit\n if (Object.keys(validationErrors).length > 0) {\n return\n }\n\n // Trim whitespace from values before submitting\n const trimmedData: ThingFormData = {\n type: formData.type.trim(),\n name: formData.name.trim(),\n description: formData.description.trim(),\n }\n\n // Call onSubmit\n await onSubmit(trimmedData)\n }\n\n /**\n * Handle Enter key to submit form\n */\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n handleSubmit(e as unknown as React.FormEvent)\n }\n }\n\n return (\n <form\n data-testid=\"thing-form\"\n onSubmit={handleSubmit}\n className={cn('flex flex-col gap-4', className)}\n >\n {/* Type Field */}\n <div className=\"flex flex-col gap-2\">\n <label\n htmlFor=\"thing-type\"\n className=\"text-sm font-medium text-foreground\"\n >\n Type <span className=\"text-destructive\">*</span>\n </label>\n <input\n ref={typeInputRef}\n id=\"thing-type\"\n data-testid=\"thing-type-input\"\n type=\"text\"\n value={formData.type}\n onChange={(e) => handleChange('type', e.target.value)}\n onKeyDown={handleKeyDown}\n disabled={isEditMode || isSubmitting}\n placeholder=\"e.g., Task, Project, Person\"\n aria-invalid={Boolean(errors.type)}\n aria-describedby={errors.type ? 'type-error' : undefined}\n className={cn(\n 'h-9 w-full rounded-md border px-3 py-1 text-sm shadow-sm transition-colors',\n 'placeholder:text-muted-foreground',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n errors.type\n ? 'border-destructive focus-visible:ring-destructive'\n : 'border-input',\n isEditMode && 'bg-muted'\n )}\n />\n {errors.type && (\n <p\n id=\"type-error\"\n data-testid=\"field-error-type\"\n className=\"text-sm text-destructive\"\n >\n {errors.type}\n </p>\n )}\n </div>\n\n {/* Name Field */}\n <div className=\"flex flex-col gap-2\">\n <label\n htmlFor=\"thing-name\"\n className=\"text-sm font-medium text-foreground\"\n >\n Name <span className=\"text-destructive\">*</span>\n </label>\n <input\n id=\"thing-name\"\n data-testid=\"thing-name-input\"\n type=\"text\"\n value={formData.name}\n onChange={(e) => handleChange('name', e.target.value)}\n onKeyDown={handleKeyDown}\n disabled={isSubmitting}\n placeholder=\"Enter a name\"\n aria-invalid={Boolean(errors.name)}\n aria-describedby={errors.name ? 'name-error' : undefined}\n className={cn(\n 'h-9 w-full rounded-md border px-3 py-1 text-sm shadow-sm transition-colors',\n 'placeholder:text-muted-foreground',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n errors.name\n ? 'border-destructive focus-visible:ring-destructive'\n : 'border-input'\n )}\n />\n {errors.name && (\n <p\n id=\"name-error\"\n data-testid=\"field-error-name\"\n className=\"text-sm text-destructive\"\n >\n {errors.name}\n </p>\n )}\n </div>\n\n {/* Description Field */}\n <div className=\"flex flex-col gap-2\">\n <label\n htmlFor=\"thing-description\"\n className=\"text-sm font-medium text-foreground\"\n >\n Description\n </label>\n <textarea\n id=\"thing-description\"\n data-testid=\"thing-description-input\"\n value={formData.description}\n onChange={(e) => handleChange('description', e.target.value)}\n disabled={isSubmitting}\n placeholder=\"Optional description\"\n rows={3}\n className={cn(\n 'w-full rounded-md border px-3 py-2 text-sm shadow-sm transition-colors',\n 'placeholder:text-muted-foreground',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'border-input resize-none'\n )}\n />\n </div>\n\n {/* Form Actions */}\n <div className=\"flex justify-end gap-2 pt-4\">\n <button\n type=\"button\"\n data-testid=\"thing-cancel-btn\"\n onClick={onCancel}\n disabled={isSubmitting}\n className={cn(\n 'h-9 rounded-md px-4 text-sm font-medium',\n 'border border-input bg-background',\n 'hover:bg-accent hover:text-accent-foreground',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n 'disabled:cursor-not-allowed disabled:opacity-50'\n )}\n >\n Cancel\n </button>\n <button\n type=\"submit\"\n data-testid=\"thing-submit-btn\"\n disabled={isSubmitting}\n className={cn(\n 'h-9 rounded-md px-4 text-sm font-medium',\n 'bg-primary text-primary-foreground',\n 'hover:bg-primary/90',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n 'disabled:cursor-not-allowed disabled:opacity-50'\n )}\n >\n {isSubmitting ? (\n <span className=\"flex items-center gap-2\">\n <span\n data-testid=\"submit-loading\"\n className=\"h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent\"\n />\n {isEditMode ? 'Saving...' : 'Creating...'}\n </span>\n ) : isEditMode ? (\n 'Save'\n ) : (\n 'Create'\n )}\n </button>\n </div>\n </form>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../lib/utils'\nimport { ThingForm, type ThingFormData } from './thing-form'\nimport type { Thing } from '../../types'\n\n/**\n * Props for ThingFormDialog component\n */\nexport interface ThingFormDialogProps {\n /** Whether the dialog is open */\n open: boolean\n /** The thing being edited (undefined = create mode) */\n thing?: Thing\n /** Called when dialog should close (cancel, escape, submit success) */\n onClose: () => void\n /** Called when form is submitted with valid data */\n onSubmit: (data: ThingFormData) => void | Promise<void>\n /** Whether form is currently submitting */\n isSubmitting?: boolean\n}\n\n/**\n * ThingFormDialog - Dialog wrapper for ThingForm\n *\n * Provides a modal dialog for creating or editing Things with proper\n * accessibility and test IDs for Playwright E2E testing.\n *\n * @example\n * ```tsx\n * <ThingFormDialog\n * open={isDialogOpen}\n * onClose={() => setIsDialogOpen(false)}\n * onSubmit={async (data) => {\n * await createThing(data)\n * setIsDialogOpen(false)\n * }}\n * />\n * ```\n */\nexport function ThingFormDialog({\n open,\n thing,\n onClose,\n onSubmit,\n isSubmitting = false,\n}: ThingFormDialogProps) {\n const isEditMode = Boolean(thing)\n const dialogRef = React.useRef<HTMLDivElement>(null)\n\n // Handle Escape key to close\n React.useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && open && !isSubmitting) {\n onClose()\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [open, isSubmitting, onClose])\n\n // Prevent body scroll when dialog is open\n React.useEffect(() => {\n if (open) {\n document.body.style.overflow = 'hidden'\n } else {\n document.body.style.overflow = ''\n }\n return () => {\n document.body.style.overflow = ''\n }\n }, [open])\n\n // Focus trap\n React.useEffect(() => {\n if (open && dialogRef.current) {\n const focusableElements = dialogRef.current.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n )\n const firstElement = focusableElements[0] as HTMLElement\n const lastElement = focusableElements[focusableElements.length - 1] as HTMLElement\n\n const handleTabKey = (e: KeyboardEvent) => {\n if (e.key === 'Tab') {\n if (e.shiftKey && document.activeElement === firstElement) {\n e.preventDefault()\n lastElement?.focus()\n } else if (!e.shiftKey && document.activeElement === lastElement) {\n e.preventDefault()\n firstElement?.focus()\n }\n }\n }\n\n document.addEventListener('keydown', handleTabKey)\n return () => document.removeEventListener('keydown', handleTabKey)\n }\n }, [open])\n\n if (!open) {\n return null\n }\n\n /**\n * Handle backdrop click to close\n */\n const handleBackdropClick = (e: React.MouseEvent) => {\n if (e.target === e.currentTarget && !isSubmitting) {\n onClose()\n }\n }\n\n return (\n <div\n data-testid=\"dialog-backdrop\"\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\"\n onClick={handleBackdropClick}\n role=\"presentation\"\n >\n <div\n ref={dialogRef}\n data-testid=\"thing-form-dialog\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog-title\"\n className={cn(\n 'relative w-full max-w-md rounded-lg border bg-background p-6 shadow-lg',\n 'animate-in fade-in-0 zoom-in-95 duration-200'\n )}\n >\n {/* Close Button */}\n <button\n type=\"button\"\n onClick={onClose}\n disabled={isSubmitting}\n className={cn(\n 'absolute right-4 top-4 rounded-sm opacity-70 transition-opacity',\n 'hover:opacity-100',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n 'disabled:cursor-not-allowed disabled:opacity-50'\n )}\n aria-label=\"Close dialog\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n\n {/* Dialog Header */}\n <div className=\"mb-6\">\n <h2\n id=\"dialog-title\"\n data-testid=\"dialog-title\"\n className=\"text-lg font-semibold text-foreground\"\n >\n {isEditMode ? 'Edit Thing' : 'Create New Thing'}\n </h2>\n <p className=\"mt-1 text-sm text-muted-foreground\">\n {isEditMode\n ? 'Update the details of this Thing.'\n : 'Fill in the details to create a new Thing.'}\n </p>\n </div>\n\n {/* Form */}\n <ThingForm\n thing={thing}\n onSubmit={onSubmit}\n onCancel={onClose}\n isSubmitting={isSubmitting}\n />\n </div>\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../lib/utils'\n\n/**\n * Props for ConfirmDialog component\n */\nexport interface ConfirmDialogProps {\n /** Whether the dialog is open */\n open: boolean\n /** Dialog title */\n title: string\n /** Dialog message/description */\n message: string\n /** Text for the confirm button */\n confirmText?: string\n /** Text for the cancel button */\n cancelText?: string\n /** Whether the action is destructive (shows red confirm button) */\n destructive?: boolean\n /** Called when confirm button is clicked */\n onConfirm: () => void | Promise<void>\n /** Called when cancel button is clicked or dialog is dismissed */\n onCancel: () => void\n /** Whether the confirm action is in progress */\n isConfirming?: boolean\n}\n\n/**\n * ConfirmDialog - Reusable confirmation dialog\n *\n * A modal dialog for confirming destructive or important actions.\n * Provides proper accessibility and test IDs for Playwright E2E testing.\n *\n * @example\n * ```tsx\n * <ConfirmDialog\n * open={isDeleteDialogOpen}\n * title=\"Delete Thing\"\n * message=\"Are you sure you want to delete this Thing? This action cannot be undone.\"\n * confirmText=\"Delete\"\n * destructive\n * onConfirm={async () => {\n * await deleteThing()\n * setIsDeleteDialogOpen(false)\n * }}\n * onCancel={() => setIsDeleteDialogOpen(false)}\n * />\n * ```\n */\nexport function ConfirmDialog({\n open,\n title,\n message,\n confirmText = 'Confirm',\n cancelText = 'Cancel',\n destructive = false,\n onConfirm,\n onCancel,\n isConfirming = false,\n}: ConfirmDialogProps) {\n const dialogRef = React.useRef<HTMLDivElement>(null)\n const confirmButtonRef = React.useRef<HTMLButtonElement>(null)\n\n // Handle Escape key to close\n React.useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && open && !isConfirming) {\n onCancel()\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [open, isConfirming, onCancel])\n\n // Handle Enter key to confirm\n React.useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter' && open && !isConfirming) {\n e.preventDefault()\n onConfirm()\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [open, isConfirming, onConfirm])\n\n // Prevent body scroll when dialog is open\n React.useEffect(() => {\n if (open) {\n document.body.style.overflow = 'hidden'\n } else {\n document.body.style.overflow = ''\n }\n return () => {\n document.body.style.overflow = ''\n }\n }, [open])\n\n // Focus confirm button when dialog opens\n React.useEffect(() => {\n if (open && confirmButtonRef.current) {\n confirmButtonRef.current.focus()\n }\n }, [open])\n\n // Focus trap\n React.useEffect(() => {\n if (open && dialogRef.current) {\n const focusableElements = dialogRef.current.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n )\n const firstElement = focusableElements[0] as HTMLElement\n const lastElement = focusableElements[focusableElements.length - 1] as HTMLElement\n\n const handleTabKey = (e: KeyboardEvent) => {\n if (e.key === 'Tab') {\n if (e.shiftKey && document.activeElement === firstElement) {\n e.preventDefault()\n lastElement?.focus()\n } else if (!e.shiftKey && document.activeElement === lastElement) {\n e.preventDefault()\n firstElement?.focus()\n }\n }\n }\n\n document.addEventListener('keydown', handleTabKey)\n return () => document.removeEventListener('keydown', handleTabKey)\n }\n }, [open])\n\n if (!open) {\n return null\n }\n\n /**\n * Handle backdrop click to close\n */\n const handleBackdropClick = (e: React.MouseEvent) => {\n if (e.target === e.currentTarget && !isConfirming) {\n onCancel()\n }\n }\n\n return (\n <div\n data-testid=\"dialog-backdrop\"\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\"\n onClick={handleBackdropClick}\n role=\"presentation\"\n >\n <div\n ref={dialogRef}\n data-testid=\"confirm-dialog\"\n role=\"alertdialog\"\n aria-modal=\"true\"\n aria-labelledby=\"confirm-dialog-title\"\n aria-describedby=\"confirm-dialog-description\"\n className={cn(\n 'relative w-full max-w-md rounded-lg border bg-background p-6 shadow-lg',\n 'animate-in fade-in-0 zoom-in-95 duration-200'\n )}\n >\n {/* Dialog Header */}\n <div className=\"mb-4\">\n <h2\n id=\"confirm-dialog-title\"\n className=\"text-lg font-semibold text-foreground\"\n >\n {title}\n </h2>\n <p\n id=\"confirm-dialog-description\"\n className=\"mt-2 text-sm text-muted-foreground\"\n >\n {message}\n </p>\n </div>\n\n {/* Dialog Actions */}\n <div className=\"flex justify-end gap-2 pt-4\">\n <button\n type=\"button\"\n data-testid=\"confirm-dialog-cancel\"\n onClick={onCancel}\n disabled={isConfirming}\n className={cn(\n 'h-9 rounded-md px-4 text-sm font-medium',\n 'border border-input bg-background',\n 'hover:bg-accent hover:text-accent-foreground',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n 'disabled:cursor-not-allowed disabled:opacity-50'\n )}\n >\n {cancelText}\n </button>\n <button\n ref={confirmButtonRef}\n type=\"button\"\n data-testid=\"confirm-dialog-confirm\"\n data-variant={destructive ? 'destructive' : 'default'}\n onClick={onConfirm}\n disabled={isConfirming}\n className={cn(\n 'h-9 rounded-md px-4 text-sm font-medium',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n destructive\n ? 'bg-destructive text-destructive-foreground hover:bg-destructive/90'\n : 'bg-primary text-primary-foreground hover:bg-primary/90'\n )}\n >\n {isConfirming ? (\n <span className=\"flex items-center gap-2\">\n <span\n data-testid=\"confirm-loading\"\n className=\"h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent\"\n />\n {confirmText}...\n </span>\n ) : (\n confirmText\n )}\n </button>\n </div>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../lib/utils'\n\n/**\n * Toast type for different notification styles\n */\nexport type ToastType = 'success' | 'error' | 'info' | 'warning'\n\n/**\n * Toast notification data\n */\nexport interface Toast {\n id: string\n type: ToastType\n message: string\n duration?: number\n action?: {\n label: string\n onClick: () => void\n }\n}\n\n/**\n * Props for ToastNotification component\n */\nexport interface ToastNotificationProps {\n toast: Toast\n onDismiss: (id: string) => void\n}\n\n/**\n * ToastNotification - Individual toast notification\n */\nfunction ToastNotification({ toast, onDismiss }: ToastNotificationProps) {\n const iconsByType = {\n success: (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n ),\n error: (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" />\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" />\n </svg>\n ),\n info: (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </svg>\n ),\n warning: (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n ),\n }\n\n const stylesByType = {\n success: 'border-green-500/50 bg-green-50 text-green-900 dark:bg-green-900/20 dark:text-green-100',\n error: 'border-destructive/50 bg-destructive/10 text-destructive dark:bg-destructive/20',\n info: 'border-blue-500/50 bg-blue-50 text-blue-900 dark:bg-blue-900/20 dark:text-blue-100',\n warning: 'border-yellow-500/50 bg-yellow-50 text-yellow-900 dark:bg-yellow-900/20 dark:text-yellow-100',\n }\n\n return (\n <div\n data-testid={`toast-${toast.type}`}\n role=\"alert\"\n className={cn(\n 'pointer-events-auto flex items-center gap-3 rounded-lg border p-4 shadow-lg',\n 'animate-in slide-in-from-top-5 fade-in duration-300',\n stylesByType[toast.type]\n )}\n >\n <span className=\"flex-shrink-0\">{iconsByType[toast.type]}</span>\n <p className=\"flex-1 text-sm\">{toast.message}</p>\n {toast.action && (\n <button\n data-testid=\"undo-btn\"\n onClick={() => {\n toast.action?.onClick()\n onDismiss(toast.id)\n }}\n className=\"flex-shrink-0 text-sm font-medium underline-offset-4 hover:underline\"\n >\n {toast.action.label}\n </button>\n )}\n <button\n onClick={() => onDismiss(toast.id)}\n className=\"flex-shrink-0 rounded-sm opacity-70 hover:opacity-100\"\n aria-label=\"Dismiss notification\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n )\n}\n\n/**\n * Props for ToastContainer component\n */\nexport interface ToastContainerProps {\n toasts: Toast[]\n onDismiss: (id: string) => void\n position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top-center'\n}\n\n/**\n * ToastContainer - Container for displaying toast notifications\n *\n * @example\n * ```tsx\n * const [toasts, setToasts] = useState<Toast[]>([])\n *\n * const addToast = (type: ToastType, message: string) => {\n * const id = crypto.randomUUID()\n * setToasts((prev) => [...prev, { id, type, message }])\n * setTimeout(() => removeToast(id), 5000)\n * }\n *\n * const removeToast = (id: string) => {\n * setToasts((prev) => prev.filter((t) => t.id !== id))\n * }\n *\n * return (\n * <>\n * <button onClick={() => addToast('success', 'Created!')}>\n * Create\n * </button>\n * <ToastContainer toasts={toasts} onDismiss={removeToast} />\n * </>\n * )\n * ```\n */\nexport function ToastContainer({\n toasts,\n onDismiss,\n position = 'top-right',\n}: ToastContainerProps) {\n const positionClasses = {\n 'top-right': 'top-4 right-4',\n 'top-left': 'top-4 left-4',\n 'bottom-right': 'bottom-4 right-4',\n 'bottom-left': 'bottom-4 left-4',\n 'top-center': 'top-4 left-1/2 -translate-x-1/2',\n }\n\n if (toasts.length === 0) {\n return null\n }\n\n return (\n <div\n data-testid=\"toast-container\"\n className={cn(\n 'fixed z-50 flex flex-col gap-2 pointer-events-none',\n positionClasses[position]\n )}\n >\n {toasts.map((toast) => (\n <ToastNotification\n key={toast.id}\n toast={toast}\n onDismiss={onDismiss}\n />\n ))}\n </div>\n )\n}\n\n/**\n * Toast context for global toast management\n */\ninterface ToastContextValue {\n addToast: (type: ToastType, message: string, options?: { duration?: number; action?: Toast['action'] }) => void\n removeToast: (id: string) => void\n}\n\nconst ToastContext = React.createContext<ToastContextValue | null>(null)\n\n/**\n * useToast hook for accessing toast functions\n */\nexport function useToast() {\n const context = React.useContext(ToastContext)\n if (!context) {\n throw new Error('useToast must be used within a ToastProvider')\n }\n return context\n}\n\n/**\n * Props for ToastProvider\n */\nexport interface ToastProviderProps {\n children: React.ReactNode\n position?: ToastContainerProps['position']\n defaultDuration?: number\n}\n\n/**\n * ToastProvider - Provides toast context to children\n *\n * @example\n * ```tsx\n * function App() {\n * return (\n * <ToastProvider>\n * <MyComponent />\n * </ToastProvider>\n * )\n * }\n *\n * function MyComponent() {\n * const { addToast } = useToast()\n *\n * return (\n * <button onClick={() => addToast('success', 'Saved!')}>\n * Save\n * </button>\n * )\n * }\n * ```\n */\nexport function ToastProvider({\n children,\n position = 'top-right',\n defaultDuration = 5000,\n}: ToastProviderProps) {\n const [toasts, setToasts] = React.useState<Toast[]>([])\n\n const removeToast = React.useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id))\n }, [])\n\n const addToast = React.useCallback(\n (\n type: ToastType,\n message: string,\n options?: { duration?: number; action?: Toast['action'] }\n ) => {\n const id = crypto.randomUUID()\n const duration = options?.duration ?? defaultDuration\n\n setToasts((prev) => [...prev, { id, type, message, ...options }])\n\n if (duration > 0) {\n setTimeout(() => removeToast(id), duration)\n }\n },\n [defaultDuration, removeToast]\n )\n\n const contextValue = React.useMemo(\n () => ({ addToast, removeToast }),\n [addToast, removeToast]\n )\n\n return (\n <ToastContext.Provider value={contextValue}>\n {children}\n <ToastContainer toasts={toasts} onDismiss={removeToast} position={position} />\n </ToastContext.Provider>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { ThingsList } from './things-list'\nimport { ThingFormDialog } from './thing-form-dialog'\nimport { ConfirmDialog } from './confirm-dialog'\nimport { ToastProvider, useToast } from './toast'\nimport type { ThingFormData } from './thing-form'\nimport type { Thing, ThingFilter, ThingSort, ThingPagination, ThingUpdateInput } from '../../types'\nimport { useThings, useCreateThing } from '../../hooks'\nimport { useDO, useDataProviderSafe } from '../../providers'\n\n/**\n * Props for ThingsPage component\n */\nexport interface ThingsPageProps {\n /** Initial filter */\n initialFilter?: ThingFilter\n /** Initial sort */\n initialSort?: ThingSort\n /** Initial pagination */\n initialPagination?: ThingPagination\n /** Available types for filtering */\n availableTypes?: string[]\n /** Callback when URL params should change (for routing) */\n onParamsChange?: (params: { filter?: ThingFilter; sort?: ThingSort; pagination?: ThingPagination }) => void\n /** Additional class name */\n className?: string\n}\n\n/**\n * Internal component that uses toast context\n */\nfunction ThingsPageInternal({\n initialFilter,\n initialSort,\n initialPagination = { page: 1, perPage: 20 },\n availableTypes = ['Task', 'Project', 'Person', 'Organization', 'Document', 'Event'],\n onParamsChange,\n className,\n}: ThingsPageProps) {\n const { namespace, config } = useDO()\n const { addToast } = useToast()\n const dataProvider = useDataProviderSafe()\n\n // State\n const [filter, setFilter] = React.useState<ThingFilter>(initialFilter ?? { ns: namespace })\n const [sort, setSort] = React.useState<ThingSort | undefined>(initialSort)\n const [pagination, setPagination] = React.useState<ThingPagination>(initialPagination)\n const [selectedIds, setSelectedIds] = React.useState<string[]>([])\n\n // Dialog state\n const [createDialogOpen, setCreateDialogOpen] = React.useState(false)\n const [editDialogOpen, setEditDialogOpen] = React.useState(false)\n const [deleteDialogOpen, setDeleteDialogOpen] = React.useState(false)\n const [selectedThing, setSelectedThing] = React.useState<Thing | null>(null)\n\n // Loading states for mutations\n const [isSubmitting, setIsSubmitting] = React.useState(false)\n const [isDeleting, setIsDeleting] = React.useState(false)\n\n // Fetch things\n const { data: queryResult, isLoading, refetch } = useThings(filter, sort, pagination)\n\n // Mutations - use the create hook\n const createThing = useCreateThing()\n\n /**\n * Handle filter change\n */\n const handleFilterChange = (newFilter: ThingFilter) => {\n setFilter(newFilter)\n setPagination({ ...pagination, page: 1 }) // Reset to page 1 on filter change\n onParamsChange?.({ filter: newFilter, sort, pagination: { ...pagination, page: 1 } })\n }\n\n /**\n * Handle sort change\n */\n const handleSortChange = (newSort: ThingSort) => {\n setSort(newSort)\n onParamsChange?.({ filter, sort: newSort, pagination })\n }\n\n /**\n * Handle pagination change\n */\n const handlePaginationChange = (newPagination: ThingPagination) => {\n setPagination(newPagination)\n onParamsChange?.({ filter, sort, pagination: newPagination })\n }\n\n /**\n * Handle thing selection\n */\n const handleThingSelect = (thing: Thing, selected: boolean) => {\n setSelectedIds((prev) =>\n selected ? [...prev, thing.id] : prev.filter((id) => id !== thing.id)\n )\n }\n\n /**\n * Handle actions from list\n */\n const handleAction = (thing: Thing, action: 'view' | 'edit' | 'delete' | 'history') => {\n setSelectedThing(thing)\n\n switch (action) {\n case 'edit':\n setEditDialogOpen(true)\n break\n case 'delete':\n setDeleteDialogOpen(true)\n break\n case 'view':\n // Could navigate to detail page\n console.log('View thing:', thing)\n break\n case 'history':\n // Could navigate to history page\n console.log('View history:', thing)\n break\n }\n }\n\n /**\n * Handle create form submission\n */\n const handleCreate = async (data: ThingFormData) => {\n setIsSubmitting(true)\n try {\n await createThing.mutateAsync({\n ns: namespace,\n type: data.type,\n name: data.name,\n data: data.description ? { description: data.description } : {},\n })\n\n setCreateDialogOpen(false)\n addToast('success', `${data.name} created successfully`)\n refetch()\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Failed to create'\n addToast('error', message)\n } finally {\n setIsSubmitting(false)\n }\n }\n\n /**\n * Handle edit form submission\n */\n const handleEdit = async (data: ThingFormData) => {\n if (!selectedThing) return\n\n setIsSubmitting(true)\n try {\n // Use data provider for update if available\n if (dataProvider) {\n const updateData: ThingUpdateInput = {\n name: data.name,\n data: data.description ? { description: data.description } : undefined,\n }\n\n await dataProvider.update<Thing>('Thing', {\n id: selectedThing.id,\n data: {\n ns: selectedThing.ns,\n type: selectedThing.type,\n ...updateData,\n },\n })\n } else {\n // Fallback to REST API\n const response = await fetch(\n `${config.apiEndpoint}/things/${encodeURIComponent(selectedThing.ns)}/${encodeURIComponent(selectedThing.type)}/${encodeURIComponent(selectedThing.id)}`,\n {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json',\n ...(config.authToken ? { Authorization: `Bearer ${config.authToken}` } : {}),\n },\n body: JSON.stringify({\n name: data.name,\n data: data.description ? { description: data.description } : undefined,\n }),\n }\n )\n if (!response.ok) throw new Error('Failed to update thing')\n }\n\n setEditDialogOpen(false)\n setSelectedThing(null)\n addToast('success', `${data.name} updated successfully`)\n refetch()\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Failed to update'\n addToast('error', message)\n } finally {\n setIsSubmitting(false)\n }\n }\n\n /**\n * Handle delete confirmation\n */\n const handleDelete = async () => {\n if (!selectedThing) return\n\n setIsDeleting(true)\n try {\n // Use data provider for delete if available\n if (dataProvider) {\n await dataProvider.delete('Thing', { id: selectedThing.id })\n } else {\n // Fallback to REST API\n const response = await fetch(\n `${config.apiEndpoint}/things/${encodeURIComponent(selectedThing.ns)}/${encodeURIComponent(selectedThing.type)}/${encodeURIComponent(selectedThing.id)}`,\n {\n method: 'DELETE',\n headers: config.authToken ? { Authorization: `Bearer ${config.authToken}` } : {},\n }\n )\n if (!response.ok) throw new Error('Failed to delete thing')\n }\n\n setDeleteDialogOpen(false)\n const deletedName = selectedThing.name\n setSelectedThing(null)\n setSelectedIds((prev) => prev.filter((id) => id !== selectedThing.id))\n addToast('success', `${deletedName} deleted`, {\n action: {\n label: 'Undo',\n onClick: () => {\n // Could implement undo by restoring from soft delete\n console.log('Undo delete')\n },\n },\n })\n refetch()\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Failed to delete'\n addToast('error', message)\n } finally {\n setIsDeleting(false)\n }\n }\n\n return (\n <div className={className}>\n <ThingsList\n things={queryResult?.data ?? []}\n total={queryResult?.total ?? 0}\n loading={isLoading}\n selectedIds={selectedIds}\n filter={filter}\n sort={sort}\n pagination={pagination}\n availableTypes={availableTypes}\n onFilterChange={handleFilterChange}\n onSortChange={handleSortChange}\n onPaginationChange={handlePaginationChange}\n onThingSelect={handleThingSelect}\n onAction={handleAction}\n onCreate={() => setCreateDialogOpen(true)}\n />\n\n {/* Create Dialog */}\n <ThingFormDialog\n open={createDialogOpen}\n onClose={() => setCreateDialogOpen(false)}\n onSubmit={handleCreate}\n isSubmitting={isSubmitting}\n />\n\n {/* Edit Dialog */}\n <ThingFormDialog\n open={editDialogOpen}\n thing={selectedThing ?? undefined}\n onClose={() => {\n setEditDialogOpen(false)\n setSelectedThing(null)\n }}\n onSubmit={handleEdit}\n isSubmitting={isSubmitting}\n />\n\n {/* Delete Confirmation Dialog */}\n <ConfirmDialog\n open={deleteDialogOpen}\n title=\"Delete Thing\"\n message={`Are you sure you want to delete \"${selectedThing?.name}\"? This action cannot be undone.`}\n confirmText=\"Delete\"\n destructive\n onConfirm={handleDelete}\n onCancel={() => {\n setDeleteDialogOpen(false)\n setSelectedThing(null)\n }}\n isConfirming={isDeleting}\n />\n </div>\n )\n}\n\n/**\n * ThingsPage - Complete Things management page with CRUD operations\n *\n * A connected component that wires up ThingsList with create/edit/delete\n * dialogs and toast notifications. Uses the Things hooks for data fetching\n * and mutations.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <ThingsPage />\n *\n * // With initial filter\n * <ThingsPage\n * initialFilter={{ type: 'Task' }}\n * onParamsChange={(params) => updateURL(params)}\n * />\n * ```\n */\nexport function ThingsPage(props: ThingsPageProps) {\n return (\n <ToastProvider position=\"top-right\">\n <ThingsPageInternal {...props} />\n </ToastProvider>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { Search, Plus, MoreHorizontal, Play, Eye, ChevronDown } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport { formatRelativeTime, formatNumber } from '../../lib/utils'\nimport type { Workflow, WorkflowFilter, WorkflowStatus } from '../../types'\n\n/**\n * Props for WorkflowsList\n */\nexport interface WorkflowsListProps {\n /** Workflows to display */\n workflows: Workflow[]\n /** Total count */\n total: number\n /** Loading state */\n loading?: boolean\n /** Current filter */\n filter?: WorkflowFilter\n /** Callback when filter changes */\n onFilterChange?: (filter: WorkflowFilter) => void\n /** Callback when workflow is clicked */\n onWorkflowClick?: (workflow: Workflow) => void\n /** Callback when trigger button is clicked */\n onTriggerWorkflow?: (workflow: Workflow) => void\n /** Callback to create new workflow */\n onCreate?: () => void\n /** Additional class name */\n className?: string\n}\n\n/** Status badge color mapping */\nconst STATUS_COLORS: Record<WorkflowStatus, string> = {\n active: 'bg-green-500/10 text-green-600 dark:text-green-400',\n draft: 'bg-yellow-500/10 text-yellow-600 dark:text-yellow-400',\n deprecated: 'bg-orange-500/10 text-orange-600 dark:text-orange-400',\n archived: 'bg-muted text-muted-foreground',\n}\n\n/**\n * WorkflowsList - List view for Workflows\n */\nexport function WorkflowsList({\n workflows,\n total,\n loading = false,\n filter,\n onFilterChange,\n onWorkflowClick,\n onTriggerWorkflow,\n onCreate,\n className,\n}: WorkflowsListProps) {\n const [searchValue, setSearchValue] = React.useState(filter?.nameSearch || '')\n const [openMenuId, setOpenMenuId] = React.useState<string | null>(null)\n\n const handleSearch = (value: string) => {\n setSearchValue(value)\n onFilterChange?.({ ...filter, nameSearch: value || undefined })\n }\n\n const handleStatusFilter = (e: React.ChangeEvent<HTMLSelectElement>) => {\n const value = e.target.value\n if (value === 'all') {\n onFilterChange?.({ ...filter, status: undefined })\n } else {\n onFilterChange?.({ ...filter, status: [value as WorkflowStatus] })\n }\n }\n\n // Show empty state\n if (!loading && workflows.length === 0) {\n return (\n <div className={cn('flex flex-col', className)}>\n {/* Toolbar */}\n <div className=\"flex items-center justify-between gap-4 border-b border-border p-4\">\n <div className=\"flex items-center gap-2\">\n {/* Search */}\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n <input\n type=\"text\"\n placeholder=\"Search workflows...\"\n value={searchValue}\n onChange={(e) => handleSearch(e.target.value)}\n className={cn(\n 'h-9 w-64 rounded-md border border-input bg-background pl-9 pr-4 text-sm',\n 'placeholder:text-muted-foreground',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring'\n )}\n />\n </div>\n\n {/* Status filter */}\n <select\n data-testid=\"status-filter\"\n value={filter?.status?.[0] || 'all'}\n onChange={handleStatusFilter}\n className={cn(\n 'h-9 rounded-md border border-input bg-background px-3 text-sm',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring'\n )}\n >\n <option value=\"all\">All Statuses</option>\n <option value=\"active\">Active</option>\n <option value=\"draft\">Draft</option>\n <option value=\"deprecated\">Deprecated</option>\n <option value=\"archived\">Archived</option>\n </select>\n </div>\n\n {/* Create button */}\n {onCreate && (\n <button\n data-testid=\"create-workflow-btn\"\n onClick={onCreate}\n className={cn(\n 'flex h-9 items-center gap-2 rounded-md bg-primary px-4 text-sm font-medium text-primary-foreground',\n 'hover:bg-primary/90'\n )}\n >\n <Plus className=\"h-4 w-4\" />\n Create Workflow\n </button>\n )}\n </div>\n\n {/* Empty state */}\n <div\n data-testid=\"workflows-empty-state\"\n className=\"flex flex-1 flex-col items-center justify-center p-12 text-center\"\n >\n <div className=\"rounded-full bg-muted p-4 mb-4\">\n <Play className=\"h-8 w-8 text-muted-foreground\" />\n </div>\n <h3 className=\"text-lg font-semibold mb-2\">No workflows found</h3>\n <p className=\"text-muted-foreground mb-4 max-w-sm\">\n Workflows orchestrate multi-step business processes. Create your first workflow to get started.\n </p>\n {onCreate && (\n <button\n onClick={onCreate}\n className={cn(\n 'flex items-center gap-2 rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground',\n 'hover:bg-primary/90'\n )}\n >\n <Plus className=\"h-4 w-4\" />\n Create Workflow\n </button>\n )}\n </div>\n </div>\n )\n }\n\n return (\n <div className={cn('flex flex-col', className)}>\n {/* Toolbar */}\n <div className=\"flex items-center justify-between gap-4 border-b border-border p-4\">\n <div className=\"flex items-center gap-2\">\n {/* Search */}\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n <input\n type=\"text\"\n placeholder=\"Search workflows...\"\n value={searchValue}\n onChange={(e) => handleSearch(e.target.value)}\n className={cn(\n 'h-9 w-64 rounded-md border border-input bg-background pl-9 pr-4 text-sm',\n 'placeholder:text-muted-foreground',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring'\n )}\n />\n </div>\n\n {/* Status filter */}\n <select\n data-testid=\"status-filter\"\n value={filter?.status?.[0] || 'all'}\n onChange={handleStatusFilter}\n className={cn(\n 'h-9 rounded-md border border-input bg-background px-3 text-sm',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring'\n )}\n >\n <option value=\"all\">All Statuses</option>\n <option value=\"active\">Active</option>\n <option value=\"draft\">Draft</option>\n <option value=\"deprecated\">Deprecated</option>\n <option value=\"archived\">Archived</option>\n </select>\n </div>\n\n {/* Create button */}\n {onCreate && (\n <button\n data-testid=\"create-workflow-btn\"\n onClick={onCreate}\n className={cn(\n 'flex h-9 items-center gap-2 rounded-md bg-primary px-4 text-sm font-medium text-primary-foreground',\n 'hover:bg-primary/90'\n )}\n >\n <Plus className=\"h-4 w-4\" />\n Create Workflow\n </button>\n )}\n </div>\n\n {/* Table */}\n <div className=\"flex-1 overflow-auto\">\n <table data-testid=\"workflows-table\" className=\"w-full\">\n <thead className=\"sticky top-0 bg-muted/50\">\n <tr>\n <th className=\"p-4 text-left text-sm font-medium text-muted-foreground\">Name</th>\n <th className=\"p-4 text-left text-sm font-medium text-muted-foreground\">Status</th>\n <th className=\"p-4 text-left text-sm font-medium text-muted-foreground\">Trigger</th>\n <th className=\"p-4 text-left text-sm font-medium text-muted-foreground\">Last Execution</th>\n <th className=\"p-4 text-left text-sm font-medium text-muted-foreground\">Executions</th>\n <th className=\"w-24 p-4\" />\n </tr>\n </thead>\n <tbody>\n {loading ? (\n // Loading skeleton\n Array.from({ length: 5 }).map((_, i) => (\n <tr key={i} className=\"animate-pulse border-b border-border\">\n <td className=\"p-4\">\n <div className=\"h-4 w-48 rounded bg-muted mb-1\" />\n <div className=\"h-3 w-64 rounded bg-muted\" />\n </td>\n <td className=\"p-4\">\n <div className=\"h-6 w-16 rounded bg-muted\" />\n </td>\n <td className=\"p-4\">\n <div className=\"h-4 w-20 rounded bg-muted\" />\n </td>\n <td className=\"p-4\">\n <div className=\"h-4 w-24 rounded bg-muted\" />\n </td>\n <td className=\"p-4\">\n <div className=\"h-4 w-12 rounded bg-muted\" />\n </td>\n <td className=\"p-4\" />\n </tr>\n ))\n ) : (\n workflows.map((workflow) => (\n <tr\n key={workflow.id}\n data-testid=\"workflow-row\"\n className=\"cursor-pointer border-b border-border hover:bg-muted/50\"\n onClick={() => onWorkflowClick?.(workflow)}\n >\n <td className=\"p-4\">\n <div data-testid=\"workflow-name\" className=\"font-medium\">\n {workflow.name}\n </div>\n <div data-testid=\"workflow-description\" className=\"text-sm text-muted-foreground\">\n {workflow.description}\n </div>\n </td>\n <td className=\"p-4\">\n <span\n data-testid=\"workflow-status-badge\"\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium',\n STATUS_COLORS[workflow.status]\n )}\n >\n {workflow.status}\n </span>\n </td>\n <td className=\"p-4\">\n <span className=\"rounded-full bg-muted px-2 py-1 text-xs font-medium\">\n {workflow.trigger.type}\n </span>\n </td>\n <td className=\"p-4\">\n <span\n data-testid=\"workflow-last-execution\"\n className=\"text-sm text-muted-foreground\"\n >\n {workflow.updatedAt ? formatRelativeTime(workflow.updatedAt) : 'Never'}\n </span>\n </td>\n <td className=\"p-4\">\n <span\n data-testid=\"workflow-execution-count\"\n className=\"text-sm\"\n >\n {formatNumber(0)}\n </span>\n </td>\n <td className=\"p-4\" onClick={(e) => e.stopPropagation()}>\n <div className=\"flex items-center gap-2\">\n {workflow.status === 'active' && onTriggerWorkflow && (\n <button\n data-testid=\"trigger-workflow-btn\"\n onClick={() => onTriggerWorkflow(workflow)}\n className={cn(\n 'flex h-8 items-center gap-1 rounded-md bg-primary px-3 text-xs font-medium text-primary-foreground',\n 'hover:bg-primary/90'\n )}\n >\n <Play className=\"h-3 w-3\" />\n Trigger\n </button>\n )}\n <div className=\"relative\">\n <button\n onClick={() => setOpenMenuId(openMenuId === workflow.id ? null : workflow.id)}\n className=\"flex h-8 w-8 items-center justify-center rounded-md hover:bg-accent\"\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n </button>\n {openMenuId === workflow.id && (\n <>\n <div\n className=\"fixed inset-0 z-40\"\n onClick={() => setOpenMenuId(null)}\n />\n <div className=\"absolute right-0 top-full z-50 mt-1 w-36 rounded-md border border-border bg-popover py-1 shadow-lg\">\n <button\n onClick={() => {\n onWorkflowClick?.(workflow)\n setOpenMenuId(null)\n }}\n className=\"flex w-full items-center gap-2 px-3 py-2 text-sm hover:bg-accent\"\n >\n <Eye className=\"h-4 w-4\" /> View\n </button>\n </div>\n </>\n )}\n </div>\n </div>\n </td>\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n\n {/* Footer with count */}\n <div className=\"flex items-center justify-between border-t border-border p-4\">\n <div className=\"text-sm text-muted-foreground\">\n Showing {workflows.length} of {total} workflows\n </div>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport {\n Clock,\n CheckCircle2,\n XCircle,\n Loader2,\n StopCircle,\n ChevronRight,\n ChevronDown,\n AlertCircle,\n RefreshCw,\n} from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport { formatDateTime, formatDuration, formatRelativeTime } from '../../lib/utils'\nimport type {\n Workflow,\n WorkflowExecution,\n StepExecution,\n ExecutionStatus,\n} from '../../types'\n\n/**\n * Props for WorkflowExecutionView\n */\nexport interface WorkflowExecutionViewProps {\n /** The workflow being executed */\n workflow: Workflow\n /** Current execution (if viewing a specific one) */\n execution?: WorkflowExecution | null\n /** List of executions for the workflow */\n executions?: WorkflowExecution[]\n /** Loading state */\n loading?: boolean\n /** Selected tab */\n activeTab?: 'details' | 'executions'\n /** Callback when tab changes */\n onTabChange?: (tab: 'details' | 'executions') => void\n /** Callback when execution is clicked */\n onExecutionClick?: (execution: WorkflowExecution) => void\n /** Callback to cancel execution */\n onCancelExecution?: (executionId: string) => void\n /** Callback to retry execution */\n onRetryExecution?: (execution: WorkflowExecution) => void\n /** Additional class name */\n className?: string\n}\n\n/** Status icon mapping */\nconst STATUS_ICONS: Record<ExecutionStatus, React.ElementType> = {\n pending: Clock,\n running: Loader2,\n completed: CheckCircle2,\n failed: XCircle,\n cancelled: StopCircle,\n compensating: RefreshCw,\n compensated: CheckCircle2,\n}\n\n/** Status color mapping */\nconst STATUS_COLORS: Record<ExecutionStatus, string> = {\n pending: 'text-yellow-500',\n running: 'text-blue-500',\n completed: 'text-green-500',\n failed: 'text-red-500',\n cancelled: 'text-gray-500',\n compensating: 'text-orange-500',\n compensated: 'text-green-500',\n}\n\n/** Status background color mapping */\nconst STATUS_BG_COLORS: Record<ExecutionStatus, string> = {\n pending: 'bg-yellow-500/10 text-yellow-600 dark:text-yellow-400',\n running: 'bg-blue-500/10 text-blue-600 dark:text-blue-400',\n completed: 'bg-green-500/10 text-green-600 dark:text-green-400',\n failed: 'bg-red-500/10 text-red-600 dark:text-red-400',\n cancelled: 'bg-muted text-muted-foreground',\n compensating: 'bg-orange-500/10 text-orange-600 dark:text-orange-400',\n compensated: 'bg-green-500/10 text-green-600 dark:text-green-400',\n}\n\n/**\n * StepItem component - renders a single step in the execution\n */\nfunction StepItem({\n step,\n expanded,\n onToggle,\n}: {\n step: StepExecution\n expanded: boolean\n onToggle: () => void\n}) {\n const StatusIcon = STATUS_ICONS[step.status]\n const isRunning = step.status === 'running'\n\n return (\n <div\n data-testid=\"step-item\"\n data-status={step.status}\n className=\"border border-border rounded-lg overflow-hidden\"\n >\n {/* Step header */}\n <button\n onClick={onToggle}\n className=\"flex w-full items-center gap-3 p-4 text-left hover:bg-muted/50\"\n >\n <StatusIcon\n className={cn(\n 'h-5 w-5',\n STATUS_COLORS[step.status],\n isRunning && 'animate-spin'\n )}\n />\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium truncate\">{step.stepName}</div>\n <div className=\"text-sm text-muted-foreground\">\n Step ID: {step.stepId}\n </div>\n </div>\n <div data-testid=\"step-status\" className=\"text-sm text-muted-foreground\">\n {step.status}\n </div>\n {step.durationMs !== undefined && (\n <div data-testid=\"step-duration\" className=\"text-sm text-muted-foreground\">\n {formatDuration(step.durationMs)}\n </div>\n )}\n {expanded ? (\n <ChevronDown className=\"h-4 w-4 text-muted-foreground\" />\n ) : (\n <ChevronRight className=\"h-4 w-4 text-muted-foreground\" />\n )}\n </button>\n\n {/* Step details */}\n {expanded && (\n <div data-testid=\"step-details\" className=\"border-t border-border p-4 bg-muted/30\">\n {step.error && (\n <div\n data-testid=\"step-error\"\n className=\"mb-4 p-3 bg-red-500/10 border border-red-500/20 rounded-md\"\n >\n <div className=\"flex items-center gap-2 text-red-600 dark:text-red-400 font-medium mb-1\">\n <AlertCircle className=\"h-4 w-4\" />\n Error\n </div>\n <div className=\"text-sm text-red-600/80 dark:text-red-400/80\">\n {step.error.message}\n </div>\n </div>\n )}\n\n <div className=\"grid gap-4 md:grid-cols-2\">\n {/* Input */}\n <div>\n <div className=\"text-sm font-medium mb-2\">Input</div>\n <pre\n data-testid=\"step-input\"\n className=\"text-xs bg-background border border-border rounded-md p-3 overflow-auto max-h-48\"\n >\n {JSON.stringify(step.input, null, 2)}\n </pre>\n </div>\n\n {/* Output */}\n <div>\n <div className=\"text-sm font-medium mb-2\">Output</div>\n <pre\n data-testid=\"step-output\"\n className=\"text-xs bg-background border border-border rounded-md p-3 overflow-auto max-h-48\"\n >\n {step.output ? JSON.stringify(step.output, null, 2) : 'No output yet'}\n </pre>\n </div>\n </div>\n\n {/* Timing info */}\n <div className=\"mt-4 flex gap-6 text-sm text-muted-foreground\">\n <div>Started: {formatDateTime(step.startedAt)}</div>\n {step.completedAt && <div>Completed: {formatDateTime(step.completedAt)}</div>}\n {step.retryCount > 0 && <div>Retries: {step.retryCount}</div>}\n </div>\n </div>\n )}\n </div>\n )\n}\n\n/**\n * WorkflowExecutionView - View for workflow executions\n */\nexport function WorkflowExecutionView({\n workflow,\n execution,\n executions = [],\n loading = false,\n activeTab = 'details',\n onTabChange,\n onExecutionClick,\n onCancelExecution,\n onRetryExecution,\n className,\n}: WorkflowExecutionViewProps) {\n const [expandedSteps, setExpandedSteps] = React.useState<Set<string>>(new Set())\n const [showCancelConfirm, setShowCancelConfirm] = React.useState(false)\n\n const toggleStep = (stepId: string) => {\n const newExpanded = new Set(expandedSteps)\n if (newExpanded.has(stepId)) {\n newExpanded.delete(stepId)\n } else {\n newExpanded.add(stepId)\n }\n setExpandedSteps(newExpanded)\n }\n\n const handleCancel = () => {\n if (execution) {\n onCancelExecution?.(execution.id)\n setShowCancelConfirm(false)\n }\n }\n\n const canCancel = execution && (execution.status === 'running' || execution.status === 'pending')\n const canRetry = execution && execution.status === 'failed'\n\n return (\n <div className={cn('flex flex-col', className)}>\n {/* Header with execution status */}\n {execution && (\n <div className=\"border-b border-border p-4\">\n <div className=\"flex items-center justify-between mb-4\">\n <div>\n <h2 className=\"text-lg font-semibold\">{workflow.name}</h2>\n <div className=\"text-sm text-muted-foreground\">\n Execution: {execution.id}\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <span\n data-testid=\"execution-status\"\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full px-3 py-1 text-sm font-medium',\n STATUS_BG_COLORS[execution.status]\n )}\n >\n {React.createElement(STATUS_ICONS[execution.status], {\n className: cn(\n 'h-4 w-4',\n execution.status === 'running' && 'animate-spin'\n ),\n })}\n {execution.status}\n </span>\n\n {canCancel && onCancelExecution && (\n <button\n data-testid=\"cancel-execution-btn\"\n onClick={() => setShowCancelConfirm(true)}\n className={cn(\n 'flex items-center gap-2 rounded-md border border-destructive px-3 py-1 text-sm font-medium text-destructive',\n 'hover:bg-destructive/10'\n )}\n >\n <StopCircle className=\"h-4 w-4\" />\n Cancel\n </button>\n )}\n\n {canRetry && onRetryExecution && (\n <button\n data-testid=\"retry-execution-btn\"\n onClick={() => onRetryExecution(execution)}\n className={cn(\n 'flex items-center gap-2 rounded-md bg-primary px-3 py-1 text-sm font-medium text-primary-foreground',\n 'hover:bg-primary/90'\n )}\n >\n <RefreshCw className=\"h-4 w-4\" />\n Retry\n </button>\n )}\n </div>\n </div>\n\n {/* Timing info */}\n <div className=\"flex flex-wrap gap-6 text-sm text-muted-foreground\">\n <div data-testid=\"execution-start-time\">\n Started: {formatDateTime(execution.startedAt)}\n </div>\n {execution.completedAt && (\n <div data-testid=\"execution-end-time\">\n Completed: {formatDateTime(execution.completedAt)}\n </div>\n )}\n {execution.durationMs !== undefined && (\n <div>Duration: {formatDuration(execution.durationMs)}</div>\n )}\n </div>\n\n {/* Error display */}\n {execution.error && (\n <div\n data-testid=\"execution-error\"\n className=\"mt-4 p-3 bg-red-500/10 border border-red-500/20 rounded-md\"\n >\n <div className=\"flex items-center gap-2 text-red-600 dark:text-red-400 font-medium mb-1\">\n <AlertCircle className=\"h-4 w-4\" />\n Execution Error\n </div>\n <div className=\"text-sm text-red-600/80 dark:text-red-400/80\">\n {execution.error.message}\n </div>\n </div>\n )}\n </div>\n )}\n\n {/* Tabs */}\n <div className=\"border-b border-border\">\n <div className=\"flex gap-4 px-4\">\n <button\n onClick={() => onTabChange?.('details')}\n className={cn(\n 'py-3 text-sm font-medium border-b-2 -mb-px',\n activeTab === 'details'\n ? 'border-primary text-foreground'\n : 'border-transparent text-muted-foreground hover:text-foreground'\n )}\n >\n Details\n </button>\n <button\n data-testid=\"executions-tab\"\n onClick={() => onTabChange?.('executions')}\n className={cn(\n 'py-3 text-sm font-medium border-b-2 -mb-px',\n activeTab === 'executions'\n ? 'border-primary text-foreground'\n : 'border-transparent text-muted-foreground hover:text-foreground'\n )}\n >\n Executions\n </button>\n </div>\n </div>\n\n {/* Tab content */}\n <div className=\"flex-1 overflow-auto p-4\">\n {activeTab === 'details' && execution && (\n <>\n {/* Timeline visualization */}\n <div data-testid=\"execution-timeline\" className=\"mb-6\">\n <div className=\"text-sm font-medium mb-3\">Timeline</div>\n <div className=\"flex items-center gap-2 overflow-x-auto pb-2\">\n {execution.steps.map((step, index) => {\n const StatusIcon = STATUS_ICONS[step.status]\n const widthPercent = execution.durationMs\n ? Math.max(10, ((step.durationMs || 0) / execution.durationMs) * 100)\n : 100 / execution.steps.length\n return (\n <React.Fragment key={step.stepId}>\n <div\n className={cn(\n 'flex items-center gap-2 px-3 py-2 rounded-md border',\n step.status === 'completed' && 'border-green-500/30 bg-green-500/5',\n step.status === 'running' && 'border-blue-500/30 bg-blue-500/5',\n step.status === 'failed' && 'border-red-500/30 bg-red-500/5',\n step.status === 'pending' && 'border-border bg-muted/30'\n )}\n style={{ minWidth: `${Math.max(widthPercent, 15)}%` }}\n >\n <StatusIcon\n className={cn(\n 'h-4 w-4 flex-shrink-0',\n STATUS_COLORS[step.status],\n step.status === 'running' && 'animate-spin'\n )}\n />\n <span className=\"text-xs truncate\">{step.stepName}</span>\n </div>\n {index < execution.steps.length - 1 && (\n <ChevronRight className=\"h-4 w-4 flex-shrink-0 text-muted-foreground\" />\n )}\n </React.Fragment>\n )\n })}\n </div>\n </div>\n\n {/* Step list */}\n <div data-testid=\"step-list\" className=\"space-y-3\">\n <div className=\"text-sm font-medium\">Steps ({execution.steps.length})</div>\n {execution.steps.map((step) => (\n <StepItem\n key={step.stepId}\n step={step}\n expanded={expandedSteps.has(step.stepId)}\n onToggle={() => toggleStep(step.stepId)}\n />\n ))}\n </div>\n </>\n )}\n\n {activeTab === 'executions' && (\n <>\n {loading ? (\n <div className=\"space-y-3\">\n {Array.from({ length: 5 }).map((_, i) => (\n <div key={i} className=\"animate-pulse p-4 border border-border rounded-lg\">\n <div className=\"flex items-center gap-4\">\n <div className=\"h-6 w-20 rounded bg-muted\" />\n <div className=\"h-4 w-32 rounded bg-muted\" />\n <div className=\"h-4 w-24 rounded bg-muted ml-auto\" />\n </div>\n </div>\n ))}\n </div>\n ) : executions.length === 0 ? (\n <div\n data-testid=\"executions-empty-state\"\n className=\"flex flex-col items-center justify-center py-12 text-center\"\n >\n <Clock className=\"h-12 w-12 text-muted-foreground mb-4\" />\n <h3 className=\"text-lg font-semibold mb-2\">No executions yet</h3>\n <p className=\"text-muted-foreground\">\n This workflow has not been executed. Trigger it to see execution history.\n </p>\n </div>\n ) : (\n <div className=\"space-y-3\">\n {executions.map((exec) => {\n const StatusIcon = STATUS_ICONS[exec.status]\n return (\n <div\n key={exec.id}\n data-testid=\"execution-row\"\n onClick={() => onExecutionClick?.(exec)}\n className=\"flex items-center gap-4 p-4 border border-border rounded-lg cursor-pointer hover:bg-muted/50\"\n >\n <span\n data-testid=\"execution-status\"\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-medium',\n STATUS_BG_COLORS[exec.status]\n )}\n >\n <StatusIcon\n className={cn(\n 'h-3.5 w-3.5',\n exec.status === 'running' && 'animate-spin'\n )}\n />\n {exec.status}\n </span>\n <div className=\"flex-1 min-w-0\">\n <div className=\"text-sm font-medium truncate\">{exec.id}</div>\n <div className=\"text-xs text-muted-foreground\">\n Triggered by: {exec.trigger.source}\n </div>\n </div>\n <div\n data-testid=\"execution-timestamp\"\n className=\"text-sm text-muted-foreground\"\n >\n {formatRelativeTime(exec.startedAt)}\n </div>\n {exec.durationMs !== undefined && (\n <div\n data-testid=\"execution-duration\"\n className=\"text-sm text-muted-foreground\"\n >\n {formatDuration(exec.durationMs)}\n </div>\n )}\n <ChevronRight className=\"h-4 w-4 text-muted-foreground\" />\n </div>\n )\n })}\n </div>\n )}\n </>\n )}\n </div>\n\n {/* Cancel confirmation dialog */}\n {showCancelConfirm && (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center\">\n <div\n className=\"absolute inset-0 bg-background/80 backdrop-blur-sm\"\n onClick={() => setShowCancelConfirm(false)}\n />\n <div\n data-testid=\"cancel-confirm-dialog\"\n className=\"relative z-50 w-full max-w-md rounded-lg border border-border bg-background p-6 shadow-lg\"\n >\n <h3 className=\"text-lg font-semibold mb-2\">Cancel Execution</h3>\n <p className=\"text-muted-foreground mb-4\">\n Are you sure you want to cancel this workflow execution? This action cannot be undone.\n </p>\n <div className=\"flex justify-end gap-2\">\n <button\n data-testid=\"dismiss-cancel-btn\"\n onClick={() => setShowCancelConfirm(false)}\n className=\"px-4 py-2 text-sm font-medium rounded-md hover:bg-accent\"\n >\n Keep Running\n </button>\n <button\n data-testid=\"confirm-cancel-btn\"\n onClick={handleCancel}\n className=\"px-4 py-2 text-sm font-medium rounded-md bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n >\n Cancel Execution\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { X, Play, Loader2 } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport type { Workflow } from '../../types'\n\n/**\n * Props for TriggerWorkflowDialog\n */\nexport interface TriggerWorkflowDialogProps {\n /** The workflow to trigger */\n workflow: Workflow\n /** Whether the dialog is open */\n open: boolean\n /** Loading state (while triggering) */\n loading?: boolean\n /** Callback to close the dialog */\n onClose: () => void\n /** Callback to trigger the workflow */\n onTrigger: (input?: Record<string, unknown>) => void\n /** Additional class name */\n className?: string\n}\n\n/**\n * TriggerWorkflowDialog - Dialog for manually triggering a workflow\n */\nexport function TriggerWorkflowDialog({\n workflow,\n open,\n loading = false,\n onClose,\n onTrigger,\n className,\n}: TriggerWorkflowDialogProps) {\n const [inputValue, setInputValue] = React.useState('{}')\n const [parseError, setParseError] = React.useState<string | null>(null)\n\n // Reset state when dialog opens\n React.useEffect(() => {\n if (open) {\n setInputValue('{}')\n setParseError(null)\n }\n }, [open])\n\n const handleInputChange = (value: string) => {\n setInputValue(value)\n // Validate JSON\n try {\n JSON.parse(value)\n setParseError(null)\n } catch {\n setParseError('Invalid JSON format')\n }\n }\n\n const handleTrigger = () => {\n try {\n const parsed = JSON.parse(inputValue)\n onTrigger(parsed)\n } catch {\n setParseError('Invalid JSON format')\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n // Allow Cmd/Ctrl + Enter to submit\n if ((e.metaKey || e.ctrlKey) && e.key === 'Enter' && !parseError && !loading) {\n handleTrigger()\n }\n // Close on Escape\n if (e.key === 'Escape') {\n onClose()\n }\n }\n\n if (!open) return null\n\n // Check if workflow has input schema (only manual triggers have inputSchema)\n const manualTrigger = workflow.trigger.type === 'manual' ? workflow.trigger : null\n const hasInputSchema = manualTrigger && 'inputSchema' in manualTrigger && manualTrigger.inputSchema\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center\">\n {/* Backdrop */}\n <div\n className=\"absolute inset-0 bg-background/80 backdrop-blur-sm\"\n onClick={onClose}\n />\n\n {/* Dialog */}\n <div\n data-testid=\"trigger-dialog\"\n className={cn(\n 'relative z-50 w-full max-w-lg rounded-lg border border-border bg-background shadow-lg',\n className\n )}\n onKeyDown={handleKeyDown}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between border-b border-border px-6 py-4\">\n <div>\n <h2 className=\"text-lg font-semibold\">Trigger Workflow</h2>\n <p className=\"text-sm text-muted-foreground\">{workflow.name}</p>\n </div>\n <button\n onClick={onClose}\n className=\"flex h-8 w-8 items-center justify-center rounded-md hover:bg-accent\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n\n {/* Body */}\n <div className=\"p-6\">\n <div className=\"mb-4\">\n <p className=\"text-sm text-muted-foreground mb-4\">\n {workflow.description || 'Trigger this workflow manually with optional input parameters.'}\n </p>\n </div>\n\n {/* Input schema info */}\n {hasInputSchema && manualTrigger && (\n <div className=\"mb-4 p-3 bg-muted/50 rounded-md\">\n <div className=\"text-sm font-medium mb-1\">Expected Input Schema</div>\n <pre className=\"text-xs text-muted-foreground overflow-auto\">\n {JSON.stringify(manualTrigger.inputSchema, null, 2)}\n </pre>\n </div>\n )}\n\n {/* Input JSON */}\n <div>\n <label htmlFor=\"trigger-input\" className=\"text-sm font-medium mb-2 block\">\n Input Parameters (JSON)\n </label>\n <textarea\n id=\"trigger-input\"\n data-testid=\"trigger-input\"\n value={inputValue}\n onChange={(e) => handleInputChange(e.target.value)}\n placeholder='{\"key\": \"value\"}'\n rows={6}\n className={cn(\n 'w-full rounded-md border bg-background px-3 py-2 font-mono text-sm',\n 'placeholder:text-muted-foreground',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n parseError ? 'border-destructive' : 'border-input'\n )}\n />\n {parseError && (\n <p className=\"mt-1 text-sm text-destructive\">{parseError}</p>\n )}\n <p className=\"mt-1 text-xs text-muted-foreground\">\n Press Cmd/Ctrl + Enter to trigger\n </p>\n </div>\n </div>\n\n {/* Footer */}\n <div className=\"flex items-center justify-end gap-2 border-t border-border px-6 py-4\">\n <button\n data-testid=\"trigger-cancel-btn\"\n onClick={onClose}\n disabled={loading}\n className={cn(\n 'px-4 py-2 text-sm font-medium rounded-md hover:bg-accent',\n 'disabled:opacity-50 disabled:cursor-not-allowed'\n )}\n >\n Cancel\n </button>\n <button\n data-testid=\"trigger-confirm-btn\"\n onClick={handleTrigger}\n disabled={loading || !!parseError}\n className={cn(\n 'flex items-center gap-2 px-4 py-2 text-sm font-medium rounded-md',\n 'bg-primary text-primary-foreground hover:bg-primary/90',\n 'disabled:opacity-50 disabled:cursor-not-allowed'\n )}\n >\n {loading ? (\n <>\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n Triggering...\n </>\n ) : (\n <>\n <Play className=\"h-4 w-4\" />\n Trigger Workflow\n </>\n )}\n </button>\n </div>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport {\n Search,\n Plus,\n Bot,\n Activity,\n Clock,\n Zap,\n TrendingUp,\n} from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport { formatRelativeTime, formatNumber, formatDuration } from '../../lib/utils'\nimport type { Agent, AgentFilter, AgentStatus, AgentMetrics } from '../../types'\n\n/**\n * Props for AgentsGrid\n */\nexport interface AgentsGridProps {\n /** Agents to display */\n agents: Agent[]\n /** Total count */\n total: number\n /** Loading state */\n loading?: boolean\n /** Current filter */\n filter?: AgentFilter\n /** Callback when filter changes */\n onFilterChange?: (filter: AgentFilter) => void\n /** Callback when agent card is clicked */\n onAgentClick?: (agent: Agent) => void\n /** Callback to create new agent */\n onCreate?: () => void\n /** Additional class name */\n className?: string\n}\n\n/** Status color mapping */\nconst STATUS_COLORS: Record<AgentStatus, string> = {\n active: 'bg-green-500',\n draft: 'bg-yellow-500',\n paused: 'bg-orange-500',\n deprecated: 'bg-gray-500',\n archived: 'bg-gray-400',\n}\n\n/** Status text color mapping */\nconst STATUS_TEXT_COLORS: Record<AgentStatus, string> = {\n active: 'text-green-600 dark:text-green-400',\n draft: 'text-yellow-600 dark:text-yellow-400',\n paused: 'text-orange-600 dark:text-orange-400',\n deprecated: 'text-gray-600 dark:text-gray-400',\n archived: 'text-gray-500',\n}\n\n/**\n * AgentCard component - renders a single agent card\n */\nfunction AgentCard({\n agent,\n onClick,\n}: {\n agent: Agent\n onClick?: () => void\n}) {\n const metrics = agent.metrics\n\n return (\n <div\n data-testid=\"agent-card\"\n onClick={onClick}\n className={cn(\n 'flex flex-col rounded-lg border border-border bg-card p-6 cursor-pointer',\n 'transition-colors hover:bg-accent/50'\n )}\n >\n {/* Header */}\n <div className=\"flex items-start justify-between mb-4\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-primary/10\">\n <Bot className=\"h-5 w-5 text-primary\" />\n </div>\n <div>\n <h3 data-testid=\"agent-name\" className=\"font-semibold\">\n {agent.name}\n </h3>\n <div\n data-testid=\"agent-model\"\n className=\"text-xs text-muted-foreground\"\n >\n {agent.model}\n </div>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <div\n className={cn('h-2 w-2 rounded-full', STATUS_COLORS[agent.status])}\n />\n <span\n data-testid=\"agent-status\"\n className={cn('text-xs font-medium', STATUS_TEXT_COLORS[agent.status])}\n >\n {agent.status}\n </span>\n </div>\n </div>\n\n {/* Description */}\n <p\n data-testid=\"agent-description\"\n className=\"text-sm text-muted-foreground mb-4 line-clamp-2\"\n >\n {agent.description}\n </p>\n\n {/* Metrics */}\n <div\n data-testid=\"agent-metrics\"\n className=\"grid grid-cols-2 gap-4 mb-4\"\n >\n <div className=\"flex items-center gap-2\">\n <Activity className=\"h-4 w-4 text-muted-foreground\" />\n <div>\n <div\n data-testid=\"agent-execution-count\"\n className=\"text-sm font-medium\"\n >\n {formatNumber(metrics?.totalExecutions || 0)}\n </div>\n <div className=\"text-xs text-muted-foreground\">Executions</div>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <TrendingUp className=\"h-4 w-4 text-muted-foreground\" />\n <div>\n <div\n data-testid=\"agent-success-rate\"\n className=\"text-sm font-medium\"\n >\n {metrics ? `${Math.round(metrics.successRate * 100)}%` : '0%'}\n </div>\n <div className=\"text-xs text-muted-foreground\">Success Rate</div>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <Clock className=\"h-4 w-4 text-muted-foreground\" />\n <div>\n <div\n data-testid=\"agent-response-time\"\n className=\"text-sm font-medium\"\n >\n {metrics ? formatDuration(metrics.avgDurationMs) : '0ms'}\n </div>\n <div className=\"text-xs text-muted-foreground\">Avg Response</div>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <Zap className=\"h-4 w-4 text-muted-foreground\" />\n <div>\n <div className=\"text-sm font-medium\">\n {formatNumber(metrics?.avgTokenUsage || 0)}\n </div>\n <div className=\"text-xs text-muted-foreground\">Avg Tokens</div>\n </div>\n </div>\n </div>\n\n {/* Footer */}\n <div className=\"mt-auto pt-4 border-t border-border flex items-center justify-between text-xs text-muted-foreground\">\n <span data-testid=\"agent-last-active\">\n {metrics?.lastExecutedAt\n ? `Active ${formatRelativeTime(metrics.lastExecutedAt)}`\n : 'Never executed'}\n </span>\n <span>{agent.type.roleCategory}</span>\n </div>\n </div>\n )\n}\n\n/**\n * AgentsGrid - Grid view for Agents\n */\nexport function AgentsGrid({\n agents,\n total,\n loading = false,\n filter,\n onFilterChange,\n onAgentClick,\n onCreate,\n className,\n}: AgentsGridProps) {\n const [searchValue, setSearchValue] = React.useState(filter?.nameSearch || '')\n\n const handleSearch = (value: string) => {\n setSearchValue(value)\n onFilterChange?.({ ...filter, nameSearch: value || undefined })\n }\n\n const handleStatusFilter = (e: React.ChangeEvent<HTMLSelectElement>) => {\n const value = e.target.value\n if (value === 'all') {\n onFilterChange?.({ ...filter, status: undefined })\n } else {\n onFilterChange?.({ ...filter, status: [value as AgentStatus] })\n }\n }\n\n // Show empty state\n if (!loading && agents.length === 0) {\n return (\n <div className={cn('flex flex-col', className)}>\n {/* Toolbar */}\n <div className=\"flex items-center justify-between gap-4 border-b border-border p-4\">\n <div className=\"flex items-center gap-2\">\n {/* Search */}\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n <input\n data-testid=\"agents-search\"\n type=\"text\"\n placeholder=\"Search agents...\"\n value={searchValue}\n onChange={(e) => handleSearch(e.target.value)}\n className={cn(\n 'h-9 w-64 rounded-md border border-input bg-background pl-9 pr-4 text-sm',\n 'placeholder:text-muted-foreground',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring'\n )}\n />\n </div>\n\n {/* Status filter */}\n <select\n data-testid=\"agent-status-filter\"\n value={filter?.status?.[0] || 'all'}\n onChange={handleStatusFilter}\n className={cn(\n 'h-9 rounded-md border border-input bg-background px-3 text-sm',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring'\n )}\n >\n <option value=\"all\">All Statuses</option>\n <option value=\"active\">Active</option>\n <option value=\"draft\">Draft</option>\n <option value=\"paused\">Paused</option>\n <option value=\"deprecated\">Deprecated</option>\n <option value=\"archived\">Archived</option>\n </select>\n </div>\n\n {/* Create button */}\n {onCreate && (\n <button\n data-testid=\"create-agent-btn\"\n onClick={onCreate}\n className={cn(\n 'flex h-9 items-center gap-2 rounded-md bg-primary px-4 text-sm font-medium text-primary-foreground',\n 'hover:bg-primary/90'\n )}\n >\n <Plus className=\"h-4 w-4\" />\n Create Agent\n </button>\n )}\n </div>\n\n {/* Empty state */}\n <div\n data-testid=\"agents-empty-state\"\n className=\"flex flex-1 flex-col items-center justify-center p-12 text-center\"\n >\n <div className=\"rounded-full bg-muted p-4 mb-4\">\n <Bot className=\"h-8 w-8 text-muted-foreground\" />\n </div>\n <h3 className=\"text-lg font-semibold mb-2\">No agents found</h3>\n <p className=\"text-muted-foreground mb-4 max-w-sm\">\n Agents are autonomous AI workers that can perform specialized tasks.\n Create your first agent to get started.\n </p>\n {onCreate && (\n <button\n onClick={onCreate}\n className={cn(\n 'flex items-center gap-2 rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground',\n 'hover:bg-primary/90'\n )}\n >\n <Plus className=\"h-4 w-4\" />\n Create Agent\n </button>\n )}\n </div>\n </div>\n )\n }\n\n return (\n <div className={cn('flex flex-col', className)}>\n {/* Toolbar */}\n <div className=\"flex items-center justify-between gap-4 border-b border-border p-4\">\n <div className=\"flex items-center gap-2\">\n {/* Search */}\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n <input\n data-testid=\"agents-search\"\n type=\"text\"\n placeholder=\"Search agents...\"\n value={searchValue}\n onChange={(e) => handleSearch(e.target.value)}\n className={cn(\n 'h-9 w-64 rounded-md border border-input bg-background pl-9 pr-4 text-sm',\n 'placeholder:text-muted-foreground',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring'\n )}\n />\n </div>\n\n {/* Status filter */}\n <select\n data-testid=\"agent-status-filter\"\n value={filter?.status?.[0] || 'all'}\n onChange={handleStatusFilter}\n className={cn(\n 'h-9 rounded-md border border-input bg-background px-3 text-sm',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring'\n )}\n >\n <option value=\"all\">All Statuses</option>\n <option value=\"active\">Active</option>\n <option value=\"draft\">Draft</option>\n <option value=\"paused\">Paused</option>\n <option value=\"deprecated\">Deprecated</option>\n <option value=\"archived\">Archived</option>\n </select>\n </div>\n\n {/* Create button */}\n {onCreate && (\n <button\n data-testid=\"create-agent-btn\"\n onClick={onCreate}\n className={cn(\n 'flex h-9 items-center gap-2 rounded-md bg-primary px-4 text-sm font-medium text-primary-foreground',\n 'hover:bg-primary/90'\n )}\n >\n <Plus className=\"h-4 w-4\" />\n Create Agent\n </button>\n )}\n </div>\n\n {/* Grid */}\n <div className=\"flex-1 overflow-auto p-4\">\n {loading ? (\n <div\n data-testid=\"agents-grid\"\n className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-3\"\n >\n {Array.from({ length: 6 }).map((_, i) => (\n <div\n key={i}\n className=\"animate-pulse rounded-lg border border-border p-6\"\n >\n <div className=\"flex items-center gap-3 mb-4\">\n <div className=\"h-10 w-10 rounded-lg bg-muted\" />\n <div>\n <div className=\"h-4 w-32 rounded bg-muted mb-1\" />\n <div className=\"h-3 w-24 rounded bg-muted\" />\n </div>\n </div>\n <div className=\"h-10 w-full rounded bg-muted mb-4\" />\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"h-12 rounded bg-muted\" />\n <div className=\"h-12 rounded bg-muted\" />\n <div className=\"h-12 rounded bg-muted\" />\n <div className=\"h-12 rounded bg-muted\" />\n </div>\n </div>\n ))}\n </div>\n ) : (\n <div\n data-testid=\"agents-grid\"\n className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-3\"\n >\n {agents.map((agent) => (\n <AgentCard\n key={agent.id}\n agent={agent}\n onClick={() => onAgentClick?.(agent)}\n />\n ))}\n </div>\n )}\n </div>\n\n {/* Footer with count */}\n <div className=\"flex items-center justify-between border-t border-border p-4\">\n <div className=\"text-sm text-muted-foreground\">\n Showing {agents.length} of {total} agents\n </div>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { Play, Loader2, AlertCircle, CheckCircle2, X } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport type { Agent, AgentExecution } from '../../types'\n\n/**\n * Props for AgentExecutePanel\n */\nexport interface AgentExecutePanelProps {\n /** The agent to execute */\n agent: Agent\n /** Whether execution is in progress */\n executing?: boolean\n /** Current execution result */\n execution?: AgentExecution | null\n /** Error message */\n error?: string | null\n /** Callback to execute the agent */\n onExecute: (task: string, context?: Record<string, unknown>) => void\n /** Callback to clear results */\n onClear?: () => void\n /** Additional class name */\n className?: string\n}\n\n/**\n * AgentExecutePanel - Panel for executing an agent\n */\nexport function AgentExecutePanel({\n agent,\n executing = false,\n execution,\n error,\n onExecute,\n onClear,\n className,\n}: AgentExecutePanelProps) {\n const [showInput, setShowInput] = React.useState(false)\n const [inputValue, setInputValue] = React.useState('')\n const textareaRef = React.useRef<HTMLTextAreaElement>(null)\n\n // Focus textarea when showing input\n React.useEffect(() => {\n if (showInput && textareaRef.current) {\n textareaRef.current.focus()\n }\n }, [showInput])\n\n // Clear input after successful execution\n React.useEffect(() => {\n if (execution?.status === 'completed' || execution?.status === 'failed') {\n setInputValue('')\n }\n }, [execution?.status])\n\n const handleExecuteClick = () => {\n if (!showInput) {\n setShowInput(true)\n return\n }\n }\n\n const handleSubmit = () => {\n if (inputValue.trim()) {\n onExecute(inputValue.trim())\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n // Submit on Cmd/Ctrl + Enter\n if ((e.metaKey || e.ctrlKey) && e.key === 'Enter' && inputValue.trim() && !executing) {\n handleSubmit()\n }\n // Close on Escape\n if (e.key === 'Escape') {\n setShowInput(false)\n setInputValue('')\n }\n }\n\n const handleClear = () => {\n setShowInput(false)\n setInputValue('')\n onClear?.()\n }\n\n const isInputEmpty = !inputValue.trim()\n const showResults = execution || error || executing\n\n return (\n <div className={cn('rounded-lg border border-border bg-card', className)}>\n {/* Header */}\n <div className=\"flex items-center justify-between border-b border-border px-4 py-3\">\n <h3 className=\"font-medium\">Execute Agent</h3>\n {showResults && (\n <button\n onClick={handleClear}\n className=\"flex h-6 w-6 items-center justify-center rounded hover:bg-accent\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n\n {/* Content */}\n <div className=\"p-4\">\n {!showInput && !showResults ? (\n // Initial state - just the button\n <div className=\"text-center py-4\">\n <p className=\"text-sm text-muted-foreground mb-4\">\n Execute this agent with a task description to see it in action.\n </p>\n <button\n data-testid=\"execute-agent-btn\"\n onClick={handleExecuteClick}\n className={cn(\n 'flex items-center gap-2 mx-auto px-4 py-2 rounded-md',\n 'bg-primary text-primary-foreground font-medium text-sm',\n 'hover:bg-primary/90'\n )}\n >\n <Play className=\"h-4 w-4\" />\n Execute Agent\n </button>\n </div>\n ) : (\n <div className=\"space-y-4\">\n {/* Input area */}\n {showInput && !executing && !execution && (\n <>\n <div>\n <label\n htmlFor=\"agent-input\"\n className=\"text-sm font-medium mb-2 block\"\n >\n Task Description\n </label>\n <textarea\n ref={textareaRef}\n id=\"agent-input\"\n data-testid=\"agent-input-textarea\"\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder=\"Describe the task you want the agent to perform...\"\n rows={4}\n className={cn(\n 'w-full rounded-md border border-input bg-background px-3 py-2 text-sm',\n 'placeholder:text-muted-foreground',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring'\n )}\n />\n <p className=\"mt-1 text-xs text-muted-foreground\">\n Press Cmd/Ctrl + Enter to execute\n </p>\n </div>\n <div className=\"flex justify-end gap-2\">\n <button\n onClick={() => {\n setShowInput(false)\n setInputValue('')\n }}\n className=\"px-4 py-2 text-sm font-medium rounded-md hover:bg-accent\"\n >\n Cancel\n </button>\n <button\n data-testid=\"submit-execution-btn\"\n onClick={handleSubmit}\n disabled={isInputEmpty}\n className={cn(\n 'flex items-center gap-2 px-4 py-2 text-sm font-medium rounded-md',\n 'bg-primary text-primary-foreground hover:bg-primary/90',\n 'disabled:opacity-50 disabled:cursor-not-allowed'\n )}\n >\n <Play className=\"h-4 w-4\" />\n Execute\n </button>\n </div>\n </>\n )}\n\n {/* Loading state */}\n {executing && (\n <div\n data-testid=\"execution-progress\"\n className=\"flex flex-col items-center justify-center py-8\"\n >\n <div data-testid=\"execution-loading\" className=\"relative mb-4\">\n <Loader2 className=\"h-8 w-8 animate-spin text-primary\" />\n </div>\n <p className=\"text-sm font-medium mb-1\">Executing Agent...</p>\n <p className=\"text-xs text-muted-foreground\">\n {agent.name} is working on your task\n </p>\n </div>\n )}\n\n {/* Error state */}\n {error && (\n <div\n data-testid=\"execution-error\"\n className=\"p-4 bg-red-500/10 border border-red-500/20 rounded-md\"\n >\n <div className=\"flex items-center gap-2 text-red-600 dark:text-red-400 font-medium mb-2\">\n <AlertCircle className=\"h-4 w-4\" />\n Execution Failed\n </div>\n <p className=\"text-sm text-red-600/80 dark:text-red-400/80\">\n {error}\n </p>\n <button\n data-testid=\"retry-execution-btn\"\n onClick={() => {\n setShowInput(true)\n }}\n className={cn(\n 'mt-3 flex items-center gap-2 px-3 py-1.5 text-sm font-medium rounded-md',\n 'border border-red-500/30 text-red-600 dark:text-red-400',\n 'hover:bg-red-500/10'\n )}\n >\n <Play className=\"h-3.5 w-3.5\" />\n Try Again\n </button>\n </div>\n )}\n\n {/* Network error state */}\n {error?.toLowerCase().includes('network') && (\n <div\n data-testid=\"network-error\"\n className=\"p-4 bg-red-500/10 border border-red-500/20 rounded-md\"\n >\n <div className=\"flex items-center gap-2 text-red-600 dark:text-red-400 font-medium mb-2\">\n <AlertCircle className=\"h-4 w-4\" />\n Network Error\n </div>\n <p className=\"text-sm text-red-600/80 dark:text-red-400/80\">\n Unable to connect. Please check your internet connection and try again.\n </p>\n </div>\n )}\n\n {/* Success result */}\n {execution?.status === 'completed' && execution.output && (\n <div data-testid=\"execution-result\" className=\"space-y-4\">\n <div className=\"flex items-center gap-2 text-green-600 dark:text-green-400\">\n <CheckCircle2 className=\"h-5 w-5\" />\n <span className=\"font-medium\">Execution Complete</span>\n </div>\n\n {/* Summary */}\n <div className=\"p-4 bg-muted/50 rounded-md\">\n <div className=\"text-sm font-medium mb-2\">Summary</div>\n <p className=\"text-sm text-muted-foreground\">\n {execution.output.summary}\n </p>\n </div>\n\n {/* Result */}\n <div>\n <div className=\"text-sm font-medium mb-2\">Result</div>\n <pre className=\"text-xs bg-background border border-border rounded-md p-3 overflow-auto max-h-64\">\n {JSON.stringify(execution.output.result, null, 2)}\n </pre>\n </div>\n\n {/* Token usage */}\n <div className=\"flex gap-4 text-sm text-muted-foreground\">\n <span>Duration: {execution.durationMs}ms</span>\n <span>Tokens: {execution.tokenUsage.totalTokens}</span>\n <span>Iterations: {execution.iterations}</span>\n </div>\n\n {/* Execute again button */}\n <button\n data-testid=\"execute-agent-btn\"\n onClick={() => {\n setShowInput(true)\n onClear?.()\n }}\n className={cn(\n 'flex items-center gap-2 px-4 py-2 text-sm font-medium rounded-md',\n 'bg-primary text-primary-foreground hover:bg-primary/90'\n )}\n >\n <Play className=\"h-4 w-4\" />\n Execute Again\n </button>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { ThumbsUp, ThumbsDown, Loader2 } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport type { AgentExecution, AgentFeedback } from '../../types'\n\n/**\n * Props for AgentFeedbackPanel\n */\nexport interface AgentFeedbackPanelProps {\n /** The execution to provide feedback for */\n execution: AgentExecution\n /** Whether feedback is being submitted */\n submitting?: boolean\n /** Callback to submit feedback */\n onSubmitFeedback: (feedback: Omit<AgentFeedback, 'submittedAt' | 'submittedBy'>) => void\n /** Additional class name */\n className?: string\n}\n\n/**\n * AgentFeedbackPanel - Panel for submitting feedback on agent executions\n */\nexport function AgentFeedbackPanel({\n execution,\n submitting = false,\n onSubmitFeedback,\n className,\n}: AgentFeedbackPanelProps) {\n const [selectedRating, setSelectedRating] = React.useState<'up' | 'down' | null>(\n execution.feedback ? (execution.feedback.rating >= 3 ? 'up' : 'down') : null\n )\n const [comment, setComment] = React.useState(execution.feedback?.comment || '')\n const [showCommentBox, setShowCommentBox] = React.useState(!!execution.feedback)\n\n // Determine if feedback has already been submitted\n const hasSubmittedFeedback = !!execution.feedback\n const isDisabled = hasSubmittedFeedback || submitting\n\n const handleRatingClick = (rating: 'up' | 'down') => {\n if (isDisabled) return\n\n if (selectedRating === rating) {\n // Deselect\n setSelectedRating(null)\n setShowCommentBox(false)\n } else {\n setSelectedRating(rating)\n setShowCommentBox(true)\n }\n }\n\n const handleSubmit = () => {\n if (!selectedRating || isDisabled) return\n\n onSubmitFeedback({\n rating: selectedRating === 'up' ? 5 : 1,\n comment: comment.trim() || undefined,\n })\n }\n\n return (\n <div className={cn('rounded-lg border border-border bg-card', className)}>\n {/* Header */}\n <div className=\"border-b border-border px-4 py-3\">\n <h3 className=\"font-medium\">Feedback</h3>\n <p className=\"text-xs text-muted-foreground\">\n {hasSubmittedFeedback\n ? 'Thank you for your feedback!'\n : 'Was this response helpful?'}\n </p>\n </div>\n\n {/* Content */}\n <div className=\"p-4\">\n {/* Rating buttons */}\n <div className=\"flex items-center gap-2 mb-4\">\n <button\n data-testid=\"thumbs-up-btn\"\n data-selected={selectedRating === 'up' ? 'true' : undefined}\n onClick={() => handleRatingClick('up')}\n disabled={isDisabled}\n className={cn(\n 'flex h-10 w-10 items-center justify-center rounded-full border-2 transition-colors',\n selectedRating === 'up'\n ? 'border-green-500 bg-green-500/10 text-green-600 dark:text-green-400'\n : 'border-border text-muted-foreground hover:border-green-500/50 hover:text-green-600',\n isDisabled && 'opacity-50 cursor-not-allowed hover:border-border hover:text-muted-foreground'\n )}\n >\n <ThumbsUp className=\"h-5 w-5\" />\n </button>\n <button\n data-testid=\"thumbs-down-btn\"\n data-selected={selectedRating === 'down' ? 'true' : undefined}\n onClick={() => handleRatingClick('down')}\n disabled={isDisabled}\n className={cn(\n 'flex h-10 w-10 items-center justify-center rounded-full border-2 transition-colors',\n selectedRating === 'down'\n ? 'border-red-500 bg-red-500/10 text-red-600 dark:text-red-400'\n : 'border-border text-muted-foreground hover:border-red-500/50 hover:text-red-600',\n isDisabled && 'opacity-50 cursor-not-allowed hover:border-border hover:text-muted-foreground'\n )}\n >\n <ThumbsDown className=\"h-5 w-5\" />\n </button>\n\n {hasSubmittedFeedback && execution.feedback && (\n <span className=\"ml-2 text-sm text-muted-foreground\">\n Rated {execution.feedback.rating >= 3 ? 'positively' : 'negatively'}\n </span>\n )}\n </div>\n\n {/* Comment box */}\n {showCommentBox && (\n <div className=\"space-y-3\">\n <div>\n <label\n htmlFor=\"feedback-comment\"\n className=\"text-sm font-medium mb-2 block\"\n >\n {selectedRating === 'down' ? 'What went wrong?' : 'Any additional comments?'}\n <span className=\"text-muted-foreground font-normal ml-1\">(optional)</span>\n </label>\n <textarea\n id=\"feedback-comment\"\n data-testid=\"feedback-comment\"\n value={comment}\n onChange={(e) => setComment(e.target.value)}\n placeholder={\n selectedRating === 'down'\n ? 'Help us improve by describing what was incorrect or unhelpful...'\n : 'Tell us what worked well...'\n }\n rows={3}\n disabled={isDisabled}\n className={cn(\n 'w-full rounded-md border border-input bg-background px-3 py-2 text-sm',\n 'placeholder:text-muted-foreground',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n 'disabled:opacity-50 disabled:cursor-not-allowed'\n )}\n />\n </div>\n\n {!hasSubmittedFeedback && (\n <div className=\"flex justify-end\">\n <button\n data-testid=\"submit-feedback-btn\"\n onClick={handleSubmit}\n disabled={!selectedRating || submitting}\n className={cn(\n 'flex items-center gap-2 px-4 py-2 text-sm font-medium rounded-md',\n 'bg-primary text-primary-foreground hover:bg-primary/90',\n 'disabled:opacity-50 disabled:cursor-not-allowed'\n )}\n >\n {submitting ? (\n <>\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n Submitting...\n </>\n ) : (\n 'Submit Feedback'\n )}\n </button>\n </div>\n )}\n </div>\n )}\n\n {/* Submitted feedback display */}\n {hasSubmittedFeedback && execution.feedback?.comment && (\n <div className=\"mt-2 p-3 bg-muted/50 rounded-md\">\n <div className=\"text-xs text-muted-foreground mb-1\">Your comment:</div>\n <p className=\"text-sm\">{execution.feedback.comment}</p>\n </div>\n )}\n </div>\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport {\n Clock,\n CheckCircle2,\n XCircle,\n Loader2,\n StopCircle,\n ThumbsUp,\n ThumbsDown,\n ChevronRight,\n ChevronLeft,\n Coins,\n} from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport { formatDateTime, formatDuration, formatRelativeTime, formatNumber } from '../../lib/utils'\nimport type { AgentExecution, AgentExecutionStatus } from '../../types'\n\n/**\n * Props for AgentHistoryTable\n */\nexport interface AgentHistoryTableProps {\n /** Executions to display */\n executions: AgentExecution[]\n /** Total count */\n total: number\n /** Loading state */\n loading?: boolean\n /** Current page */\n page?: number\n /** Items per page */\n perPage?: number\n /** Callback when execution is clicked */\n onExecutionClick?: (execution: AgentExecution) => void\n /** Callback when page changes */\n onPageChange?: (page: number) => void\n /** Additional class name */\n className?: string\n}\n\n/** Status icon mapping */\nconst STATUS_ICONS: Record<AgentExecutionStatus, React.ElementType> = {\n pending: Clock,\n running: Loader2,\n completed: CheckCircle2,\n failed: XCircle,\n cancelled: StopCircle,\n 'handed-off': ChevronRight,\n 'awaiting-human': Clock,\n}\n\n/** Status color mapping */\nconst STATUS_COLORS: Record<AgentExecutionStatus, string> = {\n pending: 'bg-yellow-500/10 text-yellow-600 dark:text-yellow-400',\n running: 'bg-blue-500/10 text-blue-600 dark:text-blue-400',\n completed: 'bg-green-500/10 text-green-600 dark:text-green-400',\n failed: 'bg-red-500/10 text-red-600 dark:text-red-400',\n cancelled: 'bg-muted text-muted-foreground',\n 'handed-off': 'bg-purple-500/10 text-purple-600 dark:text-purple-400',\n 'awaiting-human': 'bg-orange-500/10 text-orange-600 dark:text-orange-400',\n}\n\n/**\n * AgentHistoryTable - Table view for agent execution history\n */\nexport function AgentHistoryTable({\n executions,\n total,\n loading = false,\n page = 1,\n perPage = 10,\n onExecutionClick,\n onPageChange,\n className,\n}: AgentHistoryTableProps) {\n const totalPages = Math.ceil(total / perPage)\n\n if (!loading && executions.length === 0) {\n return (\n <div className={cn('rounded-lg border border-border bg-card', className)}>\n <div\n data-testid=\"history-empty-state\"\n className=\"flex flex-col items-center justify-center py-12 text-center\"\n >\n <Clock className=\"h-12 w-12 text-muted-foreground mb-4\" />\n <h3 className=\"text-lg font-semibold mb-2\">No execution history</h3>\n <p className=\"text-muted-foreground\">\n This agent has not been executed yet. Execute it to see history.\n </p>\n </div>\n </div>\n )\n }\n\n return (\n <div className={cn('rounded-lg border border-border bg-card', className)}>\n {/* Table */}\n <div className=\"overflow-auto\">\n <table data-testid=\"execution-history-table\" className=\"w-full\">\n <thead className=\"bg-muted/50\">\n <tr>\n <th className=\"p-4 text-left text-sm font-medium text-muted-foreground\">Status</th>\n <th className=\"p-4 text-left text-sm font-medium text-muted-foreground\">Time</th>\n <th className=\"p-4 text-left text-sm font-medium text-muted-foreground\">Duration</th>\n <th className=\"p-4 text-left text-sm font-medium text-muted-foreground\">Tokens</th>\n <th className=\"p-4 text-left text-sm font-medium text-muted-foreground\">Cost</th>\n <th className=\"p-4 text-left text-sm font-medium text-muted-foreground\">Feedback</th>\n <th className=\"w-8 p-4\" />\n </tr>\n </thead>\n <tbody>\n {loading ? (\n // Loading skeleton\n Array.from({ length: 5 }).map((_, i) => (\n <tr key={i} className=\"animate-pulse border-b border-border\">\n <td className=\"p-4\">\n <div className=\"h-6 w-20 rounded bg-muted\" />\n </td>\n <td className=\"p-4\">\n <div className=\"h-4 w-24 rounded bg-muted\" />\n </td>\n <td className=\"p-4\">\n <div className=\"h-4 w-16 rounded bg-muted\" />\n </td>\n <td className=\"p-4\">\n <div className=\"h-4 w-20 rounded bg-muted\" />\n </td>\n <td className=\"p-4\">\n <div className=\"h-4 w-16 rounded bg-muted\" />\n </td>\n <td className=\"p-4\">\n <div className=\"h-4 w-8 rounded bg-muted\" />\n </td>\n <td className=\"p-4\" />\n </tr>\n ))\n ) : (\n executions.map((execution) => {\n const StatusIcon = STATUS_ICONS[execution.status]\n const isRunning = execution.status === 'running'\n\n return (\n <tr\n key={execution.id}\n data-testid=\"execution-row\"\n onClick={() => onExecutionClick?.(execution)}\n className=\"cursor-pointer border-b border-border hover:bg-muted/50\"\n >\n <td className=\"p-4\">\n <span\n data-testid=\"execution-status\"\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-medium',\n STATUS_COLORS[execution.status]\n )}\n >\n <StatusIcon\n className={cn('h-3.5 w-3.5', isRunning && 'animate-spin')}\n />\n {execution.status}\n </span>\n </td>\n <td className=\"p-4\">\n <div\n data-testid=\"execution-timestamp\"\n className=\"text-sm\"\n >\n {formatRelativeTime(execution.startedAt)}\n </div>\n <div className=\"text-xs text-muted-foreground\">\n {formatDateTime(execution.startedAt)}\n </div>\n </td>\n <td className=\"p-4\">\n <span\n data-testid=\"execution-duration\"\n className=\"text-sm\"\n >\n {execution.durationMs\n ? formatDuration(execution.durationMs)\n : '-'}\n </span>\n </td>\n <td className=\"p-4\">\n <div data-testid=\"token-usage\" className=\"text-sm\">\n {formatNumber(execution.tokenUsage.totalTokens)}\n </div>\n <div className=\"flex gap-2 text-xs text-muted-foreground\">\n <span data-testid=\"input-tokens\">\n In: {formatNumber(execution.tokenUsage.inputTokens)}\n </span>\n <span data-testid=\"output-tokens\">\n Out: {formatNumber(execution.tokenUsage.outputTokens)}\n </span>\n </div>\n </td>\n <td className=\"p-4\">\n <span\n data-testid=\"execution-cost\"\n className=\"text-sm flex items-center gap-1\"\n >\n <Coins className=\"h-3.5 w-3.5 text-muted-foreground\" />\n ${execution.costUsd.toFixed(4)}\n </span>\n </td>\n <td className=\"p-4\">\n <div data-testid=\"feedback-indicator\">\n {execution.feedback ? (\n execution.feedback.rating >= 3 ? (\n <ThumbsUp className=\"h-4 w-4 text-green-500\" />\n ) : (\n <ThumbsDown className=\"h-4 w-4 text-red-500\" />\n )\n ) : (\n <span className=\"text-xs text-muted-foreground\">-</span>\n )}\n </div>\n </td>\n <td className=\"p-4\">\n <ChevronRight className=\"h-4 w-4 text-muted-foreground\" />\n </td>\n </tr>\n )\n })\n )}\n </tbody>\n </table>\n </div>\n\n {/* Pagination */}\n {totalPages > 1 && (\n <div\n data-testid=\"history-pagination\"\n className=\"flex items-center justify-between border-t border-border p-4\"\n >\n <div className=\"text-sm text-muted-foreground\">\n Showing {(page - 1) * perPage + 1} to{' '}\n {Math.min(page * perPage, total)} of {total} executions\n </div>\n <div className=\"flex items-center gap-2\">\n <button\n data-testid=\"pagination-prev\"\n onClick={() => onPageChange?.(page - 1)}\n disabled={page <= 1}\n className={cn(\n 'flex h-8 items-center gap-1 rounded-md border border-input px-3 text-sm',\n 'hover:bg-accent disabled:opacity-50 disabled:cursor-not-allowed'\n )}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n Previous\n </button>\n <span className=\"text-sm px-2\">\n Page {page} of {totalPages}\n </span>\n <button\n data-testid=\"pagination-next\"\n onClick={() => onPageChange?.(page + 1)}\n disabled={page >= totalPages}\n className={cn(\n 'flex h-8 items-center gap-1 rounded-md border border-input px-3 text-sm',\n 'hover:bg-accent disabled:opacity-50 disabled:cursor-not-allowed'\n )}\n >\n Next\n <ChevronRight className=\"h-4 w-4\" />\n </button>\n </div>\n </div>\n )}\n </div>\n )\n}\n","'use client'\n\n/**\n * Error Boundary Component for @mdxui/do\n *\n * Catches JavaScript errors anywhere in the child component tree,\n * logs errors, and displays a fallback UI.\n *\n * @example\n * ```tsx\n * <DOErrorBoundary>\n * <ThingsList />\n * </DOErrorBoundary>\n *\n * // With custom fallback\n * <DOErrorBoundary fallback={<CustomErrorUI />}>\n * <Dashboard />\n * </DOErrorBoundary>\n *\n * // With fallback function\n * <DOErrorBoundary\n * fallback={(error, reset) => (\n * <div>\n * <p>Error: {error.message}</p>\n * <button onClick={reset}>Retry</button>\n * </div>\n * )}\n * >\n * <DataView />\n * </DOErrorBoundary>\n * ```\n */\n\nimport * as React from 'react'\nimport { cn } from '../lib/utils'\n\nexport interface DOErrorBoundaryProps {\n /** Child components to render */\n children: React.ReactNode\n /** Custom fallback UI - can be ReactNode or render function */\n fallback?: React.ReactNode | ((error: Error, reset: () => void) => React.ReactNode)\n /** Callback when error is caught */\n onError?: (error: Error, errorInfo: React.ErrorInfo) => void\n /** Key that triggers reset when changed (useful for route changes) */\n resetKey?: string | number\n /** Additional className for the error container */\n className?: string\n}\n\ninterface DOErrorBoundaryState {\n hasError: boolean\n error: Error | null\n}\n\n/**\n * DOErrorBoundary - Catches and handles errors in child components\n *\n * Features:\n * - Catches render errors in child tree\n * - Displays customizable error UI\n * - Provides retry functionality\n * - Supports error callbacks for logging\n * - Resets on resetKey change (e.g., route changes)\n */\nexport class DOErrorBoundary extends React.Component<\n DOErrorBoundaryProps,\n DOErrorBoundaryState\n> {\n constructor(props: DOErrorBoundaryProps) {\n super(props)\n this.state = { hasError: false, error: null }\n }\n\n static getDerivedStateFromError(error: Error): DOErrorBoundaryState {\n return { hasError: true, error }\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void {\n // Log error to console\n console.error('DOErrorBoundary caught error:', error, errorInfo)\n\n // Call optional error callback\n if (this.props.onError) {\n this.props.onError(error, errorInfo)\n }\n }\n\n componentDidUpdate(prevProps: DOErrorBoundaryProps): void {\n // Reset error state when resetKey changes\n if (\n this.state.hasError &&\n prevProps.resetKey !== this.props.resetKey\n ) {\n this.reset()\n }\n }\n\n reset = (): void => {\n this.setState({ hasError: false, error: null })\n }\n\n render(): React.ReactNode {\n if (this.state.hasError) {\n const { fallback, className } = this.props\n const error = this.state.error ?? new Error('Unknown error')\n\n // Render function fallback\n if (typeof fallback === 'function') {\n return fallback(error, this.reset)\n }\n\n // ReactNode fallback\n if (fallback) {\n return fallback\n }\n\n // Default error UI\n return (\n <div\n className={cn(\n 'p-6 rounded-lg bg-destructive/10 border border-destructive/20',\n className\n )}\n role=\"alert\"\n >\n <div className=\"flex items-start gap-3\">\n <div className=\"flex-shrink-0 mt-0.5\">\n <svg\n className=\"h-5 w-5 text-destructive\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.28 7.22a.75.75 0 00-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 101.06 1.06L10 11.06l1.72 1.72a.75.75 0 101.06-1.06L11.06 10l1.72-1.72a.75.75 0 00-1.06-1.06L10 8.94 8.28 7.22z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </div>\n <div className=\"flex-1\">\n <h2 className=\"text-sm font-semibold text-destructive\">\n Something went wrong\n </h2>\n {error.message && (\n <p className=\"mt-1 text-sm text-muted-foreground\">\n {error.message}\n </p>\n )}\n <button\n onClick={this.reset}\n className=\"mt-4 inline-flex items-center rounded-md bg-destructive px-3 py-2 text-sm font-semibold text-destructive-foreground shadow-sm hover:bg-destructive/90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-destructive\"\n >\n Try again\n </button>\n </div>\n </div>\n </div>\n )\n }\n\n return this.props.children\n }\n}\n\n/**\n * Hook to manually trigger error boundary\n * Useful for catching errors in async operations\n */\nexport function useErrorBoundary() {\n const [error, setError] = React.useState<Error | null>(null)\n\n if (error) {\n throw error\n }\n\n return {\n showBoundary: setError,\n }\n}\n\nexport default DOErrorBoundary\n"]}