@mdxui/cockpit 7.0.5 → 7.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/developer/index.d.ts +241 -536
- package/dist/developer/index.js +4655 -4648
- package/dist/developer/index.js.map +1 -1
- package/dist/developer/styles/dashboard.css +28458 -0
- package/dist/index.d.ts +8 -6
- package/dist/index.js +4594 -4587
- package/dist/index.js.map +1 -1
- package/package.json +17 -8
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/developer/index.ts","../src/developer/components/dashboard/activity-feed.tsx","../src/developer/components/dashboard/area-chart.tsx","../src/developer/components/dashboard/bar-chart.tsx","../src/developer/components/dashboard/command-palette.tsx","../src/developer/components/dashboard/dashboard-grid.tsx","../src/developer/components/dashboard/data-table.tsx","../src/developer/components/dashboard/kpi-card.tsx","../src/developer/components/dashboard/line-chart.tsx","../src/developer/components/layout/dashboard-layout.tsx","../src/developer/context/dashboard-context.tsx","../src/developer/hooks/use-theme-loader.ts","../src/developer/types/config.ts","../src/developer/components/ui/sidebar-ad.tsx","../src/developer/components/widgets/team-switcher.tsx","../src/developer/components/layout/nav-main.tsx","../src/developer/components/layout/nav-user.tsx","../src/developer/components/layout/landing-page.tsx","../src/developer/components/ui/json-viewer.tsx","../src/developer/components/ui/status-badge.tsx","../src/developer/components/vault/vault-delete-dialog.tsx","../src/developer/components/vault/vault-empty-state.tsx","../src/developer/components/vault/vault-input-modal.tsx","../src/developer/components/vault/vault-item-card.tsx","../src/developer/components/vault/vault-list.tsx","../src/developer/lib/vault-mock.ts","../src/developer/components/widgets/mock-widgets.tsx","../src/developer/components/app/settings-page.tsx","../src/developer/components/app/user-profile.tsx","../src/developer/components/app/api-key-manager.tsx","../src/developer/components/app/team-manager.tsx","../src/developer/components/app/billing.tsx","../src/developer/lib/icons.ts","../src/developer/providers/app-providers.tsx","../src/developer/lib/platform.ts","../src/developer/providers/identity-provider.tsx","../src/developer/providers/query-provider.tsx","../src/developer/lib/query-client.ts","../src/developer/providers/auth-gate.tsx","../src/developer/router.tsx","../src/developer/pages/billing.tsx","../src/developer/lib/mock-data.ts","../src/developer/pages/database.tsx","../src/developer/pages/integrations.tsx","../src/developer/pages/keys.tsx","../src/developer/pages/overview.tsx","../src/developer/pages/requests.tsx","../src/developer/pages/settings/profile.tsx","../src/developer/pages/settings/security.tsx","../src/developer/pages/settings/sessions.tsx","../src/developer/pages/team.tsx","../src/developer/pages/vault.tsx","../src/developer/pages/webhooks/activity.tsx","../src/developer/pages/webhooks/endpoints.tsx","../src/developer/pages/webhooks/event-catalog.tsx","../src/developer/pages/webhooks/logs.tsx","../src/developer/developer-dashboard.tsx","../src/developer/standalone/provider.tsx","../src/developer/standalone/api-keys.tsx","../src/developer/standalone/webhooks.tsx","../src/developer/standalone/billing.tsx","../src/developer/standalone/team.tsx","../src/auth/auth-layout.tsx","../src/auth/login-page.tsx","../src/auth/signup-page.tsx","../src/auth/password-reset-page.tsx","../src/auth/otp-page.tsx","../src/auth/onboarding-page.tsx","../src/index.ts"],"sourcesContent":["// Re-export useAuth from @mdxui/auth for convenience\nexport { useAuth } from '@mdxui/auth'\n\n// Theme system exports\nexport {\n type ThemePreset,\n type Theme,\n themePresets,\n themeNames,\n isThemePreset,\n useThemeStore,\n applyThemeToElement,\n type ThemeStore,\n getThemeCSS,\n themeCSS,\n ThemeScript,\n getThemeScriptContent,\n type ThemeMode,\n type ThemeState,\n getResolvedMode,\n} from '@mdxui/themes'\n\n// Re-export components for advanced usage\nexport * from './components'\n\n// Context hooks\nexport { useDashboard, useRoutes, useCustomRoutes } from './context/dashboard-context'\n\n// Main component\nexport { DeveloperDashboard } from './developer-dashboard'\nexport type { DeveloperDashboardProps } from './developer-dashboard'\n\n// Pages - for direct import by advanced users\nexport * from './pages'\n\n// Standalone components - for embedding in custom app shells\nexport {\n StandaloneProvider,\n StandaloneAPIKeys,\n StandaloneWebhooks,\n StandaloneBilling,\n StandaloneTeam,\n type StandaloneConfig,\n type StandaloneAPIKeysProps,\n type StandaloneWebhooksProps,\n type StandaloneBillingProps,\n type StandaloneTeamProps,\n} from './standalone'\n\n// Icon utilities\nexport { getIconByName, dashboardIcons } from './lib/icons'\n\n// Types\nexport type {\n CustomRoute,\n DashboardBranding,\n DashboardConfig,\n DashboardIdentity,\n DashboardRoutes,\n DashboardTheme\n} from './types/config'\n\n// Debug utilities - these register window.__platformDebug automatically\nexport {\n getAuthToken,\n getDebugStatus,\n getEffectiveToken,\n getSDK,\n isAuthenticated,\n isDebugMode,\n setDebugMode,\n setDevToken,\n testSDKConnection,\n} from './lib/platform'\n\n","import { Avatar, AvatarFallback, AvatarImage } from '@mdxui/primitives/avatar'\nimport { Badge } from '@mdxui/primitives/badge'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@mdxui/primitives/card'\nimport { type LucideIcon } from 'lucide-react'\n\n// Simple scroll container component (avoiding ScrollArea dependency)\nfunction ScrollContainer({ children, style }: { children: React.ReactNode; style?: React.CSSProperties }) {\n return (\n <div className=\"overflow-y-auto overflow-x-hidden\" style={style}>\n {children}\n </div>\n )\n}\n\nexport interface ActivityItem {\n /** Unique ID */\n id: string\n /** Activity type */\n type: string\n /** Activity title/message */\n title: string\n /** Activity description */\n description?: string\n /** Activity timestamp */\n timestamp: Date | string\n /** User who performed the activity */\n user?: {\n name: string\n avatar?: string\n }\n /** Icon to display */\n icon?: LucideIcon\n /** Status badge */\n status?: {\n label: string\n variant?: 'default' | 'secondary' | 'destructive' | 'outline'\n }\n /** Additional metadata to display */\n metadata?: Record<string, any>\n}\n\nexport interface ActivityFeedProps {\n /** Feed title */\n title?: string\n /** Feed description */\n description?: string\n /** Activity items */\n items: ActivityItem[]\n /** Maximum height (enables scrolling) */\n maxHeight?: number | string\n /** Show avatars */\n showAvatars?: boolean\n /** Show timestamps */\n showTimestamps?: boolean\n /** Additional CSS classes */\n className?: string\n /** Empty state message */\n emptyMessage?: string\n /** Timestamp formatter */\n formatTimestamp?: (timestamp: Date | string) => string\n}\n\nfunction defaultFormatTimestamp(timestamp: Date | string): string {\n const date = typeof timestamp === 'string' ? new Date(timestamp) : timestamp\n const now = new Date()\n const diff = now.getTime() - date.getTime()\n const seconds = Math.floor(diff / 1000)\n const minutes = Math.floor(seconds / 60)\n const hours = Math.floor(minutes / 60)\n const days = Math.floor(hours / 24)\n\n if (seconds < 60) return 'Just now'\n if (minutes < 60) return `${minutes}m ago`\n if (hours < 24) return `${hours}h ago`\n if (days < 7) return `${days}d ago`\n return date.toLocaleDateString('en-US', { month: 'short', day: 'numeric' })\n}\n\nexport function ActivityFeed({\n title = 'Recent Activity',\n description,\n items,\n maxHeight = 600,\n showAvatars = true,\n showTimestamps = true,\n className,\n emptyMessage = 'No activity yet.',\n formatTimestamp = defaultFormatTimestamp,\n}: ActivityFeedProps) {\n return (\n <Card className={className}>\n <CardHeader>\n <CardTitle>{title}</CardTitle>\n {description && <CardDescription>{description}</CardDescription>}\n </CardHeader>\n <CardContent>\n {items.length === 0 ? (\n <div className='flex h-32 items-center justify-center text-sm text-muted-foreground'>{emptyMessage}</div>\n ) : (\n <ScrollContainer style={{ maxHeight }}>\n <div className='space-y-4 pr-4'>\n {items.map((item, index) => {\n const Icon = item.icon\n const isLast = index === items.length - 1\n\n return (\n <div key={item.id} className='relative flex gap-4'>\n {/* Timeline connector */}\n {!isLast && <div className='absolute left-4 top-10 h-full w-px bg-border' />}\n\n {/* Avatar or Icon */}\n <div className='relative'>\n {showAvatars && item.user ? (\n <Avatar className='h-8 w-8'>\n <AvatarImage src={item.user.avatar} />\n <AvatarFallback>\n {item.user.name\n .split(' ')\n .map((n) => n[0])\n .join('')\n .toUpperCase()}\n </AvatarFallback>\n </Avatar>\n ) : Icon ? (\n <div className='flex h-8 w-8 items-center justify-center rounded-full bg-muted'>\n <Icon className='h-4 w-4 text-muted-foreground' />\n </div>\n ) : (\n <div className='h-8 w-8 rounded-full bg-muted' />\n )}\n </div>\n\n {/* Content */}\n <div className='flex-1 space-y-1 pb-4'>\n <div className='flex items-start justify-between gap-2'>\n <div className='flex-1'>\n <p className='text-sm font-medium leading-none'>{item.title}</p>\n {item.description && <p className='text-sm text-muted-foreground mt-1'>{item.description}</p>}\n </div>\n {item.status && (\n <Badge variant={item.status.variant || 'secondary'} className='shrink-0'>\n {item.status.label}\n </Badge>\n )}\n </div>\n {showTimestamps && (\n <p className='text-xs text-muted-foreground'>{formatTimestamp(item.timestamp)}</p>\n )}\n {item.metadata && Object.keys(item.metadata).length > 0 && (\n <div className='mt-2 flex flex-wrap gap-2'>\n {Object.entries(item.metadata).map(([key, value]) => (\n <div key={key} className='rounded-md bg-muted px-2 py-1 text-xs'>\n <span className='font-medium'>{key}:</span>{' '}\n <span className='text-muted-foreground'>{String(value)}</span>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n )\n })}\n </div>\n </ScrollContainer>\n )}\n </CardContent>\n </Card>\n )\n}\n","import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@mdxui/primitives/card'\nimport { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@mdxui/primitives/chart'\nimport { Area, AreaChart as RechartsAreaChart, CartesianGrid, XAxis, YAxis } from 'recharts'\n\nexport interface AreaChartProps {\n /** Chart title */\n title?: string\n /** Chart description */\n description?: string\n /** Data points for the chart */\n data: Array<Record<string, any>>\n /** X-axis data key */\n xAxisKey: string\n /** Y-axis data keys (one or more lines) */\n yAxisKeys: string[]\n /** Chart configuration for colors and labels */\n config: ChartConfig\n /** Show grid lines */\n showGrid?: boolean\n /** Show X axis */\n showXAxis?: boolean\n /** Show Y axis */\n showYAxis?: boolean\n /** X-axis label formatter */\n xAxisFormatter?: (value: any) => string\n /** Y-axis label formatter */\n yAxisFormatter?: (value: any) => string\n /** Chart height */\n height?: number | string\n /** Additional CSS classes */\n className?: string\n /** Fill opacity (0-1) */\n fillOpacity?: number\n /** Stroke width */\n strokeWidth?: number\n}\n\nexport function AreaChart({\n title,\n description,\n data,\n xAxisKey,\n yAxisKeys,\n config,\n showGrid = true,\n showXAxis = true,\n showYAxis = true,\n xAxisFormatter,\n yAxisFormatter,\n height = 350,\n className,\n fillOpacity = 0.2,\n strokeWidth = 2,\n}: AreaChartProps) {\n return (\n <Card className={className}>\n {(title || description) && (\n <CardHeader>\n {title && <CardTitle>{title}</CardTitle>}\n {description && <CardDescription>{description}</CardDescription>}\n </CardHeader>\n )}\n <CardContent>\n <ChartContainer config={config} className='w-full' style={{ height }}>\n <RechartsAreaChart data={data}>\n {showGrid && <CartesianGrid strokeDasharray='3 3' className='stroke-muted' />}\n {showXAxis && (\n <XAxis\n dataKey={xAxisKey}\n tickLine={false}\n tickMargin={10}\n axisLine={false}\n tickFormatter={xAxisFormatter}\n />\n )}\n {showYAxis && (\n <YAxis\n tickLine={false}\n tickMargin={10}\n axisLine={false}\n tickFormatter={yAxisFormatter}\n />\n )}\n <ChartTooltip content={<ChartTooltipContent />} />\n {yAxisKeys.map((key) => (\n <Area\n key={key}\n type='monotone'\n dataKey={key}\n stroke={`var(--color-${key})`}\n fill={`var(--color-${key})`}\n fillOpacity={fillOpacity}\n strokeWidth={strokeWidth}\n stackId={yAxisKeys.length > 1 ? 'stack' : undefined}\n />\n ))}\n </RechartsAreaChart>\n </ChartContainer>\n </CardContent>\n </Card>\n )\n}\n","import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@mdxui/primitives/card'\nimport { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@mdxui/primitives/chart'\nimport { Bar, BarChart as RechartsBarChart, CartesianGrid, ReferenceLine, XAxis, YAxis } from 'recharts'\n\nexport interface BarChartProps {\n /** Chart title */\n title?: string\n /** Chart description */\n description?: string\n /** Data points for the chart */\n data: Array<Record<string, any>>\n /** X-axis data key */\n xAxisKey: string\n /** Y-axis data keys (one or more bars) */\n yAxisKeys: string[]\n /** Chart configuration for colors and labels */\n config: ChartConfig\n /** Show grid lines */\n showGrid?: boolean\n /** Show X axis */\n showXAxis?: boolean\n /** Show Y axis */\n showYAxis?: boolean\n /** X-axis label formatter */\n xAxisFormatter?: (value: any) => string\n /** Y-axis label formatter */\n yAxisFormatter?: (value: any) => string\n /** Chart height */\n height?: number | string\n /** Additional CSS classes */\n className?: string\n /** Bar radius */\n radius?: number | [number, number, number, number]\n /** Show average reference line */\n showAverage?: boolean\n /** Average label prefix */\n averageLabel?: string\n /** Layout: horizontal or vertical */\n layout?: 'horizontal' | 'vertical'\n}\n\nexport function BarChart({\n title,\n description,\n data,\n xAxisKey,\n yAxisKeys,\n config,\n showGrid = true,\n showXAxis = true,\n showYAxis = true,\n xAxisFormatter,\n yAxisFormatter,\n height = 350,\n className,\n radius = 4,\n showAverage = false,\n averageLabel = 'Avg',\n layout = 'horizontal',\n}: BarChartProps) {\n // Calculate average for the first y-axis key if showing average\n const average = showAverage && data.length > 0\n ? data.reduce((sum, item) => sum + (item[yAxisKeys[0]] || 0), 0) / data.length\n : 0\n\n return (\n <Card className={className}>\n {(title || description) && (\n <CardHeader>\n {title && <CardTitle>{title}</CardTitle>}\n {description && <CardDescription>{description}</CardDescription>}\n </CardHeader>\n )}\n <CardContent>\n <ChartContainer config={config} className='w-full' style={{ height }}>\n <RechartsBarChart data={data} layout={layout}>\n {showGrid && <CartesianGrid strokeDasharray='3 3' className='stroke-muted' />}\n {showXAxis && layout === 'horizontal' && (\n <XAxis\n dataKey={xAxisKey}\n tickLine={false}\n tickMargin={10}\n axisLine={false}\n tickFormatter={xAxisFormatter}\n />\n )}\n {showYAxis && layout === 'horizontal' && (\n <YAxis\n tickLine={false}\n tickMargin={10}\n axisLine={false}\n tickFormatter={yAxisFormatter}\n />\n )}\n {showXAxis && layout === 'vertical' && (\n <XAxis\n type='number'\n tickLine={false}\n tickMargin={10}\n axisLine={false}\n tickFormatter={xAxisFormatter}\n />\n )}\n {showYAxis && layout === 'vertical' && (\n <YAxis\n type='category'\n dataKey={xAxisKey}\n tickLine={false}\n tickMargin={10}\n axisLine={false}\n tickFormatter={yAxisFormatter}\n />\n )}\n <ChartTooltip content={<ChartTooltipContent />} />\n {showAverage && average > 0 && (\n <ReferenceLine\n y={layout === 'horizontal' ? average : undefined}\n x={layout === 'vertical' ? average : undefined}\n stroke='var(--muted-foreground)'\n strokeDasharray='3 3'\n strokeOpacity={0.5}\n label={{\n value: `${averageLabel}: ${Math.round(average).toLocaleString()}`,\n position: layout === 'horizontal' ? 'insideBottomLeft' : 'insideTopRight',\n className: 'text-xs fill-muted-foreground',\n }}\n />\n )}\n {yAxisKeys.map((key) => (\n <Bar\n key={key}\n dataKey={key}\n fill={`var(--color-${key})`}\n radius={radius}\n />\n ))}\n </RechartsBarChart>\n </ChartContainer>\n </CardContent>\n </Card>\n )\n}\n","'use client'\n\nimport { Dialog, DialogContent } from '@mdxui/primitives/dialog'\nimport { cn } from '@mdxui/primitives/lib/utils'\nimport { Command as CommandPrimitive } from 'cmdk'\nimport { type LucideIcon, Search } from 'lucide-react'\nimport { useEffect, useState } from 'react'\n\nexport interface CommandItem {\n /** Unique ID */\n id: string\n /** Display label */\n label: string\n /** Optional description */\n description?: string\n /** Icon to display */\n icon?: LucideIcon\n /** Keyboard shortcut to display */\n shortcut?: string\n /** Action to perform when selected */\n onSelect: () => void\n /** Optional keywords for search */\n keywords?: string[]\n}\n\nexport interface CommandGroup {\n /** Group heading */\n heading: string\n /** Items in this group */\n items: CommandItem[]\n}\n\nexport interface CommandPaletteProps {\n /** Command groups */\n groups: CommandGroup[]\n /** Placeholder text */\n placeholder?: string\n /** Empty state message */\n emptyMessage?: string\n /** Open state (controlled) */\n open?: boolean\n /** On open change (controlled) */\n onOpenChange?: (open: boolean) => void\n /** Keyboard shortcut to open (default: Cmd+K / Ctrl+K) */\n shortcut?: string\n /** Additional CSS classes */\n className?: string\n}\n\nexport function CommandPalette({\n groups,\n placeholder = 'Type a command or search...',\n emptyMessage = 'No results found.',\n open: controlledOpen,\n onOpenChange,\n shortcut = 'k',\n className,\n}: CommandPaletteProps) {\n const [internalOpen, setInternalOpen] = useState(false)\n const isControlled = controlledOpen !== undefined\n const open = isControlled ? controlledOpen : internalOpen\n const setOpen = isControlled ? onOpenChange || (() => {}) : setInternalOpen\n\n useEffect(() => {\n const down = (e: KeyboardEvent) => {\n if (e.key === shortcut && (e.metaKey || e.ctrlKey)) {\n e.preventDefault()\n setOpen(!open)\n }\n }\n\n document.addEventListener('keydown', down)\n return () => document.removeEventListener('keydown', down)\n }, [open, setOpen, shortcut])\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogContent className='overflow-hidden p-0 shadow-lg'>\n <CommandPrimitive className={cn('flex h-full w-full flex-col overflow-hidden rounded-md', className)}>\n <div className='flex items-center border-b px-3'>\n <Search className='mr-2 h-4 w-4 shrink-0 opacity-50' />\n <CommandPrimitive.Input\n placeholder={placeholder}\n className='flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50'\n />\n </div>\n <CommandPrimitive.List className='max-h-[400px] overflow-y-auto overflow-x-hidden p-2'>\n <CommandPrimitive.Empty className='py-6 text-center text-sm text-muted-foreground'>\n {emptyMessage}\n </CommandPrimitive.Empty>\n {groups.map((group) => (\n <CommandPrimitive.Group\n key={group.heading}\n heading={group.heading}\n className='overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground'\n >\n {group.items.map((item) => {\n const Icon = item.icon\n return (\n <CommandPrimitive.Item\n key={item.id}\n value={item.label}\n keywords={item.keywords}\n onSelect={() => {\n item.onSelect()\n setOpen(false)\n }}\n className='relative flex cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none aria-selected:bg-accent aria-selected:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50'\n >\n {Icon && <Icon className='mr-2 h-4 w-4' />}\n <div className='flex-1'>\n <div className='font-medium'>{item.label}</div>\n {item.description && <div className='text-xs text-muted-foreground'>{item.description}</div>}\n </div>\n {item.shortcut && (\n <div className='ml-2 flex items-center gap-1 text-xs text-muted-foreground'>\n {item.shortcut.split('+').map((key, index) => (\n <kbd\n key={index}\n className='pointer-events-none inline-flex h-5 select-none items-center gap-1 rounded border bg-muted px-1.5 font-mono text-[10px] font-medium text-muted-foreground opacity-100'\n >\n {key}\n </kbd>\n ))}\n </div>\n )}\n </CommandPrimitive.Item>\n )\n })}\n </CommandPrimitive.Group>\n ))}\n </CommandPrimitive.List>\n </CommandPrimitive>\n </DialogContent>\n </Dialog>\n )\n}\n\n// Hook to programmatically open the command palette\nexport function useCommandPalette() {\n const [open, setOpen] = useState(false)\n\n return {\n open,\n setOpen,\n toggle: () => setOpen((prev) => !prev),\n }\n}\n","import { cn } from '@mdxui/primitives/lib/utils'\nimport { type ReactNode } from 'react'\n\nexport interface DashboardGridProps {\n /** Grid children */\n children: ReactNode\n /** Number of columns */\n columns?: 1 | 2 | 3 | 4 | 6 | 12\n /** Gap between items */\n gap?: 2 | 4 | 6 | 8\n /** Additional CSS classes */\n className?: string\n}\n\nexport function DashboardGrid({ children, columns = 3, gap = 4, className }: DashboardGridProps) {\n const columnClasses = {\n 1: 'md:grid-cols-1',\n 2: 'md:grid-cols-2',\n 3: 'md:grid-cols-3',\n 4: 'md:grid-cols-4',\n 6: 'md:grid-cols-6',\n 12: 'md:grid-cols-12',\n }\n\n const gapClasses = {\n 2: 'gap-2',\n 4: 'gap-4',\n 6: 'gap-6',\n 8: 'gap-8',\n }\n\n return <div className={cn('grid auto-rows-min', columnClasses[columns], gapClasses[gap], className)}>{children}</div>\n}\n\nexport interface DashboardGridItemProps {\n /** Item children */\n children: ReactNode\n /** Column span */\n colSpan?: 1 | 2 | 3 | 4 | 6 | 12 | 'full'\n /** Row span */\n rowSpan?: 1 | 2 | 3 | 4 | 6\n /** Additional CSS classes */\n className?: string\n}\n\nexport function DashboardGridItem({ children, colSpan = 1, rowSpan = 1, className }: DashboardGridItemProps) {\n const colSpanClasses = {\n 1: 'md:col-span-1',\n 2: 'md:col-span-2',\n 3: 'md:col-span-3',\n 4: 'md:col-span-4',\n 6: 'md:col-span-6',\n 12: 'md:col-span-12',\n full: 'md:col-span-full',\n }\n\n const rowSpanClasses = {\n 1: 'md:row-span-1',\n 2: 'md:row-span-2',\n 3: 'md:row-span-3',\n 4: 'md:row-span-4',\n 6: 'md:row-span-6',\n }\n\n return <div className={cn(colSpanClasses[colSpan], rowSpanClasses[rowSpan], className)}>{children}</div>\n}\n","import { Button } from '@mdxui/primitives/button'\nimport { Input } from '@mdxui/primitives/input'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@mdxui/primitives/table'\nimport { cn } from '@mdxui/primitives/lib/utils'\nimport {\n type ColumnDef,\n type ColumnFiltersState,\n type SortingState,\n type VisibilityState,\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n} from '@tanstack/react-table'\nimport { ArrowDown, ArrowUp, ArrowUpDown, ChevronLeft, ChevronRight } from 'lucide-react'\nimport { useState } from 'react'\n\nexport interface DataTableProps<TData, TValue> {\n /** Column definitions */\n columns: ColumnDef<TData, TValue>[]\n /** Table data */\n data: TData[]\n /** Enable search/filtering */\n searchable?: boolean\n /** Search placeholder text */\n searchPlaceholder?: string\n /** Column to search on (if searchable) */\n searchColumn?: string\n /** Enable pagination */\n paginated?: boolean\n /** Initial page size */\n pageSize?: number\n /** Page size options */\n pageSizeOptions?: number[]\n /** Additional CSS classes */\n className?: string\n /** Empty state message */\n emptyMessage?: string\n}\n\nexport function DataTable<TData, TValue>({\n columns,\n data,\n searchable = true,\n searchPlaceholder = 'Search...',\n searchColumn,\n paginated = true,\n pageSize = 10,\n pageSizeOptions = [10, 20, 50, 100],\n className,\n emptyMessage = 'No results found.',\n}: DataTableProps<TData, TValue>) {\n const [sorting, setSorting] = useState<SortingState>([])\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([])\n const [columnVisibility, setColumnVisibility] = useState<VisibilityState>({})\n const [rowSelection, setRowSelection] = useState({})\n\n const table = useReactTable({\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n getPaginationRowModel: paginated ? getPaginationRowModel() : undefined,\n onSortingChange: setSorting,\n getSortedRowModel: getSortedRowModel(),\n onColumnFiltersChange: setColumnFilters,\n getFilteredRowModel: getFilteredRowModel(),\n onColumnVisibilityChange: setColumnVisibility,\n onRowSelectionChange: setRowSelection,\n state: {\n sorting,\n columnFilters,\n columnVisibility,\n rowSelection,\n },\n initialState: {\n pagination: {\n pageSize,\n },\n },\n })\n\n return (\n <div className={cn('space-y-4', className)}>\n {searchable && searchColumn && (\n <div className='flex items-center'>\n <Input\n placeholder={searchPlaceholder}\n value={(table.getColumn(searchColumn)?.getFilterValue() as string) ?? ''}\n onChange={(event) => table.getColumn(searchColumn)?.setFilterValue(event.target.value)}\n className='max-w-sm'\n />\n </div>\n )}\n <div className='rounded-md border'>\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => {\n return (\n <TableHead key={header.id}>\n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n </TableHead>\n )\n })}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow key={row.id} data-state={row.getIsSelected() && 'selected'}>\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id}>{flexRender(cell.column.columnDef.cell, cell.getContext())}</TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell colSpan={columns.length} className='h-24 text-center'>\n {emptyMessage}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n {paginated && (\n <div className='flex items-center justify-between px-2'>\n <div className='flex-1 text-sm text-muted-foreground'>\n {table.getFilteredSelectedRowModel().rows.length > 0 && (\n <span>\n {table.getFilteredSelectedRowModel().rows.length} of {table.getFilteredRowModel().rows.length} row(s)\n selected.\n </span>\n )}\n </div>\n <div className='flex items-center space-x-6 lg:space-x-8'>\n <div className='flex items-center space-x-2'>\n <p className='text-sm font-medium'>Rows per page</p>\n <select\n className='h-8 w-[70px] rounded-md border border-input bg-background px-2 text-sm'\n value={table.getState().pagination.pageSize}\n onChange={(e) => {\n table.setPageSize(Number(e.target.value))\n }}\n >\n {pageSizeOptions.map((size) => (\n <option key={size} value={size}>\n {size}\n </option>\n ))}\n </select>\n </div>\n <div className='flex w-[100px] items-center justify-center text-sm font-medium'>\n Page {table.getState().pagination.pageIndex + 1} of {table.getPageCount()}\n </div>\n <div className='flex items-center space-x-2'>\n <Button\n variant='outline'\n size='sm'\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n >\n <ChevronLeft className='h-4 w-4' />\n Previous\n </Button>\n <Button variant='outline' size='sm' onClick={() => table.nextPage()} disabled={!table.getCanNextPage()}>\n Next\n <ChevronRight className='h-4 w-4' />\n </Button>\n </div>\n </div>\n </div>\n )}\n </div>\n )\n}\n\n// Helper component for sortable column headers\nexport function SortableHeader({ column, children }: { column: any; children: React.ReactNode }) {\n return (\n <Button variant='ghost' onClick={() => column.toggleSorting(column.getIsSorted() === 'asc')} className='-ml-4'>\n {children}\n {column.getIsSorted() === 'asc' ? (\n <ArrowUp className='ml-2 h-4 w-4' />\n ) : column.getIsSorted() === 'desc' ? (\n <ArrowDown className='ml-2 h-4 w-4' />\n ) : (\n <ArrowUpDown className='ml-2 h-4 w-4' />\n )}\n </Button>\n )\n}\n","import { Card, CardContent, CardHeader, CardTitle } from '@mdxui/primitives/card'\nimport { type LucideIcon, TrendingDown, TrendingUp } from 'lucide-react'\nimport { Area, AreaChart } from 'recharts'\nimport { cn } from '@mdxui/primitives/lib/utils'\n\nexport interface KPICardProps {\n /** Card title */\n title: string\n /** Main metric value */\n value: string | number\n /** Optional description or subtitle */\n description?: string\n /** Icon to display */\n icon?: LucideIcon\n /** Change percentage (e.g. 12.5 for +12.5%) */\n change?: number\n /** Trend direction - overrides auto-detection from change */\n trend?: 'up' | 'down' | 'neutral'\n /** Sparkline data points */\n sparklineData?: Array<{ value: number }>\n /** Sparkline color */\n sparklineColor?: string\n /** Additional CSS classes */\n className?: string\n /** Click handler */\n onClick?: () => void\n}\n\nexport function KPICard({\n title,\n value,\n description,\n icon: Icon,\n change,\n trend,\n sparklineData,\n sparklineColor = 'var(--chart-1)',\n className,\n onClick,\n}: KPICardProps) {\n // Auto-detect trend from change if not explicitly set\n const effectiveTrend = trend || (change !== undefined ? (change > 0 ? 'up' : change < 0 ? 'down' : 'neutral') : 'neutral')\n\n const isClickable = !!onClick\n\n return (\n <Card\n className={cn(\n isClickable && 'cursor-pointer transition-colors hover:bg-muted/50',\n className\n )}\n onClick={onClick}\n >\n <CardHeader className='flex flex-row items-center justify-between space-y-0 pb-2'>\n <CardTitle className='text-sm font-medium'>{title}</CardTitle>\n {Icon && <Icon className='h-4 w-4 text-muted-foreground' />}\n </CardHeader>\n <CardContent>\n <div className='flex items-end justify-between'>\n <div className='space-y-1'>\n <div className='text-2xl font-bold'>{value}</div>\n {description && (\n <p className='text-xs text-muted-foreground'>{description}</p>\n )}\n {change !== undefined && (\n <div className='flex items-center gap-1 text-xs'>\n {effectiveTrend === 'up' && (\n <>\n <TrendingUp className='h-3 w-3 text-green-500' />\n <span className='text-green-500'>+{change}%</span>\n </>\n )}\n {effectiveTrend === 'down' && (\n <>\n <TrendingDown className='h-3 w-3 text-red-500' />\n <span className='text-red-500'>{change}%</span>\n </>\n )}\n {effectiveTrend === 'neutral' && (\n <span className='text-muted-foreground'>{change}%</span>\n )}\n </div>\n )}\n </div>\n {sparklineData && sparklineData.length > 0 && (\n <div className='h-8 w-20'>\n <AreaChart\n data={sparklineData}\n width={80}\n height={32}\n margin={{ top: 2, right: 0, bottom: 0, left: 0 }}\n >\n <Area\n type='monotone'\n dataKey='value'\n stroke={sparklineColor}\n fill={sparklineColor}\n fillOpacity={0.2}\n strokeWidth={1.5}\n />\n </AreaChart>\n </div>\n )}\n </div>\n </CardContent>\n </Card>\n )\n}\n","import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@mdxui/primitives/card'\nimport { type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent } from '@mdxui/primitives/chart'\nimport { CartesianGrid, Line, LineChart as RechartsLineChart, XAxis, YAxis } from 'recharts'\n\nexport interface LineChartProps {\n /** Chart title */\n title?: string\n /** Chart description */\n description?: string\n /** Data points for the chart */\n data: Array<Record<string, any>>\n /** X-axis data key */\n xAxisKey: string\n /** Y-axis data keys (one or more lines) */\n yAxisKeys: string[]\n /** Chart configuration for colors and labels */\n config: ChartConfig\n /** Show grid lines */\n showGrid?: boolean\n /** Show X axis */\n showXAxis?: boolean\n /** Show Y axis */\n showYAxis?: boolean\n /** Show legend */\n showLegend?: boolean\n /** X-axis label formatter */\n xAxisFormatter?: (value: any) => string\n /** Y-axis label formatter */\n yAxisFormatter?: (value: any) => string\n /** Chart height */\n height?: number | string\n /** Additional CSS classes */\n className?: string\n /** Line type */\n lineType?: 'monotone' | 'linear' | 'step' | 'stepBefore' | 'stepAfter'\n /** Stroke width */\n strokeWidth?: number\n /** Show dots on data points */\n showDots?: boolean\n /** Dot radius */\n dotRadius?: number\n}\n\nexport function LineChart({\n title,\n description,\n data,\n xAxisKey,\n yAxisKeys,\n config,\n showGrid = true,\n showXAxis = true,\n showYAxis = true,\n showLegend = false,\n xAxisFormatter,\n yAxisFormatter,\n height = 350,\n className,\n lineType = 'monotone',\n strokeWidth = 2,\n showDots = true,\n dotRadius = 4,\n}: LineChartProps) {\n return (\n <Card className={className}>\n {(title || description) && (\n <CardHeader>\n {title && <CardTitle>{title}</CardTitle>}\n {description && <CardDescription>{description}</CardDescription>}\n </CardHeader>\n )}\n <CardContent>\n <ChartContainer config={config} className='w-full' style={{ height }}>\n <RechartsLineChart data={data}>\n {showGrid && <CartesianGrid strokeDasharray='3 3' className='stroke-muted' />}\n {showXAxis && (\n <XAxis\n dataKey={xAxisKey}\n tickLine={false}\n tickMargin={10}\n axisLine={false}\n tickFormatter={xAxisFormatter}\n />\n )}\n {showYAxis && (\n <YAxis\n tickLine={false}\n tickMargin={10}\n axisLine={false}\n tickFormatter={yAxisFormatter}\n />\n )}\n <ChartTooltip content={<ChartTooltipContent />} />\n {showLegend && <ChartLegend content={<ChartLegendContent />} />}\n {yAxisKeys.map((key) => (\n <Line\n key={key}\n type={lineType}\n dataKey={key}\n stroke={`var(--color-${key})`}\n strokeWidth={strokeWidth}\n dot={showDots ? { r: dotRadius } : false}\n activeDot={showDots ? { r: dotRadius + 2 } : false}\n />\n ))}\n </RechartsLineChart>\n </ChartContainer>\n </CardContent>\n </Card>\n )\n}\n","import { useAuth } from '@mdxui/auth'\nimport { DashboardShell } from '@mdxui/primitives/dashboard-shell'\nimport {\n Activity,\n BarChart3,\n CreditCard,\n Database,\n Key,\n Lock,\n Plug,\n Settings,\n Users,\n Webhook,\n} from 'lucide-react'\nimport { Outlet } from 'react-router-dom'\nimport { useDashboard } from '../../context/dashboard-context'\nimport { SidebarAd } from '../ui/sidebar-ad'\nimport { TeamSwitcher } from '../widgets/team-switcher'\nimport { type NavItem, NavMain } from './nav-main'\nimport { NavUser } from './nav-user'\n\nfunction useNavItems(): NavItem[] {\n const { routes, customRoutes } = useDashboard()\n\n const items: NavItem[] = []\n\n // Helper to convert custom routes to NavItems\n const customRouteToNavItem = (route: (typeof customRoutes)[number]): NavItem => ({\n title: route.label,\n url: route.path.startsWith('/') ? route.path : `/${route.path}`,\n icon: route.icon,\n })\n\n // Sort custom routes by order within each group\n const sortedCustomRoutes = [...customRoutes].sort((a, b) => {\n return (a.order ?? 100) - (b.order ?? 100)\n })\n\n // Filter custom routes by group\n const mainRoutes = sortedCustomRoutes.filter((r) => r.group === 'main' || r.group === undefined)\n const secondaryRoutes = sortedCustomRoutes.filter((r) => r.group === 'secondary')\n const adminRoutes = sortedCustomRoutes.filter((r) => r.group === 'admin')\n\n // Add built-in main section routes\n if (routes.overview) {\n items.push({\n title: 'Overview',\n url: '/',\n icon: BarChart3,\n })\n }\n\n if (routes.requests) {\n items.push({\n title: 'Requests',\n url: '/requests',\n icon: Activity,\n })\n }\n\n if (routes.keys) {\n items.push({\n title: 'API Keys',\n url: '/keys',\n icon: Key,\n })\n }\n\n if (routes.team) {\n items.push({\n title: 'Team',\n url: '/team',\n icon: Users,\n })\n }\n\n if (routes.billing) {\n items.push({\n title: 'Billing',\n url: '/billing',\n icon: CreditCard,\n })\n }\n\n if (routes.webhooks) {\n items.push({\n title: 'Webhooks',\n url: '/webhooks',\n icon: Webhook,\n items: [\n { title: 'Endpoints', url: '/webhooks/endpoints' },\n { title: 'Activity', url: '/webhooks/activity' },\n { title: 'Logs', url: '/webhooks/logs' },\n { title: 'Event Catalog', url: '/webhooks/event-catalog' },\n ],\n })\n }\n\n if (routes.database) {\n items.push({\n title: 'Database',\n url: '/database',\n icon: Database,\n })\n }\n\n if (routes.integrations) {\n items.push({\n title: 'Integrations',\n url: '/integrations',\n icon: Plug,\n })\n }\n\n if (routes.vault) {\n items.push({\n title: 'Vault',\n url: '/vault',\n icon: Lock,\n })\n }\n\n // Add custom main group routes (after built-in main routes)\n for (const route of mainRoutes) {\n items.push(customRouteToNavItem(route))\n }\n\n // Add custom secondary group routes\n for (const route of secondaryRoutes) {\n items.push(customRouteToNavItem(route))\n }\n\n // Add settings (between secondary and admin)\n if (routes.settings) {\n items.push({\n title: 'Settings',\n url: '/settings',\n icon: Settings,\n items: [\n { title: 'Profile', url: '/settings/profile' },\n { title: 'Security', url: '/settings/security' },\n { title: 'Sessions', url: '/settings/sessions' },\n ],\n })\n }\n\n // Add custom admin group routes (after settings)\n for (const route of adminRoutes) {\n items.push(customRouteToNavItem(route))\n }\n\n return items\n}\n\nexport function DashboardLayout() {\n const { user, signOut } = useAuth()\n const navItems = useNavItems()\n\n const navUser = user\n ? {\n id: user.id,\n name: user.firstName && user.lastName ? `${user.firstName} ${user.lastName}` : user.email,\n email: user.email,\n avatar: user.profilePictureUrl ?? undefined,\n }\n : null\n\n return (\n <DashboardShell\n header={<TeamSwitcher />}\n navigation={<NavMain items={navItems} />}\n footer={\n <>\n <SidebarAd\n badge=\"Pro\"\n headline=\"Upgrade to Pro\"\n description=\"Get unlimited API calls, priority support, and advanced analytics.\"\n ctaText=\"Upgrade Now\"\n ctaHref=\"/billing\"\n />\n {navUser && <NavUser user={navUser} onSignOut={signOut} />}\n </>\n }\n >\n <Outlet />\n </DashboardShell>\n )\n}\n","import { createContext, type ReactNode, useContext, useMemo } from 'react'\nimport { useCustomThemeVariables, useThemeLoader } from '../hooks/use-theme-loader'\nimport type { CustomRoute, DashboardConfig, DashboardIdentity, DashboardRoutes } from '../types/config'\nimport { defaultConfig, defaultIdentity, defaultRoutes } from '../types/config'\n\ninterface DashboardContextValue {\n config: Required<Omit<DashboardConfig, 'identity' | 'devToken' | 'debug'>> & {\n identity: DashboardIdentity\n devToken?: string\n debug?: boolean\n }\n routes: Required<DashboardRoutes>\n customRoutes: CustomRoute[]\n basePath: string\n}\n\nconst DashboardContext = createContext<DashboardContextValue | null>(null)\n\ninterface DashboardProviderProps {\n config: DashboardConfig\n children: ReactNode\n}\n\nexport function DashboardProvider({ config, children }: DashboardProviderProps) {\n const value = useMemo<DashboardContextValue>(() => {\n const mergedConfig = {\n ...defaultConfig,\n ...config,\n branding: { ...defaultConfig.branding, ...config.branding },\n routes: { ...defaultRoutes, ...config.routes },\n customRoutes: config.customRoutes ?? [],\n theme: { ...defaultConfig.theme, ...config.theme },\n identity: { ...defaultIdentity, ...config.identity },\n }\n\n return {\n config: mergedConfig,\n routes: mergedConfig.routes,\n customRoutes: mergedConfig.customRoutes,\n basePath: mergedConfig.basePath,\n }\n }, [config])\n\n // Apply theme preset from props (applies CSS variables to document.documentElement)\n // Mode is controlled by next-themes (user toggle), preset comes from config\n useThemeLoader(value.config.theme.preset)\n\n // Apply custom CSS variable overrides on top of the theme preset\n useCustomThemeVariables(value.config.theme.custom)\n\n return <DashboardContext.Provider value={value}>{children}</DashboardContext.Provider>\n}\n\nexport function useDashboard() {\n const context = useContext(DashboardContext)\n if (!context) {\n throw new Error('useDashboard must be used within a DashboardProvider')\n }\n return context\n}\n\nexport function useRoutes() {\n const { routes } = useDashboard()\n return routes\n}\n\nexport function useCustomRoutes() {\n const { customRoutes } = useDashboard()\n return customRoutes\n}\n","import { useTheme } from 'next-themes'\nimport { useEffect, useRef } from 'react'\nimport { applyThemeToElement } from '@mdxui/themes'\n\n/**\n * Hook that applies a theme preset to the document.\n * Uses next-themes' resolvedTheme to stay in sync with theme toggles.\n */\nexport function useThemeLoader(preset: string | undefined) {\n const { resolvedTheme } = useTheme()\n const currentPresetRef = useRef<string | undefined>(undefined)\n const currentModeRef = useRef<string | undefined>(undefined)\n\n useEffect(() => {\n // Skip if no preset or no resolved theme yet\n if (!preset || !resolvedTheme) return\n\n // Skip if same as current\n if (preset === currentPresetRef.current && resolvedTheme === currentModeRef.current) return\n\n const mode = resolvedTheme === 'dark' ? 'dark' : 'light'\n applyThemeToElement(document.documentElement, preset, mode)\n\n currentPresetRef.current = preset\n currentModeRef.current = resolvedTheme\n }, [preset, resolvedTheme])\n}\n\n/**\n * Hook that applies custom CSS variable overrides.\n * These override the theme preset values.\n */\nexport function useCustomThemeVariables(custom: Record<string, string> | undefined) {\n useEffect(() => {\n if (!custom || Object.keys(custom).length === 0) {\n return\n }\n\n const root = document.documentElement\n const previousValues: Record<string, string> = {}\n\n // Apply custom variables\n for (const [key, value] of Object.entries(custom)) {\n previousValues[key] = root.style.getPropertyValue(key)\n root.style.setProperty(key, value)\n }\n\n // Cleanup: restore previous values\n return () => {\n for (const [key, value] of Object.entries(previousValues)) {\n if (value) {\n root.style.setProperty(key, value)\n } else {\n root.style.removeProperty(key)\n }\n }\n }\n }, [custom])\n}\n","import type { LucideIcon } from 'lucide-react'\nimport type { ReactNode } from 'react'\nimport type { Theme } from '@mdxui/themes'\n\n/**\n * Custom route definition for extending the dashboard with additional pages.\n * Allows consumers to add their own pages without modifying the cockpit package.\n */\nexport interface CustomRoute {\n /** URL path (e.g., '/pipeline', '/analytics') */\n path: string\n /** Display label in sidebar navigation */\n label: string\n /** Lucide icon component for sidebar */\n icon?: LucideIcon\n /** React element to render for this route */\n element: ReactNode\n /**\n * Navigation group placement:\n * - 'main' (default): Primary navigation section\n * - 'secondary': Below main nav, before settings\n * - 'admin': Admin/settings section at bottom\n */\n group?: 'main' | 'secondary' | 'admin'\n /** Sort order within group (lower = higher in list) */\n order?: number\n /** Make this route the index/home page */\n index?: boolean\n}\n\nexport interface DashboardRoutes {\n overview?: boolean\n requests?: boolean\n keys?: boolean\n team?: boolean\n billing?: boolean\n settings?: boolean\n webhooks?: boolean\n database?: boolean\n integrations?: boolean\n vault?: boolean\n}\n\nexport interface DashboardBranding {\n name?: string\n logo?: ReactNode\n}\n\nexport interface DashboardTheme {\n /**\n * Theme preset name. Built-in presets include:\n * 'cyan', 'anthropic', 'linear', 'stripe', 'arc', 'airbnb', 'bubblegum',\n * 'mono', 'notation', 'polaris', 'sage', 'x'\n *\n * You can also pass a custom string if you're loading your own theme CSS.\n */\n preset?: Theme\n mode?: 'light' | 'dark' | 'system'\n /** Custom CSS variable overrides (e.g., { '--primary': 'oklch(0.6 0.2 240)' }) */\n custom?: Record<string, string>\n}\n\n/**\n * Identity provider configuration for authentication and user management.\n * Powered by id.org.ai\n */\nexport interface DashboardIdentity {\n /** Client ID from identity provider dashboard */\n clientId: string\n /** Custom authentication domain (optional - if not set, use devMode) */\n apiHostname?: string\n /** Enable dev mode - stores refresh token in localStorage instead of secure cookie */\n devMode?: boolean\n /** Redirect URI after sign-in (defaults to current origin + basePath) */\n redirectUri?: string\n /** Redirect URI after sign-out (defaults to current origin) */\n signOutRedirectUri?: string\n /** Use mock widgets instead of real identity widgets (for demos/development) */\n useMockWidgets?: boolean\n /** Whether authentication is required to view the dashboard (default: true) */\n required?: boolean\n /** What to do when user is not authenticated */\n onUnauthenticated?: 'redirect' | 'landing' | 'allow'\n /** URL to redirect to when not authenticated (used with onUnauthenticated: 'redirect') */\n unauthenticatedRedirectUrl?: string\n /** Custom landing component to show when not authenticated (used with onUnauthenticated: 'landing') */\n landingComponent?: ReactNode\n}\n\nexport interface DashboardConfig {\n basePath?: string\n branding?: DashboardBranding\n routes?: DashboardRoutes\n /**\n * Custom routes to add to the dashboard.\n * These will be rendered alongside built-in routes and appear in sidebar navigation.\n */\n customRoutes?: CustomRoute[]\n theme?: DashboardTheme\n /** Identity provider configuration for authentication and user management */\n identity: DashboardIdentity\n /**\n * Development token for testing SDK without auth flow.\n * Pass DO_TOKEN from server-side environment variable.\n * Only used in development - auth tokens take priority in production.\n */\n devToken?: string\n /** Enable SDK debug logging */\n debug?: boolean\n}\n\n// Default values\nexport const defaultRoutes: Required<DashboardRoutes> = {\n overview: true,\n requests: true,\n keys: true,\n team: true,\n billing: true,\n settings: true,\n webhooks: false,\n database: false,\n integrations: false,\n vault: false,\n}\n\nexport const defaultIdentity: Omit<DashboardIdentity, 'clientId'> = {\n devMode: false,\n useMockWidgets: false,\n required: true,\n onUnauthenticated: 'landing',\n}\n\nexport const defaultConfig: Omit<Required<DashboardConfig>, 'identity' | 'devToken' | 'debug'> = {\n basePath: '/',\n branding: {\n name: 'Dashboard',\n logo: undefined,\n },\n routes: defaultRoutes,\n customRoutes: [],\n theme: {\n preset: 'cyan',\n mode: 'system',\n custom: {},\n },\n}\n","import { useSidebar } from '@mdxui/primitives/sidebar'\nimport { X } from 'lucide-react'\nimport { useState } from 'react'\nimport { Link } from 'react-router-dom'\n\ninterface SidebarAdProps {\n headline: string\n description?: string\n ctaText: string\n ctaHref?: string\n onCtaClick?: () => void\n dismissible?: boolean\n onDismiss?: () => void\n badge?: string\n}\n\nexport function SidebarAd({ headline, description, ctaText, ctaHref, onCtaClick, dismissible = true, onDismiss, badge }: SidebarAdProps) {\n const [isDismissed, setIsDismissed] = useState(false)\n const { state } = useSidebar()\n\n if (isDismissed) return null\n\n // Hide when sidebar is collapsed\n if (state === 'collapsed') return null\n\n const handleDismiss = () => {\n setIsDismissed(true)\n onDismiss?.()\n }\n\n const handleCtaClick = () => {\n if (onCtaClick) {\n onCtaClick()\n }\n }\n\n const ctaContent = (\n <button\n type='button'\n onClick={handleCtaClick}\n className='mt-1 w-full rounded-md py-2 px-3 text-xs font-medium bg-primary text-primary-foreground hover:opacity-90 transition-opacity cursor-pointer'>\n {ctaText}\n </button>\n )\n\n return (\n <div className='mx-2 mb-2 relative rounded-md border border-border bg-card p-4 shadow-sm'>\n {dismissible && (\n <button\n type='button'\n onClick={handleDismiss}\n className='absolute top-2.5 right-2.5 text-muted-foreground hover:text-foreground transition-colors'\n aria-label='Dismiss'>\n <X className='h-3.5 w-3.5' />\n </button>\n )}\n\n <div className='flex flex-col gap-3'>\n {badge && (\n <span className='inline-flex w-fit items-center rounded-md px-2 py-0.5 text-[10px] font-medium uppercase tracking-wide bg-primary text-primary-foreground'>\n {badge}\n </span>\n )}\n\n <div className='pr-4'>\n <p className='text-sm font-medium text-foreground leading-tight'>{headline}</p>\n {description && <p className='mt-1.5 text-xs text-muted-foreground leading-relaxed'>{description}</p>}\n </div>\n\n {ctaHref ? (\n <Link to={ctaHref} className='block' target='_blank' rel='noopener noreferrer'>\n {ctaContent}\n </Link>\n ) : (\n ctaContent\n )}\n </div>\n </div>\n )\n}\n","import { OrganizationSwitcher, useAuth } from '@mdxui/auth'\nimport { SidebarMenu, SidebarMenuButton, SidebarMenuItem } from '@mdxui/primitives/sidebar'\nimport { Building2 } from 'lucide-react'\n\n/**\n * TeamSwitcher component that uses WorkOS authentication.\n * Shows the WorkOS OrganizationSwitcher widget when authenticated with an organization,\n * or a \"No Organization\" placeholder when not.\n */\nexport function TeamSwitcher() {\n const { getAccessToken, switchToOrganization, organizationId } = useAuth()\n\n // No organization - show placeholder\n if (!organizationId) {\n return <TeamSwitcherNone />\n }\n\n // Adapt switchToOrganization to match OrganizationSwitcher's expected signature\n const handleSwitchOrganization = ({ organizationId }: { organizationId: string }) => {\n return switchToOrganization({ organizationId })\n }\n\n // Show WorkOS OrganizationSwitcher widget\n return (\n <SidebarMenu>\n <SidebarMenuItem>\n <div className='organization-switcher-wrapper'>\n <OrganizationSwitcher\n authToken={getAccessToken}\n switchToOrganization={handleSwitchOrganization}\n />\n </div>\n </SidebarMenuItem>\n </SidebarMenu>\n )\n}\n\n/** No organization placeholder */\nfunction TeamSwitcherNone() {\n return (\n <SidebarMenu>\n <SidebarMenuItem>\n <SidebarMenuButton size='lg' className='pointer-events-none'>\n <div className='bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-8 items-center justify-center rounded-lg'>\n <Building2 className='size-4' />\n </div>\n <div className='grid flex-1 text-left text-sm leading-tight'>\n <span className='truncate font-medium'>No Organization</span>\n </div>\n </SidebarMenuButton>\n </SidebarMenuItem>\n </SidebarMenu>\n )\n}\n","import { SidebarNav, type SidebarNavItem } from '@mdxui/primitives/sidebar-nav'\nimport type { LucideIcon } from 'lucide-react'\nimport { Link, useLocation } from 'react-router-dom'\n\nexport interface NavItem {\n title: string\n url: string\n icon?: LucideIcon\n isActive?: boolean\n items?: NavItem[]\n}\n\ninterface NavMainProps {\n items: NavItem[]\n}\n\n/** React Router Link component adapter for SidebarNav */\nfunction RouterLink({ href, children, className }: { href: string; children: React.ReactNode; className?: string }) {\n return (\n <Link to={href} className={className}>\n {children}\n </Link>\n )\n}\n\nexport function NavMain({ items }: NavMainProps) {\n const location = useLocation()\n\n // Map NavItem[] to SidebarNavItem[] (they're compatible)\n const navItems: SidebarNavItem[] = items\n\n return (\n <SidebarNav\n items={navItems}\n currentPath={location.pathname}\n label=\"Dashboard\"\n LinkComponent={RouterLink}\n />\n )\n}\n","import { defaultUserMenuItems, SidebarUser, type SidebarUserData } from '@mdxui/primitives/sidebar-user'\nimport { useTheme } from 'next-themes'\n\ninterface NavUser {\n id: string\n name: string\n email: string\n avatar?: string\n}\n\ninterface NavUserProps {\n user: NavUser\n onSignOut: () => void | Promise<void>\n}\n\nexport function NavUser({ user, onSignOut }: NavUserProps) {\n const { resolvedTheme, setTheme } = useTheme()\n\n const userData: SidebarUserData = {\n name: user.name,\n email: user.email,\n avatar: user.avatar,\n }\n\n return (\n <SidebarUser\n user={userData}\n onSignOut={onSignOut}\n theme={resolvedTheme === 'dark' ? 'dark' : 'light'}\n onThemeToggle={() => setTheme(resolvedTheme === 'dark' ? 'light' : 'dark')}\n menuItems={defaultUserMenuItems}\n />\n )\n}\n","import { useAuth } from '@mdxui/auth'\nimport { Button } from '@mdxui/primitives/button'\nimport { ArrowRight, BarChart3, Key, Shield, Users } from 'lucide-react'\nimport { useDashboard } from '../../context/dashboard-context'\n\ninterface FeatureCardProps {\n icon: React.ReactNode\n title: string\n description: string\n}\n\nfunction FeatureCard({ icon, title, description }: FeatureCardProps) {\n return (\n <div className=\"flex flex-col items-center text-center p-6 rounded-lg border bg-card\">\n <div className=\"p-3 rounded-full bg-primary/10 text-primary mb-4\">\n {icon}\n </div>\n <h3 className=\"font-semibold mb-2\">{title}</h3>\n <p className=\"text-sm text-muted-foreground\">{description}</p>\n </div>\n )\n}\n\nexport function LandingPage() {\n const { signIn } = useAuth()\n const { config } = useDashboard()\n const brandName = config.branding?.name ?? 'Dashboard'\n\n return (\n <div className=\"min-h-screen bg-background flex flex-col\">\n {/* Header */}\n <header className=\"border-b\">\n <div className=\"container mx-auto px-4 h-16 flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n {config.branding?.logo}\n <span className=\"font-semibold text-lg\">{brandName}</span>\n </div>\n <Button onClick={() => signIn()}>\n Sign In\n <ArrowRight className=\"ml-2 h-4 w-4\" />\n </Button>\n </div>\n </header>\n\n {/* Hero */}\n <main className=\"flex-1\">\n <section className=\"container mx-auto px-4 py-24 text-center\">\n <h1 className=\"text-4xl sm:text-5xl font-bold tracking-tight mb-6\">\n Welcome to {brandName}\n </h1>\n <p className=\"text-xl text-muted-foreground max-w-2xl mx-auto mb-8\">\n Manage your API keys, monitor usage, and collaborate with your team—all in one place.\n </p>\n <Button size=\"lg\" onClick={() => signIn()}>\n Get Started\n <ArrowRight className=\"ml-2 h-4 w-4\" />\n </Button>\n </section>\n\n {/* Features */}\n <section className=\"container mx-auto px-4 py-16\">\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6\">\n <FeatureCard\n icon={<Key className=\"h-6 w-6\" />}\n title=\"API Key Management\"\n description=\"Create, rotate, and revoke API keys with fine-grained permissions.\"\n />\n <FeatureCard\n icon={<BarChart3 className=\"h-6 w-6\" />}\n title=\"Usage Analytics\"\n description=\"Monitor API requests, track usage patterns, and optimize performance.\"\n />\n <FeatureCard\n icon={<Users className=\"h-6 w-6\" />}\n title=\"Team Collaboration\"\n description=\"Invite team members, manage roles, and control access levels.\"\n />\n <FeatureCard\n icon={<Shield className=\"h-6 w-6\" />}\n title=\"Security First\"\n description=\"Enterprise-grade security with audit logs and compliance controls.\"\n />\n </div>\n </section>\n </main>\n\n {/* Footer */}\n <footer className=\"border-t py-8\">\n <div className=\"container mx-auto px-4 text-center text-sm text-muted-foreground\">\n <p>© {new Date().getFullYear()} {brandName}. All rights reserved.</p>\n </div>\n </footer>\n </div>\n )\n}\n","import { cn } from '@mdxui/primitives/lib/utils'\nimport { Check, Copy } from 'lucide-react'\nimport { useTheme } from 'next-themes'\nimport { useEffect, useState } from 'react'\nimport { codeToHtml } from 'shiki'\n\ninterface JsonViewerProps {\n data: unknown\n className?: string\n}\n\nexport function JsonViewer({ data, className }: JsonViewerProps) {\n const [html, setHtml] = useState<string>('')\n const [copied, setCopied] = useState(false)\n const { resolvedTheme } = useTheme()\n const jsonString = JSON.stringify(data, null, 2)\n\n useEffect(() => {\n const theme = resolvedTheme === 'dark' ? 'github-dark' : 'github-light'\n codeToHtml(jsonString, {\n lang: 'json',\n theme,\n }).then(setHtml)\n }, [jsonString, resolvedTheme])\n\n const handleCopy = async () => {\n await navigator.clipboard.writeText(jsonString)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n }\n\n return (\n <div className={cn('relative rounded-md border bg-muted', className)}>\n <button\n type='button'\n className='absolute top-2 right-2 text-muted-foreground hover:text-foreground transition-colors'\n onClick={handleCopy}>\n {copied ? <Check className='h-3.5 w-3.5' /> : <Copy className='h-3.5 w-3.5' />}\n </button>\n <div\n className='p-4 overflow-auto text-sm [&_pre]:bg-transparent! [&_code]:bg-transparent! [&_pre]:m-0'\n // biome-ignore lint/security/noDangerouslySetInnerHtml: we need to set the html string\n dangerouslySetInnerHTML={{ __html: html }}\n />\n </div>\n )\n}\n","import { cn } from '@mdxui/primitives/lib/utils';\n\ntype StatusType = 'success' | 'warning' | 'error';\n\ninterface StatusBadgeProps {\n status: number | StatusType;\n className?: string;\n showText?: boolean;\n}\n\nfunction getStatusFromCode(code: number): StatusType {\n if (code >= 200 && code < 300) return 'success';\n if (code >= 400 && code < 500) return 'warning';\n return 'error';\n}\n\nconst statusConfig: Record<StatusType, { bg: string; text: string; dot: string }> = {\n success: {\n bg: 'bg-success/10',\n text: 'text-success',\n dot: 'bg-success',\n },\n warning: {\n bg: 'bg-warning/10',\n text: 'text-warning-foreground',\n dot: 'bg-warning',\n },\n error: {\n bg: 'bg-destructive/10',\n text: 'text-destructive',\n dot: 'bg-destructive',\n },\n};\n\nexport function StatusBadge({ status, className, showText = true }: StatusBadgeProps) {\n const statusType = typeof status === 'number' ? getStatusFromCode(status) : status;\n const config = statusConfig[statusType];\n const displayText = typeof status === 'number' ? status.toString() : statusType;\n\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full px-2 py-0.5 text-xs font-medium',\n config.bg,\n config.text,\n className\n )}\n >\n <span className={cn('h-1.5 w-1.5 rounded-full', config.dot)} />\n {showText && <span>{displayText}</span>}\n </span>\n );\n}\n\nexport function StatusDot({ status, className }: { status: number | StatusType; className?: string }) {\n const statusType = typeof status === 'number' ? getStatusFromCode(status) : status;\n const config = statusConfig[statusType];\n\n return <span className={cn('h-2 w-2 rounded-full', config.dot, className)} />;\n}\n","import { Button } from '@mdxui/primitives/button'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@mdxui/primitives/dialog'\n\ninterface VaultDeleteDialogProps {\n isOpen: boolean\n onClose: () => void\n itemName: string\n onConfirm: () => void\n}\n\nexport function VaultDeleteDialog({ isOpen, onClose, itemName, onConfirm }: VaultDeleteDialogProps) {\n return (\n <Dialog open={isOpen} onOpenChange={onClose}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Delete Credentials</DialogTitle>\n <DialogDescription>\n Are you sure you want to delete credentials for {itemName}? This action cannot be undone.\n </DialogDescription>\n </DialogHeader>\n <DialogFooter>\n <Button variant=\"outline\" onClick={onClose}>\n Cancel\n </Button>\n <Button variant=\"destructive\" onClick={onConfirm}>\n Delete\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n )\n}\n","import { Button } from '@mdxui/primitives/button'\nimport { Lock } from 'lucide-react'\n\ninterface VaultEmptyStateProps {\n onAddCredential: () => void\n}\n\nexport function VaultEmptyState({ onAddCredential }: VaultEmptyStateProps) {\n return (\n <div className=\"flex flex-col items-center justify-center rounded-md border border-dashed py-24 px-4 text-center\">\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-muted mb-4\">\n <Lock className=\"h-6 w-6 text-muted-foreground\" />\n </div>\n <h3 className=\"text-lg font-semibold mb-2\">No saved credentials</h3>\n <p className=\"text-sm text-muted-foreground mb-6 max-w-md\">\n Add API keys and account credentials for your agents to use securely.\n </p>\n <Button onClick={onAddCredential}>Add Credential</Button>\n </div>\n )\n}\n","import { Button } from '@mdxui/primitives/button'\nimport {\n Dialog,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@mdxui/primitives/dialog'\nimport { Input } from '@mdxui/primitives/input'\nimport { Label } from '@mdxui/primitives/label'\nimport { Key } from 'lucide-react'\nimport { useState } from 'react'\nimport type { VaultField } from '../../lib/vault-mock'\n\ninterface VaultInputModalProps {\n isOpen: boolean\n onClose: () => void\n mode: 'create' | 'rotate'\n integration?: {\n id: string\n name: string\n logoUrl?: string\n fields: VaultField[]\n }\n onSave: (credentials: Record<string, string>) => Promise<void>\n}\n\nexport function VaultInputModal({\n isOpen,\n onClose,\n mode,\n integration,\n onSave,\n}: VaultInputModalProps) {\n const [values, setValues] = useState<Record<string, string>>({})\n const [loading, setLoading] = useState(false)\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n setLoading(true)\n try {\n await onSave(values)\n setValues({})\n onClose()\n } catch (error) {\n console.error('Failed to save credentials:', error)\n } finally {\n setLoading(false)\n }\n }\n\n const handleClose = () => {\n setValues({})\n onClose()\n }\n\n if (!integration) return null\n\n const isValid = integration.fields.filter((f) => f.required).every((f) => values[f.key]?.trim())\n\n return (\n <Dialog open={isOpen} onOpenChange={handleClose}>\n <DialogContent>\n <DialogHeader>\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-md bg-white overflow-hidden p-1 border border-border\">\n {integration.logoUrl ? (\n <img\n src={integration.logoUrl}\n alt={integration.name}\n width={32}\n height={32}\n className=\"h-full w-full object-contain rounded-sm\"\n />\n ) : (\n <Key className=\"h-5 w-5 text-muted-foreground\" />\n )}\n </div>\n <DialogTitle>\n {mode === 'create' ? 'Add' : 'Rotate'} {integration.name} Credentials\n </DialogTitle>\n </div>\n </DialogHeader>\n <form onSubmit={handleSubmit}>\n <div className=\"grid gap-4 py-4\">\n {integration.fields.map((field) => (\n <div key={field.key} className=\"grid gap-2\">\n <Label htmlFor={field.key}>\n {field.label}\n {field.required && <span className=\"text-destructive\">*</span>}\n </Label>\n <Input\n id={field.key}\n type={field.type}\n placeholder={field.placeholder}\n value={values[field.key] || ''}\n onChange={(e) =>\n setValues((prev) => ({\n ...prev,\n [field.key]: e.target.value,\n }))\n }\n required={field.required}\n />\n </div>\n ))}\n </div>\n <DialogFooter>\n <Button type=\"button\" variant=\"outline\" onClick={handleClose}>\n Cancel\n </Button>\n <Button type=\"submit\" disabled={loading || !isValid}>\n {loading ? 'Saving...' : 'Save'}\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n","import { Button } from '@mdxui/primitives/button'\nimport { Card } from '@mdxui/primitives/card'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@mdxui/primitives/dropdown-menu'\nimport { Key, MoreVertical } from 'lucide-react'\n\ninterface VaultItemCardProps {\n id: string\n name: string\n logoUrl?: string\n createdAt: Date\n updatedAt: Date\n onRotate: (id: string) => void\n onDelete: (id: string) => void\n}\n\nfunction formatDate(date: Date): string {\n return date.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n })\n}\n\nexport function VaultItemCard({\n id,\n name,\n logoUrl,\n createdAt,\n updatedAt,\n onRotate,\n onDelete,\n}: VaultItemCardProps) {\n const wasRotated = updatedAt.getTime() !== createdAt.getTime()\n\n return (\n <Card noPadding className=\"p-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-md bg-white overflow-hidden p-1 border border-border\">\n {logoUrl ? (\n <img\n src={logoUrl}\n alt={name}\n width={32}\n height={32}\n className=\"h-full w-full object-contain rounded-sm\"\n />\n ) : (\n <Key className=\"h-5 w-5 text-muted-foreground\" />\n )}\n </div>\n <div>\n <h4 className=\"text-sm font-medium\">{name}</h4>\n <p className=\"text-xs text-muted-foreground\">\n {wasRotated ? `Rotated: ${formatDate(updatedAt)}` : `Created: ${formatDate(createdAt)}`}\n </p>\n </div>\n </div>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon-sm\">\n <MoreVertical className=\"h-4 w-4\" />\n <span className=\"sr-only\">Open menu</span>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem onClick={() => onRotate(id)}>Rotate</DropdownMenuItem>\n <DropdownMenuItem\n className=\"text-destructive focus:text-destructive\"\n onClick={() => onDelete(id)}\n >\n Delete\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </Card>\n )\n}\n","import { useState } from 'react'\nimport { integrationFields, type VaultItem } from '../../lib/vault-mock'\nimport { VaultDeleteDialog } from './vault-delete-dialog'\nimport { VaultEmptyState } from './vault-empty-state'\nimport { VaultInputModal } from './vault-input-modal'\nimport { VaultItemCard } from './vault-item-card'\n\ninterface VaultListProps {\n items: VaultItem[]\n onRotate: (id: string, credentials: Record<string, string>) => Promise<void>\n onDelete: (id: string) => Promise<void>\n onOpenAddModal: () => void\n}\n\nexport function VaultList({ items, onRotate, onDelete, onOpenAddModal }: VaultListProps) {\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false)\n const [inputModalOpen, setInputModalOpen] = useState(false)\n const [selectedItem, setSelectedItem] = useState<VaultItem | null>(null)\n const [modalMode, setModalMode] = useState<'create' | 'rotate'>('create')\n\n const handleRotate = (id: string) => {\n const item = items.find((i) => i.id === id)\n if (!item) return\n\n setSelectedItem(item)\n setModalMode('rotate')\n setInputModalOpen(true)\n }\n\n const handleDeleteClick = (id: string) => {\n const item = items.find((i) => i.id === id)\n if (!item) return\n\n setSelectedItem(item)\n setDeleteDialogOpen(true)\n }\n\n const handleConfirmDelete = async () => {\n if (!selectedItem) return\n\n await onDelete(selectedItem.id)\n setDeleteDialogOpen(false)\n setSelectedItem(null)\n }\n\n const handleSave = async (credentials: Record<string, string>) => {\n if (modalMode === 'rotate' && selectedItem) {\n await onRotate(selectedItem.id, credentials)\n }\n setInputModalOpen(false)\n setSelectedItem(null)\n }\n\n const getIntegrationForModal = () => {\n if (!selectedItem) return undefined\n\n const fields = integrationFields[selectedItem.integrationId] || integrationFields.default\n return {\n id: selectedItem.integrationId,\n name: selectedItem.name,\n logoUrl: selectedItem.logoUrl,\n fields,\n }\n }\n\n if (items.length === 0) {\n return <VaultEmptyState onAddCredential={onOpenAddModal} />\n }\n\n return (\n <>\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {items.map((item) => (\n <VaultItemCard\n key={item.id}\n id={item.id}\n name={item.name}\n logoUrl={item.logoUrl}\n createdAt={item.createdAt}\n updatedAt={item.updatedAt}\n onRotate={handleRotate}\n onDelete={handleDeleteClick}\n />\n ))}\n </div>\n\n <VaultDeleteDialog\n isOpen={deleteDialogOpen}\n onClose={() => {\n setDeleteDialogOpen(false)\n setSelectedItem(null)\n }}\n itemName={selectedItem?.name || ''}\n onConfirm={handleConfirmDelete}\n />\n\n <VaultInputModal\n isOpen={inputModalOpen}\n onClose={() => {\n setInputModalOpen(false)\n setSelectedItem(null)\n }}\n mode={modalMode}\n integration={getIntegrationForModal()}\n onSave={handleSave}\n />\n </>\n )\n}\n","export interface VaultItem {\n id: string\n name: string\n integrationId: string\n logoUrl?: string\n createdAt: Date\n updatedAt: Date\n}\n\nexport interface VaultField {\n key: string\n label: string\n type: 'text' | 'password'\n required: boolean\n placeholder?: string\n}\n\n// Zapier CDN logo URLs\nexport const logos = {\n openai:\n 'https://zapier-images.imgix.net/storage/services/0db0a72498194850b1be8614efc82875.png?auto=format&fit=crop&ixlib=react-9.10.0&q=50&w=60&h=60&dpr=2',\n anthropic:\n 'https://zapier-images.imgix.net/storage/services/a2d6219ce3ad44f0daa2bd0097384aec.png?auto=format&fit=crop&ixlib=react-9.10.0&q=50&w=60&h=60&dpr=2',\n github:\n 'https://zapier-images.imgix.net/storage/services/c63f7c57dc0afb733535a5adccce4d01.png?auto=format&fit=crop&ixlib=react-9.10.0&q=50&w=60&h=60&dpr=2',\n slack:\n 'https://zapier-images.imgix.net/storage/services/6cf3f5a461feadfba7abc93f4c395b33.png?auto=format&fit=crop&ixlib=react-9.10.0&q=50&w=60&h=60&dpr=2',\n aws: 'https://zapier-images.imgix.net/storage/services/7633e0c2a87f5c36ebe387e5e8065c92.png?auto=format&fit=crop&ixlib=react-9.10.0&q=50&w=60&h=60&dpr=2',\n stripe:\n 'https://zapier-images.imgix.net/storage/services/58576265fb574acf48e65da92b12d764.png?auto=format&fit=crop&ixlib=react-9.10.0&q=50&w=60&h=60&dpr=2',\n}\n\n// Mock vault items\nexport const mockVaultItems: VaultItem[] = [\n {\n id: '1',\n name: 'OpenAI',\n integrationId: 'openai',\n logoUrl: logos.openai,\n createdAt: new Date('2024-12-01'),\n updatedAt: new Date('2024-12-08'),\n },\n {\n id: '2',\n name: 'Anthropic',\n integrationId: 'anthropic',\n logoUrl: logos.anthropic,\n createdAt: new Date('2024-12-05'),\n updatedAt: new Date('2024-12-05'),\n },\n {\n id: '3',\n name: 'GitHub',\n integrationId: 'github',\n logoUrl: logos.github,\n createdAt: new Date('2024-11-28'),\n updatedAt: new Date('2024-12-03'),\n },\n {\n id: '4',\n name: 'Slack',\n integrationId: 'slack',\n logoUrl: logos.slack,\n createdAt: new Date('2024-12-02'),\n updatedAt: new Date('2024-12-02'),\n },\n {\n id: '5',\n name: 'AWS',\n integrationId: 'aws',\n logoUrl: logos.aws,\n createdAt: new Date('2024-11-25'),\n updatedAt: new Date('2024-12-07'),\n },\n]\n\n// Field configurations per integration\nexport const integrationFields: Record<string, VaultField[]> = {\n openai: [{ key: 'api_key', label: 'API Key', type: 'password', required: true, placeholder: 'sk-...' }],\n anthropic: [{ key: 'api_key', label: 'API Key', type: 'password', required: true, placeholder: 'sk-ant-...' }],\n twitter: [\n { key: 'username', label: 'Username', type: 'text', required: true },\n { key: 'password', label: 'Password', type: 'password', required: true },\n ],\n github: [{ key: 'personal_access_token', label: 'Personal Access Token', type: 'password', required: true, placeholder: 'ghp_...' }],\n slack: [\n { key: 'bot_token', label: 'Bot Token', type: 'password', required: true, placeholder: 'xoxb-...' },\n { key: 'signing_secret', label: 'Signing Secret', type: 'password', required: true },\n ],\n aws: [\n { key: 'access_key_id', label: 'Access Key ID', type: 'text', required: true, placeholder: 'AKIA...' },\n { key: 'secret_access_key', label: 'Secret Access Key', type: 'password', required: true },\n ],\n default: [{ key: 'api_key', label: 'API Key', type: 'password', required: true }],\n}\n\n// Available integrations for the \"Add Credential\" flow\nexport const availableIntegrations = [\n { id: 'openai', name: 'OpenAI', logoUrl: logos.openai },\n { id: 'anthropic', name: 'Anthropic', logoUrl: logos.anthropic },\n { id: 'github', name: 'GitHub', logoUrl: logos.github },\n { id: 'slack', name: 'Slack', logoUrl: logos.slack },\n { id: 'aws', name: 'AWS', logoUrl: logos.aws },\n { id: 'stripe', name: 'Stripe', logoUrl: logos.stripe },\n]\n","/**\n * Mock Identity Widgets for development/demo mode\n *\n * These components render placeholder UI when the identity provider is not configured\n * or when running in devMode without valid credentials.\n */\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@mdxui/primitives/avatar'\nimport { Badge } from '@mdxui/primitives/badge'\nimport { Button } from '@mdxui/primitives/button'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@mdxui/primitives/card'\nimport { Input } from '@mdxui/primitives/input'\nimport { Label } from '@mdxui/primitives/label'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@mdxui/primitives/table'\nimport { Mail, MoreHorizontal, Plus, Shield, User } from 'lucide-react'\n\n// Mock data\nconst mockUsers = [\n { id: '1', name: 'John Doe', email: 'john@example.com.ai', role: 'Admin', avatar: '', status: 'Active' },\n { id: '2', name: 'Jane Smith', email: 'jane@example.com.ai', role: 'Member', avatar: '', status: 'Active' },\n { id: '3', name: 'Bob Johnson', email: 'bob@example.com.ai', role: 'Member', avatar: '', status: 'Pending' },\n]\n\nconst mockSessions = [\n { id: '1', device: 'Chrome on macOS', location: 'San Francisco, CA', lastActive: 'Now', current: true },\n { id: '2', device: 'Safari on iPhone', location: 'New York, NY', lastActive: '2 hours ago', current: false },\n { id: '3', device: 'Firefox on Windows', location: 'London, UK', lastActive: '1 day ago', current: false },\n]\n\n/**\n * Mock UsersManagement widget\n */\nexport function MockUsersManagement() {\n return (\n <Card>\n <CardHeader className='flex flex-row items-center justify-between'>\n <div>\n <CardTitle>Team Members</CardTitle>\n <CardDescription>Manage your team members and their roles</CardDescription>\n </div>\n <Button size='sm'>\n <Plus className='mr-2 h-4 w-4' />\n Invite Member\n </Button>\n </CardHeader>\n <CardContent>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>User</TableHead>\n <TableHead>Role</TableHead>\n <TableHead>Status</TableHead>\n <TableHead className='w-[50px]' />\n </TableRow>\n </TableHeader>\n <TableBody>\n {mockUsers.map((user) => (\n <TableRow key={user.id}>\n <TableCell>\n <div className='flex items-center gap-3'>\n <Avatar className='h-8 w-8'>\n <AvatarImage src={user.avatar} />\n <AvatarFallback>\n {user.name\n .split(' ')\n .map((n) => n[0])\n .join('')}\n </AvatarFallback>\n </Avatar>\n <div>\n <div className='font-medium'>{user.name}</div>\n <div className='text-sm text-muted-foreground'>{user.email}</div>\n </div>\n </div>\n </TableCell>\n <TableCell>\n <Badge variant={user.role === 'Admin' ? 'default' : 'secondary'}>{user.role}</Badge>\n </TableCell>\n <TableCell>\n <Badge variant={user.status === 'Active' ? 'outline' : 'secondary'}>{user.status}</Badge>\n </TableCell>\n <TableCell>\n <Button variant='ghost' size='icon'>\n <MoreHorizontal className='h-4 w-4' />\n </Button>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n <p className='mt-4 text-center text-sm text-muted-foreground'>\n This is mock data. Connect your identity provider to manage real team members.\n </p>\n </CardContent>\n </Card>\n )\n}\n\n/**\n * Mock UserProfile widget\n */\nexport function MockUserProfile() {\n return (\n <div className='space-y-6'>\n <Card>\n <CardHeader>\n <CardTitle className='flex items-center gap-2'>\n <User className='h-5 w-5' />\n Personal Information\n </CardTitle>\n <CardDescription>Update your personal details</CardDescription>\n </CardHeader>\n <CardContent className='space-y-4'>\n <div className='flex items-center gap-4'>\n <Avatar className='h-16 w-16'>\n <AvatarFallback>JD</AvatarFallback>\n </Avatar>\n <Button variant='outline' size='sm'>\n Change Avatar\n </Button>\n </div>\n <div className='grid gap-4 sm:grid-cols-2'>\n <div className='space-y-2'>\n <Label htmlFor='firstName'>First Name</Label>\n <Input id='firstName' defaultValue='John' />\n </div>\n <div className='space-y-2'>\n <Label htmlFor='lastName'>Last Name</Label>\n <Input id='lastName' defaultValue='Doe' />\n </div>\n </div>\n <div className='space-y-2'>\n <Label htmlFor='email'>Email</Label>\n <Input id='email' type='email' defaultValue='john@example.com.ai' disabled />\n </div>\n <Button>Save Changes</Button>\n </CardContent>\n </Card>\n <p className='text-center text-sm text-muted-foreground'>\n This is mock data. Connect your identity provider to manage your real profile.\n </p>\n </div>\n )\n}\n\n/**\n * Mock AuthenticationFactors widget\n */\nexport function MockAuthenticationFactors() {\n return (\n <div className='space-y-6'>\n <Card>\n <CardHeader>\n <CardTitle className='flex items-center gap-2'>\n <Shield className='h-5 w-5' />\n Two-Factor Authentication\n </CardTitle>\n <CardDescription>Add an extra layer of security to your account</CardDescription>\n </CardHeader>\n <CardContent className='space-y-4'>\n <div className='flex items-center justify-between rounded-lg border p-4'>\n <div className='flex items-center gap-3'>\n <div className='flex h-10 w-10 items-center justify-center rounded-full bg-muted'>\n <Mail className='h-5 w-5' />\n </div>\n <div>\n <div className='font-medium'>Authenticator App</div>\n <div className='text-sm text-muted-foreground'>Not configured</div>\n </div>\n </div>\n <Button variant='outline' size='sm'>\n Set Up\n </Button>\n </div>\n <div className='flex items-center justify-between rounded-lg border p-4'>\n <div className='flex items-center gap-3'>\n <div className='flex h-10 w-10 items-center justify-center rounded-full bg-muted'>\n <Mail className='h-5 w-5' />\n </div>\n <div>\n <div className='font-medium'>SMS Authentication</div>\n <div className='text-sm text-muted-foreground'>Not configured</div>\n </div>\n </div>\n <Button variant='outline' size='sm'>\n Set Up\n </Button>\n </div>\n </CardContent>\n </Card>\n <p className='text-center text-sm text-muted-foreground'>\n This is mock data. Connect your identity provider to manage security settings.\n </p>\n </div>\n )\n}\n\n/**\n * Mock UserSessions widget\n */\nexport function MockUserSessions() {\n return (\n <div className='space-y-6'>\n <Card>\n <CardHeader>\n <CardTitle>Active Sessions</CardTitle>\n <CardDescription>Manage your active sessions across devices</CardDescription>\n </CardHeader>\n <CardContent>\n <div className='space-y-4'>\n {mockSessions.map((session) => (\n <div key={session.id} className='flex items-center justify-between rounded-lg border p-4'>\n <div>\n <div className='flex items-center gap-2'>\n <span className='font-medium'>{session.device}</span>\n {session.current && (\n <Badge variant='secondary' className='text-xs'>\n Current\n </Badge>\n )}\n </div>\n <div className='text-sm text-muted-foreground'>\n {session.location} · {session.lastActive}\n </div>\n </div>\n {!session.current && (\n <Button variant='outline' size='sm'>\n Revoke\n </Button>\n )}\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n <p className='text-center text-sm text-muted-foreground'>\n This is mock data. Connect your identity provider to manage real sessions.\n </p>\n </div>\n )\n}\n","import * as React from 'react'\nimport type { SettingsProps } from 'mdxui'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@mdxui/primitives/card'\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@mdxui/primitives/tabs'\nimport { Separator } from '@mdxui/primitives/separator'\n\n/**\n * SettingsPage - Tabbed settings layout component\n *\n * Provides a tabbed interface for various settings sections including\n * profile, security, notifications, billing, team, api, and integrations.\n *\n * @example\n * ```tsx\n * <SettingsPage sections={['profile', 'security', 'team']}>\n * <ProfileSettings />\n * <SecuritySettings />\n * <TeamSettings />\n * </SettingsPage>\n * ```\n */\nexport function SettingsPage({ sections, children }: SettingsProps) {\n // Default sections if none provided\n const defaultSections: SettingsProps['sections'] = [\n 'profile',\n 'security',\n 'notifications',\n 'billing',\n 'team',\n 'api',\n 'integrations',\n ]\n\n const activeSections = sections || defaultSections\n const [activeTab, setActiveTab] = React.useState(activeSections[0])\n\n // Section metadata\n const sectionMeta: Record<string, { title: string; description: string }> = {\n profile: {\n title: 'Profile',\n description: 'Manage your personal information and preferences',\n },\n security: {\n title: 'Security',\n description: 'Manage your password and authentication settings',\n },\n notifications: {\n title: 'Notifications',\n description: 'Configure how you receive notifications',\n },\n billing: {\n title: 'Billing',\n description: 'Manage your subscription and payment methods',\n },\n team: {\n title: 'Team',\n description: 'Manage team members and permissions',\n },\n api: {\n title: 'API',\n description: 'Manage API keys and webhooks',\n },\n integrations: {\n title: 'Integrations',\n description: 'Connect third-party services',\n },\n }\n\n return (\n <div className=\"space-y-6\">\n <div>\n <h1 className=\"text-3xl font-bold tracking-tight\">Settings</h1>\n <p className=\"text-muted-foreground mt-2\">\n Manage your account settings and preferences\n </p>\n </div>\n <Separator />\n <Tabs value={activeTab} onValueChange={(value) => setActiveTab(value as typeof activeTab)} className=\"space-y-6\">\n <TabsList className=\"grid w-full grid-cols-2 sm:grid-cols-3 lg:grid-cols-7 gap-2\">\n {activeSections.map((section: string) => (\n <TabsTrigger key={section} value={section}>\n {sectionMeta[section]?.title || section}\n </TabsTrigger>\n ))}\n </TabsList>\n {activeSections.map((section: string, index: number) => (\n <TabsContent key={section} value={section} className=\"space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle>{sectionMeta[section]?.title || section}</CardTitle>\n <CardDescription>\n {sectionMeta[section]?.description || `Manage your ${section} settings`}\n </CardDescription>\n </CardHeader>\n <CardContent>\n {React.Children.toArray(children)[index] || (\n <div className=\"text-center text-sm text-muted-foreground py-8\">\n No content provided for this section\n </div>\n )}\n </CardContent>\n </Card>\n </TabsContent>\n ))}\n </Tabs>\n </div>\n )\n}\n","import * as React from 'react'\nimport { Avatar, AvatarFallback, AvatarImage } from '@mdxui/primitives/avatar'\nimport { Button } from '@mdxui/primitives/button'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@mdxui/primitives/card'\nimport { Input } from '@mdxui/primitives/input'\nimport { Label } from '@mdxui/primitives/label'\nimport { User, Mail, Upload } from 'lucide-react'\n\ninterface UserProfileProps {\n user?: {\n name?: string\n email?: string\n avatar?: string\n firstName?: string\n lastName?: string\n }\n onUpdate?: (data: any) => void\n readonly?: boolean\n}\n\n/**\n * UserProfile - Profile management component\n *\n * Provides a form interface for users to manage their personal information\n * including avatar, name, and email.\n *\n * @example\n * ```tsx\n * <UserProfile\n * user={{ name: 'John Doe', email: 'john@example.com.ai' }}\n * onUpdate={(data) => console.log(data)}\n * />\n * ```\n */\nexport function UserProfile({ user, onUpdate, readonly = false }: UserProfileProps) {\n const [formData, setFormData] = React.useState({\n firstName: user?.firstName || user?.name?.split(' ')[0] || '',\n lastName: user?.lastName || user?.name?.split(' ').slice(1).join(' ') || '',\n email: user?.email || '',\n avatar: user?.avatar || '',\n })\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault()\n onUpdate?.(formData)\n }\n\n const handleChange = (field: string, value: string) => {\n setFormData((prev) => ({ ...prev, [field]: value }))\n }\n\n const getInitials = () => {\n const first = formData.firstName[0] || ''\n const last = formData.lastName[0] || ''\n return (first + last).toUpperCase() || 'U'\n }\n\n return (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <User className=\"h-5 w-5\" />\n Personal Information\n </CardTitle>\n <CardDescription>Update your personal details and profile picture</CardDescription>\n </CardHeader>\n <CardContent>\n <form onSubmit={handleSubmit} className=\"space-y-6\">\n {/* Avatar Section */}\n <div className=\"flex items-center gap-6\">\n <Avatar className=\"h-20 w-20\">\n <AvatarImage src={formData.avatar} alt={`${formData.firstName} ${formData.lastName}`} />\n <AvatarFallback className=\"text-lg\">{getInitials()}</AvatarFallback>\n </Avatar>\n <div className=\"flex flex-col gap-2\">\n <Button type=\"button\" variant=\"outline\" size=\"sm\" disabled={readonly}>\n <Upload className=\"mr-2 h-4 w-4\" />\n Change Avatar\n </Button>\n <p className=\"text-xs text-muted-foreground\">\n JPG, PNG or GIF. Max size 2MB.\n </p>\n </div>\n </div>\n\n {/* Name Fields */}\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"firstName\">First Name</Label>\n <Input\n id=\"firstName\"\n value={formData.firstName}\n onChange={(e) => handleChange('firstName', e.target.value)}\n placeholder=\"John\"\n disabled={readonly}\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"lastName\">Last Name</Label>\n <Input\n id=\"lastName\"\n value={formData.lastName}\n onChange={(e) => handleChange('lastName', e.target.value)}\n placeholder=\"Doe\"\n disabled={readonly}\n />\n </div>\n </div>\n\n {/* Email Field */}\n <div className=\"space-y-2\">\n <Label htmlFor=\"email\" className=\"flex items-center gap-2\">\n <Mail className=\"h-4 w-4\" />\n Email Address\n </Label>\n <Input\n id=\"email\"\n type=\"email\"\n value={formData.email}\n onChange={(e) => handleChange('email', e.target.value)}\n placeholder=\"john@example.com.ai\"\n disabled\n />\n <p className=\"text-xs text-muted-foreground\">\n Email cannot be changed. Contact support for assistance.\n </p>\n </div>\n\n {/* Actions */}\n {!readonly && (\n <div className=\"flex justify-end gap-2\">\n <Button type=\"button\" variant=\"outline\">\n Cancel\n </Button>\n <Button type=\"submit\">Save Changes</Button>\n </div>\n )}\n </form>\n </CardContent>\n </Card>\n )\n}\n","import * as React from 'react'\nimport type { APIKeysProps } from 'mdxui'\nimport { Button } from '@mdxui/primitives/button'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@mdxui/primitives/card'\nimport { Badge } from '@mdxui/primitives/badge'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@mdxui/primitives/table'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from '@mdxui/primitives/dialog'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@mdxui/primitives/dropdown-menu'\nimport { Input } from '@mdxui/primitives/input'\nimport { Label } from '@mdxui/primitives/label'\nimport { Copy, Eye, EyeOff, Key, MoreHorizontal, Plus, Trash2 } from 'lucide-react'\nimport { toast } from 'sonner'\n\ninterface APIKey {\n id: string\n name: string\n key: string\n prefix: string\n created: Date\n lastUsed?: Date\n status: 'active' | 'inactive'\n}\n\n/**\n * APIKeyManager - API key CRUD interface\n *\n * Provides a complete interface for managing API keys including creation,\n * viewing, copying, and deletion. Auto-wires to the apiKeys collection.\n *\n * @example\n * ```tsx\n * <APIKeyManager\n * project=\"proj_123\"\n * allowCreate={true}\n * allowDelete={true}\n * showLastUsed={true}\n * />\n * ```\n */\nexport function APIKeyManager({\n project,\n allowCreate = true,\n allowDelete = true,\n showLastUsed = true,\n keys: initialKeys,\n}: APIKeysProps) {\n const [keys, setKeys] = React.useState<APIKey[]>(\n initialKeys || [\n {\n id: '1',\n name: 'Production API Key',\n key: 'sk_live_1234567890abcdef',\n prefix: 'sk_live_',\n created: new Date('2024-01-15'),\n lastUsed: new Date('2024-12-19'),\n status: 'active',\n },\n {\n id: '2',\n name: 'Development API Key',\n key: 'sk_test_abcdef1234567890',\n prefix: 'sk_test_',\n created: new Date('2024-02-20'),\n lastUsed: new Date('2024-12-18'),\n status: 'active',\n },\n ]\n )\n\n const [isCreateDialogOpen, setIsCreateDialogOpen] = React.useState(false)\n const [newKeyName, setNewKeyName] = React.useState('')\n const [visibleKeys, setVisibleKeys] = React.useState<Set<string>>(new Set())\n const [createdKey, setCreatedKey] = React.useState<string | null>(null)\n\n const toggleKeyVisibility = (keyId: string) => {\n setVisibleKeys((prev) => {\n const next = new Set(prev)\n if (next.has(keyId)) {\n next.delete(keyId)\n } else {\n next.add(keyId)\n }\n return next\n })\n }\n\n const copyToClipboard = async (text: string, label: string) => {\n try {\n await navigator.clipboard.writeText(text)\n toast.success(`${label} copied to clipboard`)\n } catch (err) {\n toast.error('Failed to copy to clipboard')\n }\n }\n\n const handleCreateKey = () => {\n if (!newKeyName.trim()) {\n toast.error('Please enter a key name')\n return\n }\n\n const newKey: APIKey = {\n id: String(keys.length + 1),\n name: newKeyName,\n key: `sk_live_${Math.random().toString(36).substring(2, 24)}`,\n prefix: 'sk_live_',\n created: new Date(),\n status: 'active',\n }\n\n setKeys([...keys, newKey])\n setCreatedKey(newKey.key)\n setNewKeyName('')\n toast.success('API key created successfully')\n }\n\n const handleDeleteKey = (keyId: string) => {\n setKeys(keys.filter((k) => k.id !== keyId))\n toast.success('API key deleted')\n }\n\n const formatDate = (date: Date) => {\n return new Intl.DateTimeFormat('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n }).format(date)\n }\n\n const maskKey = (_key: string, prefix: string) => {\n return `${prefix}${'•'.repeat(20)}`\n }\n\n return (\n <div className=\"space-y-4\">\n <Card>\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <div>\n <CardTitle className=\"flex items-center gap-2\">\n <Key className=\"h-5 w-5\" />\n API Keys\n </CardTitle>\n <CardDescription>\n Manage API keys for project: <span className=\"font-mono\">{project}</span>\n </CardDescription>\n </div>\n {allowCreate && (\n <Dialog open={isCreateDialogOpen} onOpenChange={setIsCreateDialogOpen}>\n <DialogTrigger asChild>\n <Button>\n <Plus className=\"mr-2 h-4 w-4\" />\n Create Key\n </Button>\n </DialogTrigger>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Create New API Key</DialogTitle>\n <DialogDescription>\n Create a new API key for your project. Make sure to copy it now as you won't be able to see it again.\n </DialogDescription>\n </DialogHeader>\n <div className=\"space-y-4 py-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"keyName\">Key Name</Label>\n <Input\n id=\"keyName\"\n value={newKeyName}\n onChange={(e) => setNewKeyName(e.target.value)}\n placeholder=\"e.g., Production API Key\"\n />\n </div>\n {createdKey && (\n <div className=\"space-y-2\">\n <Label>Your New API Key</Label>\n <div className=\"flex items-center gap-2\">\n <Input value={createdKey} readOnly className=\"font-mono text-sm\" />\n <Button\n type=\"button\"\n size=\"icon\"\n variant=\"outline\"\n onClick={() => copyToClipboard(createdKey, 'API key')}\n >\n <Copy className=\"h-4 w-4\" />\n </Button>\n </div>\n <p className=\"text-sm text-muted-foreground\">\n Make sure to copy this key now. You won't be able to see it again!\n </p>\n </div>\n )}\n </div>\n <DialogFooter>\n {!createdKey ? (\n <>\n <Button variant=\"outline\" onClick={() => setIsCreateDialogOpen(false)}>\n Cancel\n </Button>\n <Button onClick={handleCreateKey}>Create Key</Button>\n </>\n ) : (\n <Button\n onClick={() => {\n setCreatedKey(null)\n setIsCreateDialogOpen(false)\n }}\n >\n Done\n </Button>\n )}\n </DialogFooter>\n </DialogContent>\n </Dialog>\n )}\n </div>\n </CardHeader>\n <CardContent>\n {keys.length === 0 ? (\n <div className=\"text-center py-12\">\n <Key className=\"h-12 w-12 mx-auto text-muted-foreground mb-4\" />\n <h3 className=\"text-lg font-semibold mb-2\">No API Keys</h3>\n <p className=\"text-sm text-muted-foreground mb-4\">\n Create your first API key to start making requests\n </p>\n {allowCreate && (\n <Button onClick={() => setIsCreateDialogOpen(true)}>\n <Plus className=\"mr-2 h-4 w-4\" />\n Create Key\n </Button>\n )}\n </div>\n ) : (\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Name</TableHead>\n <TableHead>Key</TableHead>\n <TableHead>Status</TableHead>\n <TableHead>Created</TableHead>\n {showLastUsed && <TableHead>Last Used</TableHead>}\n <TableHead className=\"w-[50px]\" />\n </TableRow>\n </TableHeader>\n <TableBody>\n {keys.map((apiKey) => (\n <TableRow key={apiKey.id}>\n <TableCell className=\"font-medium\">{apiKey.name}</TableCell>\n <TableCell>\n <div className=\"flex items-center gap-2\">\n <code className=\"text-sm font-mono\">\n {visibleKeys.has(apiKey.id) ? apiKey.key : maskKey(apiKey.key, apiKey.prefix)}\n </code>\n <Button\n size=\"icon\"\n variant=\"ghost\"\n onClick={() => toggleKeyVisibility(apiKey.id)}\n >\n {visibleKeys.has(apiKey.id) ? (\n <EyeOff className=\"h-4 w-4\" />\n ) : (\n <Eye className=\"h-4 w-4\" />\n )}\n </Button>\n <Button\n size=\"icon\"\n variant=\"ghost\"\n onClick={() => copyToClipboard(apiKey.key, 'API key')}\n >\n <Copy className=\"h-4 w-4\" />\n </Button>\n </div>\n </TableCell>\n <TableCell>\n <Badge variant={apiKey.status === 'active' ? 'default' : 'secondary'}>\n {apiKey.status}\n </Badge>\n </TableCell>\n <TableCell className=\"text-sm text-muted-foreground\">\n {formatDate(apiKey.created)}\n </TableCell>\n {showLastUsed && (\n <TableCell className=\"text-sm text-muted-foreground\">\n {apiKey.lastUsed ? formatDate(apiKey.lastUsed) : 'Never'}\n </TableCell>\n )}\n <TableCell>\n {allowDelete && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\">\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem\n variant=\"destructive\"\n onClick={() => handleDeleteKey(apiKey.id)}\n >\n <Trash2 className=\"mr-2 h-4 w-4\" />\n Delete\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n )}\n </CardContent>\n </Card>\n </div>\n )\n}\n","import * as React from 'react'\nimport type { TeamProps } from 'mdxui'\nimport { Avatar, AvatarFallback, AvatarImage } from '@mdxui/primitives/avatar'\nimport { Button } from '@mdxui/primitives/button'\nimport { Badge } from '@mdxui/primitives/badge'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@mdxui/primitives/card'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@mdxui/primitives/table'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from '@mdxui/primitives/dialog'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@mdxui/primitives/dropdown-menu'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@mdxui/primitives/select'\nimport { Input } from '@mdxui/primitives/input'\nimport { Label } from '@mdxui/primitives/label'\nimport { MoreHorizontal, Plus, Mail, UserPlus, Trash2, Users } from 'lucide-react'\nimport { toast } from 'sonner'\n\ninterface TeamMember {\n id: string\n name: string\n email: string\n role: 'owner' | 'admin' | 'member' | 'viewer'\n avatar?: string\n status: 'active' | 'pending' | 'inactive'\n joinedAt: Date\n}\n\n/**\n * TeamManager - Team member management component\n *\n * Provides a complete interface for managing team members including invitations,\n * role changes, and member removal. Auto-wires to the members collection.\n *\n * @example\n * ```tsx\n * <TeamManager\n * workspace=\"ws_123\"\n * allowInvite={true}\n * allowRoleChange={true}\n * allowRemove={true}\n * />\n * ```\n */\nexport function TeamManager({\n workspace,\n allowInvite = true,\n allowRoleChange = true,\n allowRemove = true,\n members: initialMembers,\n}: TeamProps) {\n const [members, setMembers] = React.useState<TeamMember[]>(\n initialMembers || [\n {\n id: '1',\n name: 'John Doe',\n email: 'john@example.com.ai',\n role: 'owner',\n avatar: '',\n status: 'active',\n joinedAt: new Date('2024-01-01'),\n },\n {\n id: '2',\n name: 'Jane Smith',\n email: 'jane@example.com.ai',\n role: 'admin',\n avatar: '',\n status: 'active',\n joinedAt: new Date('2024-02-15'),\n },\n {\n id: '3',\n name: 'Bob Johnson',\n email: 'bob@example.com.ai',\n role: 'member',\n avatar: '',\n status: 'pending',\n joinedAt: new Date('2024-12-15'),\n },\n ]\n )\n\n const [isInviteDialogOpen, setIsInviteDialogOpen] = React.useState(false)\n const [inviteEmail, setInviteEmail] = React.useState('')\n const [inviteRole, setInviteRole] = React.useState<TeamMember['role']>('member')\n\n const handleInviteMember = () => {\n if (!inviteEmail.trim() || !inviteEmail.includes('@')) {\n toast.error('Please enter a valid email address')\n return\n }\n\n const newMember: TeamMember = {\n id: String(members.length + 1),\n name: inviteEmail.split('@')[0],\n email: inviteEmail,\n role: inviteRole,\n status: 'pending',\n joinedAt: new Date(),\n }\n\n setMembers([...members, newMember])\n setInviteEmail('')\n setInviteRole('member')\n setIsInviteDialogOpen(false)\n toast.success(`Invitation sent to ${inviteEmail}`)\n }\n\n const handleRoleChange = (memberId: string, newRole: TeamMember['role']) => {\n setMembers(\n members.map((m) =>\n m.id === memberId ? { ...m, role: newRole } : m\n )\n )\n toast.success('Member role updated')\n }\n\n const handleRemoveMember = (memberId: string) => {\n const member = members.find((m) => m.id === memberId)\n if (member?.role === 'owner') {\n toast.error('Cannot remove the workspace owner')\n return\n }\n setMembers(members.filter((m) => m.id !== memberId))\n toast.success('Member removed from workspace')\n }\n\n const getInitials = (name: string) => {\n return name\n .split(' ')\n .map((n) => n[0])\n .join('')\n .toUpperCase()\n }\n\n const getRoleBadgeVariant = (role: TeamMember['role']) => {\n switch (role) {\n case 'owner':\n return 'default'\n case 'admin':\n return 'secondary'\n default:\n return 'outline'\n }\n }\n\n const getStatusBadgeVariant = (status: TeamMember['status']) => {\n switch (status) {\n case 'active':\n return 'default'\n case 'pending':\n return 'secondary'\n default:\n return 'outline'\n }\n }\n\n const formatDate = (date: Date) => {\n return new Intl.DateTimeFormat('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n }).format(date)\n }\n\n return (\n <div className=\"space-y-4\">\n <Card>\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <div>\n <CardTitle className=\"flex items-center gap-2\">\n <Users className=\"h-5 w-5\" />\n Team Members\n </CardTitle>\n <CardDescription>\n Manage team members for workspace: <span className=\"font-mono\">{workspace}</span>\n </CardDescription>\n </div>\n {allowInvite && (\n <Dialog open={isInviteDialogOpen} onOpenChange={setIsInviteDialogOpen}>\n <DialogTrigger asChild>\n <Button>\n <Plus className=\"mr-2 h-4 w-4\" />\n Invite Member\n </Button>\n </DialogTrigger>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Invite Team Member</DialogTitle>\n <DialogDescription>\n Send an invitation to a new team member. They will receive an email with instructions to join.\n </DialogDescription>\n </DialogHeader>\n <div className=\"space-y-4 py-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"email\">Email Address</Label>\n <Input\n id=\"email\"\n type=\"email\"\n value={inviteEmail}\n onChange={(e) => setInviteEmail(e.target.value)}\n placeholder=\"colleague@example.com.ai\"\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"role\">Role</Label>\n <Select value={inviteRole} onValueChange={(value) => setInviteRole(value as TeamMember['role'])}>\n <SelectTrigger id=\"role\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"admin\">Admin</SelectItem>\n <SelectItem value=\"member\">Member</SelectItem>\n <SelectItem value=\"viewer\">Viewer</SelectItem>\n </SelectContent>\n </Select>\n <p className=\"text-xs text-muted-foreground\">\n Choose the appropriate role for this team member\n </p>\n </div>\n </div>\n <DialogFooter>\n <Button variant=\"outline\" onClick={() => setIsInviteDialogOpen(false)}>\n Cancel\n </Button>\n <Button onClick={handleInviteMember}>\n <Mail className=\"mr-2 h-4 w-4\" />\n Send Invitation\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n )}\n </div>\n </CardHeader>\n <CardContent>\n {members.length === 0 ? (\n <div className=\"text-center py-12\">\n <UserPlus className=\"h-12 w-12 mx-auto text-muted-foreground mb-4\" />\n <h3 className=\"text-lg font-semibold mb-2\">No Team Members</h3>\n <p className=\"text-sm text-muted-foreground mb-4\">\n Invite team members to collaborate on this workspace\n </p>\n {allowInvite && (\n <Button onClick={() => setIsInviteDialogOpen(true)}>\n <Plus className=\"mr-2 h-4 w-4\" />\n Invite Member\n </Button>\n )}\n </div>\n ) : (\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Member</TableHead>\n <TableHead>Role</TableHead>\n <TableHead>Status</TableHead>\n <TableHead>Joined</TableHead>\n <TableHead className=\"w-[50px]\" />\n </TableRow>\n </TableHeader>\n <TableBody>\n {members.map((member) => (\n <TableRow key={member.id}>\n <TableCell>\n <div className=\"flex items-center gap-3\">\n <Avatar className=\"h-8 w-8\">\n <AvatarImage src={member.avatar} alt={member.name} />\n <AvatarFallback>{getInitials(member.name)}</AvatarFallback>\n </Avatar>\n <div>\n <div className=\"font-medium\">{member.name}</div>\n <div className=\"text-sm text-muted-foreground\">{member.email}</div>\n </div>\n </div>\n </TableCell>\n <TableCell>\n {allowRoleChange && member.role !== 'owner' ? (\n <Select\n value={member.role}\n onValueChange={(value) =>\n handleRoleChange(member.id, value as TeamMember['role'])\n }\n >\n <SelectTrigger className=\"w-[120px]\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"admin\">Admin</SelectItem>\n <SelectItem value=\"member\">Member</SelectItem>\n <SelectItem value=\"viewer\">Viewer</SelectItem>\n </SelectContent>\n </Select>\n ) : (\n <Badge variant={getRoleBadgeVariant(member.role)}>\n {member.role}\n </Badge>\n )}\n </TableCell>\n <TableCell>\n <Badge variant={getStatusBadgeVariant(member.status)}>\n {member.status}\n </Badge>\n </TableCell>\n <TableCell className=\"text-sm text-muted-foreground\">\n {formatDate(member.joinedAt)}\n </TableCell>\n <TableCell>\n {allowRemove && member.role !== 'owner' && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\">\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuLabel>Actions</DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n variant=\"destructive\"\n onClick={() => handleRemoveMember(member.id)}\n >\n <Trash2 className=\"mr-2 h-4 w-4\" />\n Remove\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n )}\n </CardContent>\n </Card>\n </div>\n )\n}\n","import * as React from 'react'\nimport type { BillingProps } from 'mdxui'\nimport { Button } from '@mdxui/primitives/button'\nimport { Badge } from '@mdxui/primitives/badge'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@mdxui/primitives/card'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@mdxui/primitives/table'\nimport { Separator } from '@mdxui/primitives/separator'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from '@mdxui/primitives/dialog'\nimport { Input } from '@mdxui/primitives/input'\nimport { Label } from '@mdxui/primitives/label'\nimport {\n CreditCard,\n Download,\n Calendar,\n DollarSign,\n FileText,\n Plus,\n Trash2,\n CheckCircle2,\n} from 'lucide-react'\nimport { toast } from 'sonner'\n\ninterface Subscription {\n id: string\n plan: string\n status: 'active' | 'canceled' | 'past_due'\n amount: number\n currency: string\n interval: 'month' | 'year'\n currentPeriodStart: Date\n currentPeriodEnd: Date\n cancelAtPeriodEnd: boolean\n}\n\ninterface Invoice {\n id: string\n date: Date\n amount: number\n currency: string\n status: 'paid' | 'pending' | 'failed'\n pdfUrl?: string\n}\n\ninterface PaymentMethod {\n id: string\n type: 'card' | 'bank_account'\n last4: string\n brand?: string\n expiryMonth?: number\n expiryYear?: number\n isDefault: boolean\n}\n\n/**\n * Billing - Subscription and billing management component\n *\n * Provides a complete interface for managing subscriptions, viewing invoices,\n * and managing payment methods. Auto-wires to the subscriptions collection.\n *\n * @example\n * ```tsx\n * <Billing\n * customer=\"cus_123\"\n * showInvoices={true}\n * showPaymentMethods={true}\n * showUsage={true}\n * />\n * ```\n */\nexport function Billing({\n customer,\n showInvoices = true,\n showPaymentMethods = true,\n showUsage = true,\n subscription: initialSubscription,\n}: BillingProps) {\n const [subscription] = React.useState<Subscription>(\n initialSubscription || {\n id: 'sub_123',\n plan: 'Pro',\n status: 'active',\n amount: 29.99,\n currency: 'USD',\n interval: 'month',\n currentPeriodStart: new Date('2024-12-01'),\n currentPeriodEnd: new Date('2025-01-01'),\n cancelAtPeriodEnd: false,\n }\n )\n\n const [invoices] = React.useState<Invoice[]>([\n {\n id: 'in_001',\n date: new Date('2024-12-01'),\n amount: 29.99,\n currency: 'USD',\n status: 'paid',\n pdfUrl: '#',\n },\n {\n id: 'in_002',\n date: new Date('2024-11-01'),\n amount: 29.99,\n currency: 'USD',\n status: 'paid',\n pdfUrl: '#',\n },\n {\n id: 'in_003',\n date: new Date('2024-10-01'),\n amount: 29.99,\n currency: 'USD',\n status: 'paid',\n pdfUrl: '#',\n },\n ])\n\n const [paymentMethods, setPaymentMethods] = React.useState<PaymentMethod[]>([\n {\n id: 'pm_001',\n type: 'card',\n last4: '4242',\n brand: 'Visa',\n expiryMonth: 12,\n expiryYear: 2025,\n isDefault: true,\n },\n {\n id: 'pm_002',\n type: 'card',\n last4: '5555',\n brand: 'Mastercard',\n expiryMonth: 6,\n expiryYear: 2026,\n isDefault: false,\n },\n ])\n\n const [isAddPaymentMethodOpen, setIsAddPaymentMethodOpen] = React.useState(false)\n\n const formatCurrency = (amount: number, currency: string) => {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency,\n }).format(amount)\n }\n\n const formatDate = (date: Date) => {\n return new Intl.DateTimeFormat('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n }).format(date)\n }\n\n const getStatusBadgeVariant = (status: string) => {\n switch (status) {\n case 'active':\n case 'paid':\n return 'default'\n case 'canceled':\n case 'failed':\n return 'destructive'\n case 'past_due':\n case 'pending':\n return 'secondary'\n default:\n return 'outline'\n }\n }\n\n const handleRemovePaymentMethod = (methodId: string) => {\n const method = paymentMethods.find((pm) => pm.id === methodId)\n if (method?.isDefault) {\n toast.error('Cannot remove default payment method')\n return\n }\n setPaymentMethods(paymentMethods.filter((pm) => pm.id !== methodId))\n toast.success('Payment method removed')\n }\n\n const handleSetDefaultPaymentMethod = (methodId: string) => {\n setPaymentMethods(\n paymentMethods.map((pm) => ({\n ...pm,\n isDefault: pm.id === methodId,\n }))\n )\n toast.success('Default payment method updated')\n }\n\n return (\n <div className=\"space-y-6\">\n {/* Page Header */}\n <div>\n <h1 className=\"text-3xl font-bold tracking-tight\">Billing</h1>\n <p className=\"text-muted-foreground mt-2\">\n Manage your subscription and payment methods for customer:{' '}\n <span className=\"font-mono\">{customer}</span>\n </p>\n </div>\n <Separator />\n\n {/* Current Subscription */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <DollarSign className=\"h-5 w-5\" />\n Current Subscription\n </CardTitle>\n <CardDescription>Your current plan and billing cycle</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"flex items-start justify-between\">\n <div className=\"space-y-1\">\n <div className=\"flex items-center gap-2\">\n <h3 className=\"text-2xl font-bold\">{subscription.plan} Plan</h3>\n <Badge variant={getStatusBadgeVariant(subscription.status)}>\n {subscription.status}\n </Badge>\n </div>\n <p className=\"text-sm text-muted-foreground\">\n {formatCurrency(subscription.amount, subscription.currency)} per{' '}\n {subscription.interval}\n </p>\n </div>\n <Button variant=\"outline\">Change Plan</Button>\n </div>\n <Separator />\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <div className=\"space-y-1\">\n <p className=\"text-sm font-medium\">Current Period</p>\n <p className=\"text-sm text-muted-foreground\">\n {formatDate(subscription.currentPeriodStart)} -{' '}\n {formatDate(subscription.currentPeriodEnd)}\n </p>\n </div>\n <div className=\"space-y-1\">\n <p className=\"text-sm font-medium\">Next Billing Date</p>\n <p className=\"text-sm text-muted-foreground flex items-center gap-1\">\n <Calendar className=\"h-4 w-4\" />\n {formatDate(subscription.currentPeriodEnd)}\n </p>\n </div>\n </div>\n {!subscription.cancelAtPeriodEnd && (\n <Button variant=\"outline\" className=\"w-full sm:w-auto\">\n Cancel Subscription\n </Button>\n )}\n </CardContent>\n </Card>\n\n {/* Payment Methods */}\n {showPaymentMethods && (\n <Card>\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <div>\n <CardTitle className=\"flex items-center gap-2\">\n <CreditCard className=\"h-5 w-5\" />\n Payment Methods\n </CardTitle>\n <CardDescription>Manage your payment methods</CardDescription>\n </div>\n <Dialog open={isAddPaymentMethodOpen} onOpenChange={setIsAddPaymentMethodOpen}>\n <DialogTrigger asChild>\n <Button variant=\"outline\">\n <Plus className=\"mr-2 h-4 w-4\" />\n Add Method\n </Button>\n </DialogTrigger>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Add Payment Method</DialogTitle>\n <DialogDescription>\n Add a new credit card or bank account for billing\n </DialogDescription>\n </DialogHeader>\n <div className=\"space-y-4 py-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"cardNumber\">Card Number</Label>\n <Input id=\"cardNumber\" placeholder=\"1234 5678 9012 3456\" />\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"expiry\">Expiry</Label>\n <Input id=\"expiry\" placeholder=\"MM/YY\" />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"cvc\">CVC</Label>\n <Input id=\"cvc\" placeholder=\"123\" />\n </div>\n </div>\n </div>\n <DialogFooter>\n <Button variant=\"outline\" onClick={() => setIsAddPaymentMethodOpen(false)}>\n Cancel\n </Button>\n <Button onClick={() => setIsAddPaymentMethodOpen(false)}>\n Add Payment Method\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </div>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n {paymentMethods.map((method) => (\n <div\n key={method.id}\n className=\"flex items-center justify-between rounded-lg border p-4\"\n >\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-full bg-muted\">\n <CreditCard className=\"h-5 w-5\" />\n </div>\n <div>\n <div className=\"flex items-center gap-2\">\n <span className=\"font-medium\">\n {method.brand} •••• {method.last4}\n </span>\n {method.isDefault && (\n <Badge variant=\"outline\" className=\"text-xs\">\n Default\n </Badge>\n )}\n </div>\n <div className=\"text-sm text-muted-foreground\">\n Expires {method.expiryMonth}/{method.expiryYear}\n </div>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n {!method.isDefault && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleSetDefaultPaymentMethod(method.id)}\n >\n Set Default\n </Button>\n )}\n {!method.isDefault && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => handleRemovePaymentMethod(method.id)}\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n )}\n\n {/* Invoices */}\n {showInvoices && (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <FileText className=\"h-5 w-5\" />\n Billing History\n </CardTitle>\n <CardDescription>View and download your invoices</CardDescription>\n </CardHeader>\n <CardContent>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Date</TableHead>\n <TableHead>Amount</TableHead>\n <TableHead>Status</TableHead>\n <TableHead className=\"w-[50px]\" />\n </TableRow>\n </TableHeader>\n <TableBody>\n {invoices.map((invoice) => (\n <TableRow key={invoice.id}>\n <TableCell className=\"font-medium\">{formatDate(invoice.date)}</TableCell>\n <TableCell>{formatCurrency(invoice.amount, invoice.currency)}</TableCell>\n <TableCell>\n <Badge variant={getStatusBadgeVariant(invoice.status)}>\n {invoice.status === 'paid' && <CheckCircle2 className=\"mr-1 h-3 w-3\" />}\n {invoice.status}\n </Badge>\n </TableCell>\n <TableCell>\n <Button variant=\"ghost\" size=\"icon\">\n <Download className=\"h-4 w-4\" />\n </Button>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </CardContent>\n </Card>\n )}\n\n {/* Usage-Based Billing (if enabled) */}\n {showUsage && (\n <Card>\n <CardHeader>\n <CardTitle>Usage This Month</CardTitle>\n <CardDescription>Track your usage-based charges</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"font-medium\">API Requests</p>\n <p className=\"text-sm text-muted-foreground\">125,000 / 200,000</p>\n </div>\n <p className=\"text-sm font-medium\">$0.00</p>\n </div>\n <Separator />\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"font-medium\">Storage</p>\n <p className=\"text-sm text-muted-foreground\">2.5 GB / 10 GB</p>\n </div>\n <p className=\"text-sm font-medium\">$0.00</p>\n </div>\n <Separator />\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"font-medium\">Bandwidth</p>\n <p className=\"text-sm text-muted-foreground\">15 GB / 100 GB</p>\n </div>\n <p className=\"text-sm font-medium\">$0.00</p>\n </div>\n </div>\n </CardContent>\n </Card>\n )}\n </div>\n )\n}\n","import * as LucideIcons from 'lucide-react'\nimport type { LucideIcon } from 'lucide-react'\n\n/**\n * Maps a Lucide icon name string to the actual icon component.\n * Used to convert mdxui's string-based icon references to LucideIcon components.\n *\n * @example\n * ```ts\n * const icon = getIconByName('BarChart3') // returns BarChart3 component\n * const icon = getIconByName('Settings') // returns Settings component\n * ```\n */\nexport function getIconByName(name: string): LucideIcon | undefined {\n // LucideIcons exports include both icons and utilities, so we need to cast carefully\n const icons = LucideIcons as unknown as Record<string, LucideIcon | unknown>\n const icon = icons[name]\n // Check if it's a valid icon component (has displayName property typical of React components)\n if (icon && typeof icon === 'function') {\n return icon as LucideIcon\n }\n return undefined\n}\n\n/**\n * Common dashboard icons for quick reference.\n * These are the icons most commonly used in DeveloperDashboard navigation.\n */\nexport const dashboardIcons = {\n overview: 'BarChart3',\n requests: 'Activity',\n keys: 'Key',\n team: 'Users',\n billing: 'CreditCard',\n settings: 'Settings',\n webhooks: 'Webhook',\n database: 'Database',\n integrations: 'Puzzle',\n vault: 'Lock',\n} as const\n","import { ThemeProvider } from 'next-themes'\nimport { type ReactNode, useEffect } from 'react'\nimport { DashboardProvider } from '../context/dashboard-context'\nimport { setDebugMode, setDevToken } from '../lib/platform'\nimport type { DashboardConfig } from '../types/config'\nimport { IdentityProvider } from './identity-provider'\nimport { QueryProvider } from './query-provider'\n\ninterface AppProvidersProps {\n config: DashboardConfig\n children: ReactNode\n}\n\n/**\n * Initializes SDK with dev token and debug mode from config.\n */\nfunction SDKInitializer({ config }: { config: DashboardConfig }) {\n useEffect(() => {\n // Enable debug mode if configured\n if (config.debug) {\n setDebugMode(true)\n }\n\n // Set dev token if provided (useful for testing without auth)\n if (config.devToken) {\n setDevToken(config.devToken)\n }\n }, [config.debug, config.devToken])\n\n return null\n}\n\n/**\n * Composed provider that wraps the dashboard with all necessary context providers.\n *\n * Provider hierarchy:\n * - ThemeProvider (next-themes) - Theme mode (light/dark/system)\n * - DashboardProvider - Dashboard config context\n * - SDKInitializer - Platform SDK setup\n * - IdentityProvider - WorkOS AuthKit + Widgets\n * - QueryProvider - TanStack Query + Auth sync\n */\nexport function AppProviders({ config, children }: AppProvidersProps) {\n const themeMode = config.theme?.mode ?? 'system'\n\n return (\n <ThemeProvider\n attribute='class'\n defaultTheme={themeMode}\n enableSystem={themeMode === 'system'}\n disableTransitionOnChange\n >\n <DashboardProvider config={config}>\n <SDKInitializer config={config} />\n <IdentityProvider>\n <QueryProvider>\n {children}\n </QueryProvider>\n </IdentityProvider>\n </DashboardProvider>\n </ThemeProvider>\n )\n}\n","/**\n * Platform SDK Client\n *\n * Manages the platform.do SDK instance and auth state.\n */\n\nimport { createSDK, type $Context } from 'platform.do'\n\n/**\n * SDK instance type - the $ proxy with all platform methods\n */\ntype PlatformSDK = $Context\n\n/**\n * SDK instance - lazily initialized when auth token is set\n */\nlet sdkInstance: PlatformSDK | null = null\n\n/**\n * Current auth token\n */\nlet currentToken: string | null = null\n\n/**\n * Debug mode flag - enables verbose logging\n */\nlet debugMode = false\n\n/**\n * Dev token for testing without auth flow\n */\nlet devToken: string | null = null\n\n/**\n * Debug logger - only logs when debug mode is enabled\n */\nfunction debug(message: string, ...args: unknown[]) {\n if (debugMode) {\n console.log(`[Platform SDK] ${message}`, ...args)\n }\n}\n\n/**\n * Enable or disable debug mode for SDK operations.\n * When enabled, logs auth state changes and SDK calls.\n */\nexport function setDebugMode(enabled: boolean) {\n debugMode = enabled\n debug('Debug mode', enabled ? 'enabled' : 'disabled')\n}\n\n/**\n * Check if debug mode is enabled.\n */\nexport function isDebugMode() {\n return debugMode\n}\n\n/**\n * Set a development token for testing SDK without auth flow.\n * This is useful for local development when you have a DO_TOKEN.\n * Call this early in app initialization.\n *\n * @param token - The DO_TOKEN from environment\n */\nexport function setDevToken(token: string | null) {\n devToken = token\n if (token && !currentToken) {\n debug('Setting dev token', { tokenLength: token.length })\n // Initialize SDK with dev token if no auth token is set\n sdkInstance = createSDK({ token }) as PlatformSDK\n debug('SDK instance created with dev token')\n }\n}\n\n/**\n * Get the effective token (auth token takes priority over dev token)\n */\nexport function getEffectiveToken(): string | null {\n return currentToken || devToken\n}\n\n/**\n * Configure auth with a token and initialize SDK.\n * Call this after the user authenticates via id.org.ai.\n *\n * @param token - JWT access token from id.org.ai\n */\nexport function setAuthToken(token: string | null) {\n if (token === currentToken) {\n debug('Token unchanged, skipping')\n return // No change\n }\n\n const hadToken = currentToken !== null\n const hasToken = token !== null\n currentToken = token\n\n if (token) {\n debug('Setting auth token', {\n tokenLength: token.length,\n tokenPreview: `${token.slice(0, 20)}...${token.slice(-10)}`,\n })\n // Initialize SDK with the token using createSDK factory\n sdkInstance = createSDK({ token }) as PlatformSDK\n debug('SDK instance created')\n } else {\n debug('Clearing auth token', { hadToken })\n sdkInstance = null\n }\n\n debug('Auth state changed', { hadToken, hasToken, isAuthenticated: hasToken })\n}\n\n/**\n * Get the current auth token.\n * Returns null if not authenticated.\n */\nexport function getAuthToken() {\n return currentToken\n}\n\n/**\n * Get the SDK instance.\n * Returns null if not authenticated.\n */\nexport function getSDK(): PlatformSDK | null {\n return sdkInstance\n}\n\n/**\n * Check if the user is authenticated (has a token).\n */\nexport function isAuthenticated() {\n return currentToken !== null\n}\n\n/**\n * Clear auth state (on logout).\n */\nexport function clearAuth() {\n currentToken = null\n sdkInstance = null\n}\n\n/**\n * Base URL for API proxy routes (fallback when SDK can't be used).\n * In Next.js apps, this is typically '/api'.\n */\nlet apiBaseUrl = '/api'\n\n/**\n * Configure the API base URL for proxy routes.\n */\nexport function setApiBaseUrl(url: string) {\n apiBaseUrl = url\n}\n\n/**\n * Get the API base URL.\n */\nexport function getApiBaseUrl() {\n return apiBaseUrl\n}\n\n/**\n * Get debug status info for troubleshooting.\n * Can be called from browser console: window.__platformDebug.status()\n */\nexport function getDebugStatus() {\n const effectiveToken = getEffectiveToken()\n return {\n isAuthenticated: currentToken !== null,\n hasDevToken: devToken !== null,\n hasEffectiveToken: effectiveToken !== null,\n hasSDK: sdkInstance !== null,\n tokenSource: currentToken ? 'auth' : devToken ? 'dev' : 'none',\n tokenLength: effectiveToken?.length ?? 0,\n tokenPreview: effectiveToken ? `${effectiveToken.slice(0, 20)}...${effectiveToken.slice(-10)}` : null,\n debugMode,\n apiBaseUrl,\n }\n}\n\n/**\n * Test SDK connection by making a simple API call.\n * Can be called from browser console: window.__platformDebug.testConnection()\n */\nexport async function testSDKConnection() {\n const status = getDebugStatus()\n console.log('[Platform SDK] Testing connection...', status)\n\n if (!sdkInstance) {\n console.error('[Platform SDK] No SDK instance - not authenticated and no dev token')\n return { success: false, error: 'No SDK instance', status }\n }\n\n try {\n // Try to list API keys as a connection test\n console.log('[Platform SDK] Calling api.APIKeys.list()...')\n const result = await sdkInstance.api.APIKeys.list()\n console.log('[Platform SDK] Connection successful!', { result })\n return { success: true, result, status }\n } catch (error) {\n console.error('[Platform SDK] Connection failed:', error)\n return { success: false, error, status }\n }\n}\n\n// Expose debug utilities on window for browser console access\nif (typeof window !== 'undefined') {\n ;(window as unknown as Record<string, unknown>).__platformDebug = {\n status: getDebugStatus,\n testConnection: testSDKConnection,\n setDebugMode,\n setDevToken,\n getSDK,\n getAuthToken,\n getEffectiveToken,\n isAuthenticated,\n }\n}\n","import { IdentityProvider as AuthIdentityProvider, WidgetsProvider } from '@mdxui/auth'\nimport type { ReactNode } from 'react'\nimport { useDashboard } from '../context/dashboard-context'\n\ninterface IdentityProviderProps {\n children: ReactNode\n}\n\n/**\n * Identity provider that wraps the dashboard with authentication and identity widgets.\n * Powered by id.org.ai via @mdxui/auth\n */\nexport function IdentityProvider({ children }: IdentityProviderProps) {\n const { config } = useDashboard()\n const { identity } = config\n\n // Build redirect URI - defaults to current origin + basePath\n const redirectUri =\n identity.redirectUri ??\n (typeof window !== 'undefined'\n ? `${window.location.origin}${config.basePath ?? '/'}`\n : undefined)\n\n // Handle redirect callback - clear URL params after successful auth\n const onRedirectCallback = () => {\n if (typeof window !== 'undefined') {\n const url = new URL(window.location.href)\n url.searchParams.delete('code')\n url.searchParams.delete('state')\n window.history.replaceState({}, '', url.pathname)\n }\n }\n\n return (\n <AuthIdentityProvider\n clientId={identity.clientId}\n apiHostname={identity.apiHostname}\n devMode={identity.devMode}\n redirectUri={redirectUri}\n onRedirectCallback={onRedirectCallback}\n >\n {children}\n </AuthIdentityProvider>\n )\n}\n\n// Re-export WidgetsProvider for cases where it's needed separately\nexport { WidgetsProvider }\n","/**\n * Query Provider\n *\n * Wraps the app with TanStack Query and syncs the auth token to the platform SDK.\n */\n\nimport { useAuth } from '@mdxui/auth'\nimport { QueryClientProvider } from '@tanstack/react-query'\nimport { ReactQueryDevtools } from '@tanstack/react-query-devtools'\nimport { type ReactNode, useEffect } from 'react'\nimport { clearAuth, setAuthToken } from '../lib/platform'\nimport { queryClient } from '../lib/query-client'\n\ninterface QueryProviderProps {\n children: ReactNode\n}\n\n/**\n * Syncs the auth token from id.org.ai to the platform SDK\n */\nfunction AuthSync({ children }: { children: ReactNode }) {\n const { user, getAccessToken } = useAuth()\n\n useEffect(() => {\n async function syncToken() {\n if (user) {\n try {\n const token = await getAccessToken()\n setAuthToken(token)\n } catch {\n // Token fetch failed, clear auth\n clearAuth()\n }\n } else {\n clearAuth()\n // Clear all cached queries when user logs out\n queryClient.clear()\n }\n }\n\n syncToken()\n }, [user, getAccessToken])\n\n return <>{children}</>\n}\n\n/**\n * Provides TanStack Query context and syncs auth to the platform SDK.\n */\nexport function QueryProvider({ children }: QueryProviderProps) {\n return (\n <QueryClientProvider client={queryClient}>\n <AuthSync>{children}</AuthSync>\n <ReactQueryDevtools initialIsOpen={false} />\n </QueryClientProvider>\n )\n}\n","/**\n * TanStack Query Client Configuration\n */\n\nimport { QueryClient } from '@tanstack/react-query'\n\n/**\n * Shared QueryClient instance for the dashboard.\n *\n * Configuration:\n * - staleTime: 30 seconds - data is considered fresh for 30s\n * - gcTime: 5 minutes - unused data is garbage collected after 5m\n * - retry: 1 - retry failed requests once\n * - refetchOnWindowFocus: false - don't refetch when window regains focus\n */\nexport const queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 30 * 1000, // 30 seconds\n gcTime: 5 * 60 * 1000, // 5 minutes\n retry: 1,\n refetchOnWindowFocus: false,\n },\n },\n})\n","import { AuthGate as AuthAuthGate } from '@mdxui/auth'\nimport type { ReactNode } from 'react'\nimport { LandingPage } from '../components/layout/landing-page'\nimport { useDashboard } from '../context/dashboard-context'\n\ninterface AuthGateProps {\n children: ReactNode\n}\n\n/**\n * AuthGate handles authentication state and shows appropriate UI:\n * - Loading state while checking auth\n * - Landing page or redirect when not authenticated\n * - Children (dashboard) when authenticated\n *\n * Uses @mdxui/auth's AuthGate with dashboard-specific configuration.\n */\nexport function AuthGate({ children }: AuthGateProps) {\n const { config } = useDashboard()\n const { identity } = config\n\n return (\n <AuthAuthGate\n required={identity.required ?? true}\n onUnauthenticated={identity.onUnauthenticated ?? 'landing'}\n redirectUrl={identity.unauthenticatedRedirectUrl}\n landingComponent={identity.landingComponent ?? <LandingPage />}\n >\n {children}\n </AuthAuthGate>\n )\n}\n","import type { ReactNode } from 'react'\nimport { useEffect } from 'react'\nimport { BrowserRouter, MemoryRouter, Navigate, Route, Routes, useLocation } from 'react-router-dom'\nimport { DashboardLayout } from './components/layout'\nimport { useCustomRoutes, useRoutes } from './context/dashboard-context'\nimport {\n BillingPage,\n DatabasePage,\n IntegrationsPage,\n KeysPage,\n OverviewPage,\n RequestsPage,\n SettingsProfilePage,\n SettingsSecurityPage,\n SettingsSessionsPage,\n TeamPage,\n VaultPage,\n WebhooksActivityPage,\n WebhooksEndpointsPage,\n WebhooksEventCatalogPage,\n WebhooksLogsPage,\n} from './pages'\n\ninterface DashboardRouterProps {\n basePath?: string\n children: ReactNode\n}\n\n/**\n * Detect if we're running inside Next.js\n * Uses __NEXT_DATA__ which is set by Next.js on the window object\n */\nfunction isNextJs(): boolean {\n if (typeof window === 'undefined') return false\n return '__NEXT_DATA__' in window\n}\n\n/**\n * Component that syncs React Router location to browser URL\n * Used with MemoryRouter to update the URL without triggering Next.js navigation\n */\nfunction UrlSync({ basePath }: { basePath: string }) {\n const location = useLocation()\n\n useEffect(() => {\n // Construct the full path with basePath\n const normalizedBase = basePath.endsWith('/') ? basePath.slice(0, -1) : basePath\n const path = location.pathname === '/' ? '' : location.pathname\n const fullPath = `${normalizedBase}${path}${location.search}${location.hash}`\n\n // Only update if the URL is different\n if (window.location.pathname + window.location.search + window.location.hash !== fullPath) {\n window.history.replaceState(null, '', fullPath)\n }\n }, [location, basePath])\n\n return null\n}\n\n/**\n * Get the initial path from the current browser URL, relative to basePath\n */\nfunction getInitialPathFromUrl(basePath: string): string {\n if (typeof window === 'undefined') return '/'\n\n const normalizedBase = basePath.endsWith('/') ? basePath.slice(0, -1) : basePath\n const currentPath = window.location.pathname\n\n if (currentPath.startsWith(normalizedBase)) {\n const relativePath = currentPath.slice(normalizedBase.length)\n return relativePath || '/'\n }\n\n return '/'\n}\n\n/**\n * Router wrapper that auto-detects the environment.\n * - In Next.js: Uses MemoryRouter with URL sync to avoid conflicts with Next.js routing\n * - In Vite/SPA: Uses BrowserRouter for native browser history\n */\nexport function DashboardRouter({ basePath = '/', children }: DashboardRouterProps) {\n const useMemoryRouter = isNextJs()\n const initialPath = getInitialPathFromUrl(basePath)\n\n if (useMemoryRouter) {\n return (\n <MemoryRouter initialEntries={[initialPath]}>\n <UrlSync basePath={basePath} />\n {children}\n </MemoryRouter>\n )\n }\n\n return <BrowserRouter basename={basePath}>{children}</BrowserRouter>\n}\n\nexport function DashboardRoutes() {\n const routes = useRoutes()\n const customRoutes = useCustomRoutes()\n\n return (\n <Routes>\n <Route element={<DashboardLayout />}>\n {/* Overview / Home */}\n {routes.overview && <Route index element={<OverviewPage />} />}\n\n {/* Requests */}\n {routes.requests && <Route path='requests' element={<RequestsPage />} />}\n\n {/* API Keys */}\n {routes.keys && <Route path='keys' element={<KeysPage />} />}\n\n {/* Team */}\n {routes.team && <Route path='team' element={<TeamPage />} />}\n\n {/* Billing */}\n {routes.billing && <Route path='billing' element={<BillingPage />} />}\n\n {/* Settings */}\n {routes.settings && (\n <>\n <Route path='settings' element={<Navigate to='settings/profile' replace />} />\n <Route path='settings/profile' element={<SettingsProfilePage />} />\n <Route path='settings/security' element={<SettingsSecurityPage />} />\n <Route path='settings/sessions' element={<SettingsSessionsPage />} />\n </>\n )}\n\n {/* Webhooks */}\n {routes.webhooks && (\n <>\n <Route path='webhooks' element={<Navigate to='webhooks/endpoints' replace />} />\n <Route path='webhooks/endpoints' element={<WebhooksEndpointsPage />} />\n <Route path='webhooks/activity' element={<WebhooksActivityPage />} />\n <Route path='webhooks/logs' element={<WebhooksLogsPage />} />\n <Route path='webhooks/event-catalog' element={<WebhooksEventCatalogPage />} />\n </>\n )}\n\n {/* Database */}\n {routes.database && <Route path='database' element={<DatabasePage />} />}\n\n {/* Integrations */}\n {routes.integrations && <Route path='integrations' element={<IntegrationsPage />} />}\n\n {/* Vault */}\n {routes.vault && <Route path='vault' element={<VaultPage />} />}\n\n {/* Custom Routes - injected by consumer */}\n {customRoutes.map((route) => (\n <Route\n key={route.path}\n path={route.path.startsWith('/') ? route.path.slice(1) : route.path}\n index={route.index}\n element={route.element}\n />\n ))}\n\n {/* Fallback - go to first custom index route or first custom route */}\n {(() => {\n const indexRoute = customRoutes.find((r) => r.index)\n const fallbackPath = indexRoute?.path || customRoutes[0]?.path || '/'\n return <Route path='*' element={<Navigate to={fallbackPath} replace />} />\n })()}\n </Route>\n </Routes>\n )\n}\n","import { Badge } from '@mdxui/primitives/badge'\nimport { Breadcrumb, BreadcrumbItem, BreadcrumbList, BreadcrumbPage } from '@mdxui/primitives/breadcrumb'\nimport { Button } from '@mdxui/primitives/button'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@mdxui/primitives/card'\nimport { Label } from '@mdxui/primitives/label'\nimport { Progress } from '@mdxui/primitives/progress'\nimport { Separator } from '@mdxui/primitives/separator'\nimport { SidebarTrigger } from '@mdxui/primitives/sidebar'\nimport { Switch } from '@mdxui/primitives/switch'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@mdxui/primitives/table'\nimport { Bell, Check, CreditCard, Download, FileText, Receipt } from 'lucide-react'\nimport { useState } from 'react'\nimport { toast } from 'sonner'\nimport { mockBillingData } from '../lib/mock-data'\n\nexport type BillingData = typeof mockBillingData\n\nexport interface BillingPageProps {\n /** Billing data - uses mock data if not provided */\n billingData?: BillingData\n /** Callback when \"Manage Plan\" is clicked */\n onManagePlan?: () => Promise<void>\n /** Callback when \"Update\" payment method is clicked */\n onUpdatePaymentMethod?: () => Promise<void>\n /** Callback when an invoice is downloaded */\n onDownloadInvoice?: (invoiceId: string) => Promise<void>\n /** Callback when billing alerts are toggled */\n onToggleAlerts?: (enabled: boolean) => Promise<void>\n /** Hide the header with sidebar trigger and breadcrumb */\n hideHeader?: boolean\n /** Additional CSS class for the container */\n className?: string\n}\n\nfunction formatRelativeDate(dateString: string): string {\n const date = new Date(dateString)\n return date.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n })\n}\n\nfunction formatUsage(usage: number, unit: string): string {\n if (usage >= 1000) {\n return `${(usage / 1000).toFixed(1)}k ${unit}`\n }\n return `${usage} ${unit}`\n}\n\nfunction getUsagePercentage(usage: number, limit: number): number {\n return Math.min((usage / limit) * 100, 100)\n}\n\nfunction getUsageColor(percentage: number): string {\n if (percentage >= 90) return 'bg-destructive'\n if (percentage >= 75) return 'bg-yellow-500'\n return ''\n}\n\nexport function BillingPage({\n billingData: initialBillingData,\n onManagePlan,\n onUpdatePaymentMethod,\n onDownloadInvoice,\n onToggleAlerts,\n hideHeader = false,\n className,\n}: BillingPageProps = {}) {\n const billingData = initialBillingData ?? mockBillingData\n const [alertsEnabled, setAlertsEnabled] = useState(billingData.billingAlerts.enabled)\n\n const handleManagePlan = async () => {\n if (onManagePlan) {\n try {\n await onManagePlan()\n } catch {\n toast.error('Failed to open plan management')\n }\n } else {\n toast.info('Plan management would open here')\n }\n }\n\n const handleUpdatePaymentMethod = async () => {\n if (onUpdatePaymentMethod) {\n try {\n await onUpdatePaymentMethod()\n } catch {\n toast.error('Failed to update payment method')\n }\n } else {\n toast.info('Payment method update would open here')\n }\n }\n\n const handleDownloadInvoice = async (invoiceId: string, invoiceNumber: string) => {\n if (onDownloadInvoice) {\n try {\n await onDownloadInvoice(invoiceId)\n toast.success('Invoice downloaded', {\n description: `${invoiceNumber} has been downloaded.`,\n })\n } catch {\n toast.error('Failed to download invoice')\n }\n } else {\n toast.success('Invoice downloaded', {\n description: `${invoiceNumber} has been downloaded.`,\n })\n }\n }\n\n const handleAlertsToggle = async (enabled: boolean) => {\n if (onToggleAlerts) {\n try {\n await onToggleAlerts(enabled)\n } catch {\n toast.error('Failed to update alert settings')\n return\n }\n }\n setAlertsEnabled(enabled)\n toast.success(enabled ? 'Billing alerts enabled' : 'Billing alerts disabled', {\n description: enabled\n ? `You'll be notified when usage reaches ${billingData.billingAlerts.threshold}%.`\n : \"You won't receive usage alerts.\",\n })\n }\n\n return (\n <>\n {!hideHeader && (\n <header className='flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12'>\n <div className='flex items-center gap-2 px-4'>\n <SidebarTrigger className='-ml-1' />\n <Separator orientation='vertical' className='mr-2 data-[orientation=vertical]:h-4' />\n <Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem>\n <BreadcrumbPage>Billing</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n </div>\n </header>\n )}\n <div className={`flex flex-1 flex-col gap-4 px-4 sm:px-16 py-4 ${hideHeader ? '' : 'pt-0'} ${className ?? ''}`}>\n <div className='flex items-center justify-between'>\n <div>\n <h1 className='text-2xl font-bold'>Billing</h1>\n <p className='text-muted-foreground'>Manage your subscription and billing information.</p>\n </div>\n </div>\n\n {/* Current Plan + Total Spend */}\n <div className='grid gap-4 md:grid-cols-2'>\n <Card>\n <CardHeader>\n <div className='flex items-center justify-between'>\n <CardTitle>Current Plan</CardTitle>\n <Badge variant={billingData.status === 'active' ? 'default' : 'secondary'}>{billingData.status}</Badge>\n </div>\n <CardDescription>\n Renews{' '}\n {new Date(billingData.renewalDate).toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' })}\n </CardDescription>\n </CardHeader>\n <CardContent className='space-y-4'>\n <div className='flex items-baseline gap-2'>\n <p className='text-3xl font-bold'>{billingData.plan}</p>\n <p className='text-lg text-muted-foreground'>${billingData.planPrice.toFixed(0)}/mo</p>\n </div>\n <div className='space-y-2'>\n {billingData.planFeatures.map((feature) => (\n <div key={feature} className='flex items-center gap-2 text-sm text-muted-foreground'>\n <Check className='h-4 w-4 text-primary' />\n {feature}\n </div>\n ))}\n </div>\n <Button variant='outline' size='sm' className='w-full' onClick={handleManagePlan}>\n Manage Plan\n </Button>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Total Spend</CardTitle>\n </CardHeader>\n <CardContent className='space-y-1'>\n <p className='text-3xl font-bold'>${billingData.totalSpend.toFixed(2)}</p>\n <p className='text-sm text-muted-foreground'>This billing period</p>\n </CardContent>\n </Card>\n </div>\n\n {/* Usage Breakdown + Payment/Alerts */}\n <div className='grid gap-4 md:grid-cols-2'>\n {/* Usage Breakdown - spans full height */}\n <Card className='md:row-span-2'>\n <CardHeader>\n <CardTitle>Usage Breakdown</CardTitle>\n <CardDescription>Resource usage for the current billing period</CardDescription>\n </CardHeader>\n <CardContent className='space-y-6'>\n {billingData.usageBreakdown.map((item) => {\n const percentage = getUsagePercentage(item.usage, item.limit)\n const colorClass = getUsageColor(percentage)\n\n return (\n <div key={item.resource} className='space-y-2'>\n <div className='flex items-center justify-between'>\n <div>\n <p className='font-medium'>{item.resource}</p>\n <p className='text-sm text-muted-foreground'>\n {formatUsage(item.usage, item.unit)} of {formatUsage(item.limit, item.unit)}\n </p>\n </div>\n <div className='text-right'>\n <p className='font-medium'>${item.cost.toFixed(2)}</p>\n <p className='text-sm text-muted-foreground'>{percentage.toFixed(0)}% used</p>\n </div>\n </div>\n <Progress value={percentage} className={`h-2 ${colorClass ? `[&>div]:${colorClass}` : ''}`} />\n </div>\n )\n })}\n </CardContent>\n </Card>\n\n {/* Payment Method */}\n <Card>\n <CardHeader className='pb-3'>\n <CardTitle className='flex items-center gap-2 text-base'>\n <CreditCard className='h-4 w-4' />\n Payment Method\n </CardTitle>\n </CardHeader>\n <CardContent className='space-y-3'>\n <div className='flex items-center justify-between p-3 border rounded-md'>\n <div className='flex items-center gap-3'>\n <div className='h-8 w-12 bg-muted rounded flex items-center justify-center text-xs font-medium'>\n {billingData.paymentMethod.brand}\n </div>\n <div>\n <p className='font-medium text-sm'>•••• {billingData.paymentMethod.last4}</p>\n <p className='text-xs text-muted-foreground'>\n Expires {billingData.paymentMethod.expiryMonth}/{billingData.paymentMethod.expiryYear}\n </p>\n </div>\n </div>\n <Badge variant='secondary' className='text-xs'>\n Default\n </Badge>\n </div>\n <Button variant='outline' size='sm' className='w-full' onClick={handleUpdatePaymentMethod}>\n Update\n </Button>\n </CardContent>\n </Card>\n\n {/* Billing Alerts */}\n <Card>\n <CardHeader className='pb-3'>\n <CardTitle className='flex items-center gap-2 text-base'>\n <Bell className='h-4 w-4' />\n Billing Alerts\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className='flex items-start justify-between gap-4'>\n <div className='space-y-1'>\n <Label htmlFor='alerts' className='text-sm'>\n Usage alerts\n </Label>\n <p className='text-xs text-muted-foreground'>Notify at {billingData.billingAlerts.threshold}% usage</p>\n </div>\n <Switch id='alerts' checked={alertsEnabled} onCheckedChange={handleAlertsToggle} />\n </div>\n </CardContent>\n </Card>\n </div>\n\n {/* Invoice History */}\n <Card>\n <CardHeader>\n <CardTitle className='flex items-center gap-2'>\n <Receipt className='h-5 w-5' />\n Invoice History\n </CardTitle>\n </CardHeader>\n <CardContent>\n {billingData.invoices.length > 0 ? (\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead className='pl-4'>Invoice</TableHead>\n <TableHead>Date</TableHead>\n <TableHead>Amount</TableHead>\n <TableHead>Status</TableHead>\n <TableHead className='w-[80px]'></TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {billingData.invoices.map((invoice) => (\n <TableRow key={invoice.id}>\n <TableCell className='py-4 pl-4 font-mono text-sm'>{invoice.invoiceNumber}</TableCell>\n <TableCell className='py-4'>{formatRelativeDate(invoice.date)}</TableCell>\n <TableCell className='py-4 font-medium'>${invoice.amount.toFixed(2)}</TableCell>\n <TableCell className='py-4'>\n <Badge variant={invoice.status === 'paid' ? 'default' : 'secondary'}>{invoice.status}</Badge>\n </TableCell>\n <TableCell className='py-4 pr-4'>\n <Button variant='ghost' size='icon' onClick={() => handleDownloadInvoice(invoice.id, invoice.invoiceNumber)}>\n <Download className='h-4 w-4' />\n </Button>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n ) : (\n <div className='flex flex-col items-center justify-center gap-4 py-16 text-center'>\n <div className='rounded-full bg-muted p-4'>\n <FileText className='h-8 w-8 text-muted-foreground' />\n </div>\n <div>\n <p className='font-medium'>No invoices yet</p>\n <p className='text-sm text-muted-foreground mt-1'>Your invoices will appear here after your first billing cycle.</p>\n </div>\n </div>\n )}\n </CardContent>\n </Card>\n </div>\n </>\n )\n}\n","// Mock data for the developer dashboard\n\n// Time period options for filtering\nexport type TimePeriod = \"today\" | \"7d\" | \"30d\" | \"60d\" | \"90d\" | \"all\";\n\nexport const timePeriodOptions: { value: TimePeriod; label: string }[] = [\n { value: \"today\", label: \"Today\" },\n { value: \"7d\", label: \"7 Days\" },\n { value: \"30d\", label: \"30 Days\" },\n { value: \"60d\", label: \"60 Days\" },\n { value: \"90d\", label: \"90 Days\" },\n { value: \"all\", label: \"All Time\" },\n];\n\n// Extended usage data for 90+ days (deterministic to avoid hydration mismatch)\nexport const mockUsageData = [\n // Older data (60-90 days ago)\n { date: \"2024-08-26\", requests: 1100 },\n { date: \"2024-08-27\", requests: 1050 },\n { date: \"2024-08-28\", requests: 1180 },\n { date: \"2024-08-29\", requests: 1220 },\n { date: \"2024-08-30\", requests: 980 },\n { date: \"2024-08-31\", requests: 890 },\n { date: \"2024-09-01\", requests: 920 },\n { date: \"2024-09-02\", requests: 1050 },\n { date: \"2024-09-03\", requests: 1150 },\n { date: \"2024-09-04\", requests: 1280 },\n { date: \"2024-09-05\", requests: 1320 },\n { date: \"2024-09-06\", requests: 1180 },\n { date: \"2024-09-07\", requests: 1020 },\n { date: \"2024-09-08\", requests: 950 },\n { date: \"2024-09-09\", requests: 1100 },\n { date: \"2024-09-10\", requests: 1250 },\n { date: \"2024-09-11\", requests: 1380 },\n { date: \"2024-09-12\", requests: 1420 },\n { date: \"2024-09-13\", requests: 1290 },\n { date: \"2024-09-14\", requests: 1050 },\n { date: \"2024-09-15\", requests: 980 },\n { date: \"2024-09-16\", requests: 1120 },\n { date: \"2024-09-17\", requests: 1280 },\n { date: \"2024-09-18\", requests: 1450 },\n { date: \"2024-09-19\", requests: 1520 },\n { date: \"2024-09-20\", requests: 1380 },\n { date: \"2024-09-21\", requests: 1150 },\n { date: \"2024-09-22\", requests: 1080 },\n { date: \"2024-09-23\", requests: 1220 },\n { date: \"2024-09-24\", requests: 1350 },\n // 30-60 days ago\n { date: \"2024-09-25\", requests: 1480 },\n { date: \"2024-09-26\", requests: 1550 },\n { date: \"2024-09-27\", requests: 1420 },\n { date: \"2024-09-28\", requests: 1180 },\n { date: \"2024-09-29\", requests: 1100 },\n { date: \"2024-09-30\", requests: 1250 },\n { date: \"2024-10-01\", requests: 1380 },\n { date: \"2024-10-02\", requests: 1520 },\n { date: \"2024-10-03\", requests: 1650 },\n { date: \"2024-10-04\", requests: 1480 },\n { date: \"2024-10-05\", requests: 1220 },\n { date: \"2024-10-06\", requests: 1150 },\n { date: \"2024-10-07\", requests: 1320 },\n { date: \"2024-10-08\", requests: 1450 },\n { date: \"2024-10-09\", requests: 1580 },\n { date: \"2024-10-10\", requests: 1720 },\n { date: \"2024-10-11\", requests: 1550 },\n { date: \"2024-10-12\", requests: 1280 },\n { date: \"2024-10-13\", requests: 1180 },\n { date: \"2024-10-14\", requests: 1350 },\n { date: \"2024-10-15\", requests: 1480 },\n { date: \"2024-10-16\", requests: 1620 },\n { date: \"2024-10-17\", requests: 1750 },\n { date: \"2024-10-18\", requests: 1580 },\n { date: \"2024-10-19\", requests: 1320 },\n { date: \"2024-10-20\", requests: 1220 },\n { date: \"2024-10-21\", requests: 1380 },\n { date: \"2024-10-22\", requests: 1520 },\n { date: \"2024-10-23\", requests: 1680 },\n { date: \"2024-10-24\", requests: 1820 },\n // Original 30 days data\n { date: \"2024-10-25\", requests: 1250 },\n { date: \"2024-10-26\", requests: 1340 },\n { date: \"2024-10-27\", requests: 980 },\n { date: \"2024-10-28\", requests: 1520 },\n { date: \"2024-10-29\", requests: 1680 },\n { date: \"2024-10-30\", requests: 1420 },\n { date: \"2024-10-31\", requests: 1890 },\n { date: \"2024-11-01\", requests: 2100 },\n { date: \"2024-11-02\", requests: 1750 },\n { date: \"2024-11-03\", requests: 1320 },\n { date: \"2024-11-04\", requests: 1480 },\n { date: \"2024-11-05\", requests: 1650 },\n { date: \"2024-11-06\", requests: 1920 },\n { date: \"2024-11-07\", requests: 2050 },\n { date: \"2024-11-08\", requests: 1780 },\n { date: \"2024-11-09\", requests: 1450 },\n { date: \"2024-11-10\", requests: 1280 },\n { date: \"2024-11-11\", requests: 1620 },\n { date: \"2024-11-12\", requests: 1850 },\n { date: \"2024-11-13\", requests: 2200 },\n { date: \"2024-11-14\", requests: 2350 },\n { date: \"2024-11-15\", requests: 1980 },\n { date: \"2024-11-16\", requests: 1550 },\n { date: \"2024-11-17\", requests: 1380 },\n { date: \"2024-11-18\", requests: 1720 },\n { date: \"2024-11-19\", requests: 1950 },\n { date: \"2024-11-20\", requests: 2180 },\n { date: \"2024-11-21\", requests: 2420 },\n { date: \"2024-11-22\", requests: 2080 },\n { date: \"2024-11-23\", requests: 1650 },\n { date: \"2024-11-24\", requests: 1820 },\n];\n\n// Helper to filter usage data by time period\nexport function getUsageDataByPeriod(period: TimePeriod) {\n const data = [...mockUsageData];\n\n switch (period) {\n case \"today\":\n return data.filter(d => d.date === \"2024-11-24\");\n case \"7d\":\n return data.slice(-7);\n case \"30d\":\n return data.slice(-30);\n case \"60d\":\n return data.slice(-60);\n case \"90d\":\n return data.slice(-90);\n case \"all\":\n default:\n return data;\n }\n}\n\n// Helper to get stats for a time period\nexport function getStatsByPeriod(period: TimePeriod) {\n const usageData = getUsageDataByPeriod(period);\n const totalRequests = usageData.reduce((sum, day) => sum + day.requests, 0);\n\n // Scale costs and errors based on period\n const periodMultiplier = {\n today: 1 / 30,\n \"7d\": 7 / 30,\n \"30d\": 1,\n \"60d\": 2,\n \"90d\": 3,\n all: mockUsageData.length / 30,\n };\n\n const multiplier = periodMultiplier[period];\n\n return {\n totalRequests,\n totalCost: mockBillingData.totalSpend * multiplier,\n errorCount: Math.round(23 * multiplier),\n };\n}\n\nexport const mockApiKeys = [\n {\n id: \"1\",\n name: \"Production Key\",\n key: \"sk_live_abc123def456ghi789jkl012\",\n created: \"2024-10-15\",\n lastUsed: \"2024-11-24\",\n status: \"active\" as const,\n },\n {\n id: \"2\",\n name: \"Development Key\",\n key: \"sk_test_xyz789abc123def456ghi012\",\n created: \"2024-11-01\",\n lastUsed: \"2024-11-23\",\n status: \"active\" as const,\n },\n {\n id: \"3\",\n name: \"CI/CD Pipeline\",\n key: \"sk_live_mno345pqr678stu901vwx234\",\n created: \"2024-11-10\",\n lastUsed: null,\n status: \"never_used\" as const,\n },\n];\n\nexport const mockBillingData = {\n plan: \"Pro\",\n planPrice: 49.0,\n planFeatures: [\n \"100,000 API requests/month\",\n \"50 GB storage\",\n \"Priority support\",\n \"Advanced analytics\",\n ],\n status: \"active\" as const,\n renewalDate: \"2024-12-01\",\n totalSpend: 127.5,\n usageBreakdown: [\n { resource: \"API Requests\", usage: 45230, limit: 100000, unit: \"requests\", cost: 45.23 },\n { resource: \"Data Transfer\", usage: 12.5, limit: 100, unit: \"GB\", cost: 25.0 },\n { resource: \"Storage\", usage: 50, limit: 50, unit: \"GB\", cost: 10.0 },\n { resource: \"Compute Hours\", usage: 156, limit: 500, unit: \"hrs\", cost: 47.27 },\n ],\n invoices: [\n { id: \"inv_001\", invoiceNumber: \"INV-2024-001\", date: \"2024-11-01\", amount: 99.0, status: \"paid\" as const },\n { id: \"inv_002\", invoiceNumber: \"INV-2024-002\", date: \"2024-10-01\", amount: 89.5, status: \"paid\" as const },\n { id: \"inv_003\", invoiceNumber: \"INV-2024-003\", date: \"2024-09-01\", amount: 112.0, status: \"paid\" as const },\n ],\n paymentMethod: {\n type: \"card\" as const,\n brand: \"Visa\",\n last4: \"4242\",\n expiryMonth: 12,\n expiryYear: 2026,\n },\n billingAlerts: {\n enabled: true,\n threshold: 80,\n },\n};\n\n// Stats derived from usage data\nexport const mockStats = {\n totalRequests: mockUsageData.reduce((sum, day) => sum + day.requests, 0),\n totalCost: mockBillingData.totalSpend,\n errorCount: 23,\n};\n\n// ============================================================================\n// REQUESTS MOCK DATA\n// ============================================================================\n\nexport type RequestMethod = \"GET\" | \"POST\" | \"PUT\" | \"DELETE\" | \"PATCH\";\n\nexport interface MockRequest {\n id: string;\n timestamp: string;\n method: RequestMethod;\n endpoint: string;\n statusCode: number;\n latency: number;\n cost: number;\n requestPayload: Record<string, unknown>;\n responsePayload: Record<string, unknown>;\n}\n\nexport const mockRequests: MockRequest[] = [\n {\n id: \"req_001\",\n timestamp: \"2024-11-24T14:34:12Z\",\n method: \"GET\",\n endpoint: \"/v1/lookup\",\n statusCode: 200,\n latency: 124,\n cost: 0.002,\n requestPayload: { vin: \"1HGCM82633A004352\" },\n responsePayload: { make: \"Honda\", model: \"Accord\", year: 2003, trim: \"EX\" },\n },\n {\n id: \"req_002\",\n timestamp: \"2024-11-24T14:33:58Z\",\n method: \"POST\",\n endpoint: \"/v1/decode\",\n statusCode: 500,\n latency: 892,\n cost: 0.005,\n requestPayload: { vin: \"INVALID_VIN_123\" },\n responsePayload: { error: \"Internal server error\", code: \"DECODE_FAILED\" },\n },\n {\n id: \"req_003\",\n timestamp: \"2024-11-24T14:33:41Z\",\n method: \"GET\",\n endpoint: \"/v1/lookup\",\n statusCode: 200,\n latency: 98,\n cost: 0.002,\n requestPayload: { vin: \"5YJSA1E26HF000001\" },\n responsePayload: { make: \"Tesla\", model: \"Model S\", year: 2017, trim: \"75D\" },\n },\n {\n id: \"req_004\",\n timestamp: \"2024-11-24T14:32:15Z\",\n method: \"POST\",\n endpoint: \"/v1/batch\",\n statusCode: 200,\n latency: 1250,\n cost: 0.025,\n requestPayload: { vins: [\"1HGCM82633A004352\", \"5YJSA1E26HF000001\", \"WVWZZZ3CZWE000001\"] },\n responsePayload: { results: [{ vin: \"1HGCM82633A004352\", status: \"success\" }, { vin: \"5YJSA1E26HF000001\", status: \"success\" }, { vin: \"WVWZZZ3CZWE000001\", status: \"success\" }] },\n },\n {\n id: \"req_005\",\n timestamp: \"2024-11-24T14:31:02Z\",\n method: \"GET\",\n endpoint: \"/v1/lookup\",\n statusCode: 404,\n latency: 45,\n cost: 0.001,\n requestPayload: { vin: \"NOTFOUND12345678\" },\n responsePayload: { error: \"VIN not found\", code: \"NOT_FOUND\" },\n },\n {\n id: \"req_006\",\n timestamp: \"2024-11-24T14:29:48Z\",\n method: \"PUT\",\n endpoint: \"/v1/records/rec_123\",\n statusCode: 200,\n latency: 156,\n cost: 0.003,\n requestPayload: { notes: \"Customer requested update\", verified: true },\n responsePayload: { id: \"rec_123\", updated: true, timestamp: \"2024-11-24T14:29:48Z\" },\n },\n {\n id: \"req_007\",\n timestamp: \"2024-11-24T14:28:33Z\",\n method: \"DELETE\",\n endpoint: \"/v1/records/rec_456\",\n statusCode: 204,\n latency: 89,\n cost: 0.001,\n requestPayload: {},\n responsePayload: {},\n },\n {\n id: \"req_008\",\n timestamp: \"2024-11-24T14:27:19Z\",\n method: \"GET\",\n endpoint: \"/v1/lookup\",\n statusCode: 429,\n latency: 12,\n cost: 0.0,\n requestPayload: { vin: \"1HGCM82633A004352\" },\n responsePayload: { error: \"Rate limit exceeded\", code: \"RATE_LIMITED\", retryAfter: 60 },\n },\n {\n id: \"req_009\",\n timestamp: \"2024-11-24T14:26:05Z\",\n method: \"POST\",\n endpoint: \"/v1/decode\",\n statusCode: 200,\n latency: 234,\n cost: 0.005,\n requestPayload: { vin: \"WVWZZZ3CZWE000001\", includeHistory: true },\n responsePayload: { make: \"Volkswagen\", model: \"Golf\", year: 2014, history: { accidents: 0, owners: 2 } },\n },\n {\n id: \"req_010\",\n timestamp: \"2024-11-24T14:24:51Z\",\n method: \"GET\",\n endpoint: \"/v1/health\",\n statusCode: 200,\n latency: 8,\n cost: 0.0,\n requestPayload: {},\n responsePayload: { status: \"healthy\", version: \"2.1.0\" },\n },\n {\n id: \"req_011\",\n timestamp: \"2024-11-24T14:23:38Z\",\n method: \"POST\",\n endpoint: \"/v1/decode\",\n statusCode: 400,\n latency: 34,\n cost: 0.0,\n requestPayload: { vin: \"SHORT\" },\n responsePayload: { error: \"Invalid VIN format\", code: \"INVALID_FORMAT\" },\n },\n {\n id: \"req_012\",\n timestamp: \"2024-11-24T14:22:24Z\",\n method: \"GET\",\n endpoint: \"/v1/lookup\",\n statusCode: 200,\n latency: 112,\n cost: 0.002,\n requestPayload: { vin: \"JM1BK32F781000001\" },\n responsePayload: { make: \"Mazda\", model: \"3\", year: 2008, trim: \"Sport\" },\n },\n];\n\n// Helper to filter requests\nexport function getRequestsByStatus(status: \"all\" | \"success\" | \"error\") {\n if (status === \"all\") return mockRequests;\n if (status === \"success\") return mockRequests.filter(r => r.statusCode >= 200 && r.statusCode < 300);\n return mockRequests.filter(r => r.statusCode >= 400);\n}\n\n// ============================================================================\n// WEBHOOKS MOCK DATA\n// ============================================================================\n\nexport interface WebhookEndpoint {\n id: string;\n url: string;\n events: string[];\n lastDelivery: string | null;\n status: \"active\" | \"disabled\";\n secret: string;\n createdAt: string;\n failureCount: number;\n}\n\nexport interface WebhookEvent {\n id: string;\n name: string;\n description: string;\n category: string;\n payloadSchema: Record<string, unknown>;\n}\n\nexport interface WebhookLog {\n id: string;\n timestamp: string;\n eventName: string;\n endpointId: string;\n endpointUrl: string;\n statusCode: number;\n latency: number;\n requestPayload: Record<string, unknown>;\n responseBody: string | null;\n}\n\nexport const mockWebhookEndpoints: WebhookEndpoint[] = [\n {\n id: \"ep_001\",\n url: \"https://api.acme.co/webhooks\",\n events: [\"record.created\", \"record.updated\", \"record.deleted\", \"batch.completed\"],\n lastDelivery: \"2024-11-24T14:32:00Z\",\n status: \"active\",\n secret: \"whsec_abc123def456ghi789\",\n createdAt: \"2024-10-01T10:00:00Z\",\n failureCount: 0,\n },\n {\n id: \"ep_002\",\n url: \"https://hooks.slack.com/services/T00/B00/abc123\",\n events: [\"batch.completed\", \"batch.failed\"],\n lastDelivery: \"2024-11-24T13:15:00Z\",\n status: \"active\",\n secret: \"whsec_xyz789mno456pqr123\",\n createdAt: \"2024-10-15T14:30:00Z\",\n failureCount: 2,\n },\n {\n id: \"ep_003\",\n url: \"https://webhook.site/test-endpoint\",\n events: [\"record.created\"],\n lastDelivery: null,\n status: \"disabled\",\n secret: \"whsec_test123456789\",\n createdAt: \"2024-11-01T09:00:00Z\",\n failureCount: 0,\n },\n];\n\nexport const mockWebhookEvents: WebhookEvent[] = [\n {\n id: \"evt_001\",\n name: \"record.created\",\n description: \"Fired when a new record is created in the database\",\n category: \"Records\",\n payloadSchema: {\n event: \"record.created\",\n timestamp: \"2024-11-24T14:00:00Z\",\n data: {\n id: \"rec_abc123\",\n vin: \"1HGCM82633A004352\",\n make: \"Honda\",\n model: \"Accord\",\n createdAt: \"2024-11-24T14:00:00Z\",\n },\n },\n },\n {\n id: \"evt_002\",\n name: \"record.updated\",\n description: \"Fired when an existing record is modified\",\n category: \"Records\",\n payloadSchema: {\n event: \"record.updated\",\n timestamp: \"2024-11-24T14:00:00Z\",\n data: {\n id: \"rec_abc123\",\n changes: {\n notes: { old: null, new: \"Verified by customer\" },\n verified: { old: false, new: true },\n },\n updatedAt: \"2024-11-24T14:00:00Z\",\n },\n },\n },\n {\n id: \"evt_003\",\n name: \"record.deleted\",\n description: \"Fired when a record is permanently deleted\",\n category: \"Records\",\n payloadSchema: {\n event: \"record.deleted\",\n timestamp: \"2024-11-24T14:00:00Z\",\n data: {\n id: \"rec_abc123\",\n deletedAt: \"2024-11-24T14:00:00Z\",\n },\n },\n },\n {\n id: \"evt_004\",\n name: \"batch.completed\",\n description: \"Fired when a batch processing job completes successfully\",\n category: \"Batch\",\n payloadSchema: {\n event: \"batch.completed\",\n timestamp: \"2024-11-24T14:00:00Z\",\n data: {\n batchId: \"batch_xyz789\",\n totalRecords: 150,\n successCount: 148,\n failureCount: 2,\n duration: 45000,\n },\n },\n },\n {\n id: \"evt_005\",\n name: \"batch.failed\",\n description: \"Fired when a batch processing job fails\",\n category: \"Batch\",\n payloadSchema: {\n event: \"batch.failed\",\n timestamp: \"2024-11-24T14:00:00Z\",\n data: {\n batchId: \"batch_xyz789\",\n error: \"Processing timeout exceeded\",\n processedCount: 45,\n totalCount: 150,\n },\n },\n },\n {\n id: \"evt_006\",\n name: \"api_key.created\",\n description: \"Fired when a new API key is generated\",\n category: \"Security\",\n payloadSchema: {\n event: \"api_key.created\",\n timestamp: \"2024-11-24T14:00:00Z\",\n data: {\n keyId: \"key_abc123\",\n name: \"Production Key\",\n createdBy: \"user_xyz789\",\n },\n },\n },\n {\n id: \"evt_007\",\n name: \"api_key.revoked\",\n description: \"Fired when an API key is revoked\",\n category: \"Security\",\n payloadSchema: {\n event: \"api_key.revoked\",\n timestamp: \"2024-11-24T14:00:00Z\",\n data: {\n keyId: \"key_abc123\",\n revokedBy: \"user_xyz789\",\n reason: \"Compromised credentials\",\n },\n },\n },\n];\n\nexport const mockWebhookLogs: WebhookLog[] = [\n {\n id: \"log_001\",\n timestamp: \"2024-11-24T14:34:00Z\",\n eventName: \"record.created\",\n endpointId: \"ep_001\",\n endpointUrl: \"https://api.acme.co/webhooks\",\n statusCode: 200,\n latency: 124,\n requestPayload: { event: \"record.created\", data: { id: \"rec_123\", vin: \"1HGCM82633A004352\" } },\n responseBody: '{\"received\": true}',\n },\n {\n id: \"log_002\",\n timestamp: \"2024-11-24T14:33:00Z\",\n eventName: \"batch.completed\",\n endpointId: \"ep_002\",\n endpointUrl: \"https://hooks.slack.com/services/T00/B00/abc123\",\n statusCode: 200,\n latency: 89,\n requestPayload: { event: \"batch.completed\", data: { batchId: \"batch_456\", totalRecords: 50 } },\n responseBody: \"ok\",\n },\n {\n id: \"log_003\",\n timestamp: \"2024-11-24T14:30:00Z\",\n eventName: \"record.updated\",\n endpointId: \"ep_001\",\n endpointUrl: \"https://api.acme.co/webhooks\",\n statusCode: 500,\n latency: 2100,\n requestPayload: { event: \"record.updated\", data: { id: \"rec_789\", changes: { verified: true } } },\n responseBody: '{\"error\": \"Internal server error\"}',\n },\n {\n id: \"log_004\",\n timestamp: \"2024-11-24T14:25:00Z\",\n eventName: \"record.created\",\n endpointId: \"ep_001\",\n endpointUrl: \"https://api.acme.co/webhooks\",\n statusCode: 200,\n latency: 156,\n requestPayload: { event: \"record.created\", data: { id: \"rec_456\", vin: \"5YJSA1E26HF000001\" } },\n responseBody: '{\"received\": true}',\n },\n {\n id: \"log_005\",\n timestamp: \"2024-11-24T14:20:00Z\",\n eventName: \"batch.failed\",\n endpointId: \"ep_002\",\n endpointUrl: \"https://hooks.slack.com/services/T00/B00/abc123\",\n statusCode: 200,\n latency: 112,\n requestPayload: { event: \"batch.failed\", data: { batchId: \"batch_123\", error: \"Timeout\" } },\n responseBody: \"ok\",\n },\n {\n id: \"log_006\",\n timestamp: \"2024-11-24T14:15:00Z\",\n eventName: \"record.deleted\",\n endpointId: \"ep_001\",\n endpointUrl: \"https://api.acme.co/webhooks\",\n statusCode: 408,\n latency: 30000,\n requestPayload: { event: \"record.deleted\", data: { id: \"rec_old\" } },\n responseBody: null,\n },\n];\n\nexport const mockWebhookActivity = {\n delivered: 1247,\n failed: 12,\n pending: 3,\n successRate: 99.1,\n endpointsWithIssues: [\n { url: \"https://api.acme.co/webhooks\", failures: 8 },\n { url: \"https://hooks.slack.com/services/T00/B00/abc123\", failures: 4 },\n ],\n};\n","import { Breadcrumb, BreadcrumbItem, BreadcrumbList, BreadcrumbPage } from '@mdxui/primitives/breadcrumb'\nimport { Card, CardContent } from '@mdxui/primitives/card'\nimport { Separator } from '@mdxui/primitives/separator'\nimport { SidebarTrigger } from '@mdxui/primitives/sidebar'\nimport { Database } from 'lucide-react'\n\nexport function DatabasePage() {\n return (\n <>\n <header className='flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12'>\n <div className='flex items-center gap-2 px-4'>\n <SidebarTrigger className='-ml-1' />\n <Separator orientation='vertical' className='mr-2 data-[orientation=vertical]:h-4' />\n <Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem>\n <BreadcrumbPage>Database</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n </div>\n </header>\n <div className='flex flex-1 flex-col gap-4 px-4 sm:px-16 py-4 pt-0'>\n <div>\n <h1 className='text-2xl font-bold'>Database</h1>\n <p className='text-muted-foreground'>Browse and manage your database.</p>\n </div>\n <Card>\n <CardContent className='py-16'>\n <div className='flex flex-col items-center justify-center gap-4 text-center'>\n <div className='rounded-full bg-muted p-4'>\n <Database className='h-8 w-8 text-muted-foreground' />\n </div>\n <div>\n <p className='font-medium'>Coming soon</p>\n <p className='text-sm text-muted-foreground mt-1'>\n Database management tools will be available here.\n </p>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n </>\n )\n}\n","import { Breadcrumb, BreadcrumbItem, BreadcrumbList, BreadcrumbPage } from '@mdxui/primitives/breadcrumb'\nimport { Separator } from '@mdxui/primitives/separator'\nimport { SidebarTrigger } from '@mdxui/primitives/sidebar'\nimport { Plug } from 'lucide-react'\n\n\n// Pipes - TODO: Implement\n\nexport function IntegrationsPage() {\n return (\n\t\t\t<>\n\t\t\t\t<header className=\"flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12\">\n\t\t\t\t\t<div className=\"flex items-center gap-2 px-4\">\n\t\t\t\t\t\t<SidebarTrigger className=\"-ml-1\" />\n\t\t\t\t\t\t<Separator\n\t\t\t\t\t\t\torientation=\"vertical\"\n\t\t\t\t\t\t\tclassName=\"mr-2 data-[orientation=vertical]:h-4\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Breadcrumb>\n\t\t\t\t\t\t\t<BreadcrumbList>\n\t\t\t\t\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t\t\t\t\t<BreadcrumbPage>Integrations</BreadcrumbPage>\n\t\t\t\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t\t\t\t</BreadcrumbList>\n\t\t\t\t\t\t</Breadcrumb>\n\t\t\t\t\t</div>\n\t\t\t\t</header>\n\t\t\t\t<div className=\"flex flex-1 flex-col gap-4 px-4 sm:px-16 py-4 pt-0\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<h1 className=\"text-2xl font-bold\">Integrations</h1>\n\t\t\t\t\t\t<p className=\"text-muted-foreground\">\n\t\t\t\t\t\t\tConnect third-party services.\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div className=\"flex flex-col items-center justify-center rounded-md border border-dashed py-24 gap-4\">\n\t\t\t\t\t\t{/* <Pipes authToken={authToken} /> */}\n\t\t\t\t\t\t<div className=\"rounded-full bg-muted p-4\">\n\t\t\t\t\t\t\t<Plug className=\"h-8 w-8 text-muted-foreground\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"text-center\">\n\t\t\t\t\t\t\t<p className=\"font-medium\">Coming Soon</p>\n\t\t\t\t\t\t\t<p className=\"text-muted-foreground text-sm max-w-md mt-1\">\n\t\t\t\t\t\t\t\tConnect services like GitHub, Slack, Google, Salesforce, and\n\t\t\t\t\t\t\t\tmore.\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</>\n\t\t);\n}\n","import { Alert, AlertDescription } from '@mdxui/primitives/alert'\nimport { Breadcrumb, BreadcrumbItem, BreadcrumbList, BreadcrumbPage } from '@mdxui/primitives/breadcrumb'\nimport { Button } from '@mdxui/primitives/button'\nimport { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from '@mdxui/primitives/dialog'\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger } from '@mdxui/primitives/dropdown-menu'\nimport { Input } from '@mdxui/primitives/input'\nimport { Separator } from '@mdxui/primitives/separator'\nimport { SidebarTrigger } from '@mdxui/primitives/sidebar'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@mdxui/primitives/table'\nimport { AlertTriangle, BarChart3, Check, Copy, Key, MoreHorizontal, Pencil, Plus, Trash2 } from 'lucide-react'\nimport { useState } from 'react'\nimport { toast } from 'sonner'\nimport { mockApiKeys } from '../lib/mock-data'\n\ntype ApiKeyStatus = 'active' | 'expiring' | 'never_used'\n\nexport type ApiKey = {\n id: string\n name: string\n key: string\n created: string\n lastUsed: string | null\n status: ApiKeyStatus\n}\n\nexport interface KeysPageProps {\n /** Initial keys data - uses mock data if not provided */\n keys?: ApiKey[]\n /** Callback when a key is created - if not provided, uses internal mock */\n onCreateKey?: (name: string) => Promise<{ id: string; key: string }>\n /** Callback when a key is revoked - if not provided, uses internal mock */\n onRevokeKey?: (keyId: string) => Promise<void>\n /** Callback when a key is renamed - if not provided, uses internal mock */\n onRenameKey?: (keyId: string, newName: string) => Promise<void>\n /** Hide the header with sidebar trigger and breadcrumb */\n hideHeader?: boolean\n /** Additional CSS class for the container */\n className?: string\n}\n\nfunction maskKey(key: string): string {\n const prefix = key.substring(0, 8)\n return `${prefix}${'•'.repeat(16)}`\n}\n\nfunction getRelativeTime(dateString: string | null): string {\n if (!dateString) return 'Never used'\n\n const date = new Date(dateString)\n const now = new Date()\n const diffInMs = now.getTime() - date.getTime()\n const diffInDays = Math.floor(diffInMs / (1000 * 60 * 60 * 24))\n\n if (diffInDays === 0) return 'Today'\n if (diffInDays === 1) return 'Yesterday'\n if (diffInDays < 7) return `${diffInDays} days ago`\n if (diffInDays < 30) return `${Math.floor(diffInDays / 7)} weeks ago`\n if (diffInDays < 365) return `${Math.floor(diffInDays / 30)} months ago`\n return `${Math.floor(diffInDays / 365)} years ago`\n}\n\nfunction StatusIndicator({ status }: { status: ApiKeyStatus }) {\n const config = {\n active: {\n color: 'bg-green-500',\n label: 'Active',\n },\n expiring: {\n color: 'bg-yellow-500',\n label: 'Expiring',\n },\n never_used: {\n color: 'bg-muted-foreground',\n label: 'Never used',\n },\n }\n\n const { color, label } = config[status]\n\n return (\n <div className='flex items-center gap-2'>\n <span className={`h-2 w-2 rounded-full ${color}`} />\n <span className='text-sm'>{label}</span>\n </div>\n )\n}\n\nexport function KeysPage({\n keys: initialKeys,\n onCreateKey,\n onRevokeKey,\n onRenameKey,\n hideHeader = false,\n className,\n}: KeysPageProps = {}) {\n const [keys, setKeys] = useState<ApiKey[]>(initialKeys ?? mockApiKeys)\n const [newKeyName, setNewKeyName] = useState('')\n const [newlyCreatedKey, setNewlyCreatedKey] = useState<string | null>(null)\n const [createDialogOpen, setCreateDialogOpen] = useState(false)\n const [revokeDialogOpen, setRevokeDialogOpen] = useState(false)\n const [renameDialogOpen, setRenameDialogOpen] = useState(false)\n const [keyToRevoke, setKeyToRevoke] = useState<ApiKey | null>(null)\n const [keyToRename, setKeyToRename] = useState<ApiKey | null>(null)\n const [renameValue, setRenameValue] = useState('')\n const [copiedKeyId, setCopiedKeyId] = useState<string | null>(null)\n const [newKeyCopied, setNewKeyCopied] = useState(false)\n\n const handleCreateKey = async () => {\n const name = newKeyName || 'Untitled Key'\n\n if (onCreateKey) {\n // Use provided callback\n try {\n const result = await onCreateKey(name)\n const newKey: ApiKey = {\n id: result.id,\n name,\n key: result.key,\n created: new Date().toISOString().split('T')[0],\n lastUsed: null,\n status: 'never_used',\n }\n setKeys([...keys, newKey])\n setNewlyCreatedKey(result.key)\n } catch {\n toast.error('Failed to create API key')\n return\n }\n } else {\n // Use mock implementation\n const newKey: ApiKey = {\n id: String(Date.now()),\n name,\n key: `sk_live_${Math.random().toString(36).substring(2, 15)}${Math.random().toString(36).substring(2, 15)}`,\n created: new Date().toISOString().split('T')[0],\n lastUsed: null,\n status: 'never_used',\n }\n setKeys([...keys, newKey])\n setNewlyCreatedKey(newKey.key)\n }\n setNewKeyName('')\n }\n\n const handleRevokeKey = async () => {\n if (keyToRevoke) {\n const keyName = keyToRevoke.name\n const keyId = keyToRevoke.id\n\n if (onRevokeKey) {\n try {\n await onRevokeKey(keyId)\n } catch {\n toast.error('Failed to revoke API key')\n return\n }\n }\n\n setKeys(keys.filter((k) => k.id !== keyId))\n setKeyToRevoke(null)\n setRevokeDialogOpen(false)\n toast.success('API key revoked', {\n description: `\"${keyName}\" has been permanently revoked.`,\n })\n }\n }\n\n const handleRenameKey = async () => {\n if (keyToRename && renameValue.trim()) {\n const newName = renameValue.trim()\n const keyId = keyToRename.id\n\n if (onRenameKey) {\n try {\n await onRenameKey(keyId, newName)\n } catch {\n toast.error('Failed to rename API key')\n return\n }\n }\n\n setKeys(keys.map((k) => (k.id === keyId ? { ...k, name: newName } : k)))\n setKeyToRename(null)\n setRenameDialogOpen(false)\n setRenameValue('')\n toast.success('API key renamed', {\n description: `Key renamed to \"${newName}\".`,\n })\n }\n }\n\n const handleCopyNewKey = async () => {\n if (newlyCreatedKey) {\n await navigator.clipboard.writeText(newlyCreatedKey)\n setNewKeyCopied(true)\n setCopiedKeyId('new')\n setTimeout(() => setCopiedKeyId(null), 2000)\n toast.success('API key copied to clipboard')\n }\n }\n\n const closeCreateDialog = () => {\n setCreateDialogOpen(false)\n setNewlyCreatedKey(null)\n setNewKeyName('')\n setNewKeyCopied(false)\n }\n\n const openRenameDialog = (apiKey: ApiKey) => {\n setKeyToRename(apiKey)\n setRenameValue(apiKey.name)\n setRenameDialogOpen(true)\n }\n\n const openRevokeDialog = (apiKey: ApiKey) => {\n setKeyToRevoke(apiKey)\n setRevokeDialogOpen(true)\n }\n\n return (\n <>\n {!hideHeader && (\n <header className='flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12'>\n <div className='flex items-center gap-2 px-4'>\n <SidebarTrigger className='-ml-1' />\n <Separator orientation='vertical' className='mr-2 data-[orientation=vertical]:h-4' />\n <Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem>\n <BreadcrumbPage>API Keys</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n </div>\n </header>\n )}\n <div className={`flex flex-1 flex-col gap-4 px-4 sm:px-16 py-4 ${hideHeader ? '' : 'pt-0'} ${className ?? ''}`}>\n <div className='flex items-center justify-between'>\n <div>\n <h1 className='text-2xl font-bold'>API Keys</h1>\n <p className='text-muted-foreground'>Manage your API keys for accessing the API.</p>\n </div>\n <Dialog open={createDialogOpen} onOpenChange={setCreateDialogOpen}>\n <DialogTrigger asChild>\n <Button>\n <Plus className='h-4 w-4' />\n Create Key\n </Button>\n </DialogTrigger>\n <DialogContent>\n {newlyCreatedKey ? (\n <>\n <DialogHeader>\n <DialogTitle>API Key Created</DialogTitle>\n <DialogDescription>Your new API key has been created successfully.</DialogDescription>\n </DialogHeader>\n <Alert variant='warning'>\n <AlertTriangle className='h-4 w-4' />\n <AlertDescription>Copy your API key now. You won't be able to see it again.</AlertDescription>\n </Alert>\n <div className='flex items-center gap-2'>\n <Input value={newlyCreatedKey} readOnly className='font-mono text-sm' />\n <Button variant='outline' size='icon' onClick={handleCopyNewKey}>\n {copiedKeyId === 'new' ? <Check className='h-4 w-4' /> : <Copy className='h-4 w-4' />}\n </Button>\n </div>\n <DialogFooter>\n <Button onClick={closeCreateDialog} disabled={!newKeyCopied}>\n Done\n </Button>\n </DialogFooter>\n </>\n ) : (\n <>\n <DialogHeader>\n <DialogTitle>Create API Key</DialogTitle>\n <DialogDescription>Give your API key a name to help you identify it later.</DialogDescription>\n </DialogHeader>\n <Input placeholder='Key name (optional)' value={newKeyName} onChange={(e) => setNewKeyName(e.target.value)} />\n <DialogFooter>\n <Button variant='outline' onClick={closeCreateDialog}>\n Cancel\n </Button>\n <Button onClick={handleCreateKey}>Create</Button>\n </DialogFooter>\n </>\n )}\n </DialogContent>\n </Dialog>\n </div>\n\n <div className='rounded-md border'>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead className='pl-4'>Name</TableHead>\n <TableHead>Key</TableHead>\n <TableHead>Status</TableHead>\n <TableHead>Created</TableHead>\n <TableHead>Last Used</TableHead>\n <TableHead className='w-[60px]'></TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {keys.map((apiKey) => (\n <TableRow key={apiKey.id}>\n <TableCell className='py-4 pl-4 font-medium'>{apiKey.name}</TableCell>\n <TableCell className='py-4 font-mono text-sm text-muted-foreground'>{maskKey(apiKey.key)}</TableCell>\n <TableCell className='py-4'>\n <StatusIndicator status={apiKey.status} />\n </TableCell>\n <TableCell className='py-4'>{apiKey.created}</TableCell>\n <TableCell className='py-4 text-muted-foreground'>{getRelativeTime(apiKey.lastUsed)}</TableCell>\n <TableCell className='py-4 pr-4'>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant='ghost' size='icon' className='h-8 w-8'>\n <MoreHorizontal className='h-4 w-4' />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align='end'>\n <DropdownMenuItem onClick={() => openRenameDialog(apiKey)}>\n <Pencil className='h-4 w-4' />\n Rename\n </DropdownMenuItem>\n <DropdownMenuItem>\n <BarChart3 className='h-4 w-4' />\n View Usage\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem className='text-destructive focus:text-destructive' onClick={() => openRevokeDialog(apiKey)}>\n <Trash2 className='h-4 w-4' />\n Revoke\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </TableCell>\n </TableRow>\n ))}\n {keys.length === 0 && (\n <TableRow>\n <TableCell colSpan={6} className='py-16'>\n <div className='flex flex-col items-center justify-center gap-4 text-center'>\n <div className='rounded-full bg-muted p-4'>\n <Key className='h-8 w-8 text-muted-foreground' />\n </div>\n <div>\n <p className='font-medium'>No API keys yet</p>\n <p className='text-sm text-muted-foreground mt-1'>Create your first API key to start making requests.</p>\n </div>\n <Button onClick={() => setCreateDialogOpen(true)} className='mt-2'>\n <Plus className='h-4 w-4' />\n Create Your First Key\n </Button>\n </div>\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n </div>\n\n {/* Rename Dialog */}\n <Dialog open={renameDialogOpen} onOpenChange={setRenameDialogOpen}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Rename API Key</DialogTitle>\n <DialogDescription>Enter a new name for this API key.</DialogDescription>\n </DialogHeader>\n <Input placeholder='Key name' value={renameValue} onChange={(e) => setRenameValue(e.target.value)} />\n <DialogFooter>\n <Button\n variant='outline'\n onClick={() => {\n setRenameDialogOpen(false)\n setKeyToRename(null)\n setRenameValue('')\n }}>\n Cancel\n </Button>\n <Button onClick={handleRenameKey} disabled={!renameValue.trim()}>\n Rename\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n\n {/* Revoke Dialog */}\n <Dialog open={revokeDialogOpen} onOpenChange={setRevokeDialogOpen}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Revoke API Key</DialogTitle>\n <DialogDescription>\n Are you sure you want to revoke "{keyToRevoke?.name}"? This action cannot be undone.\n </DialogDescription>\n </DialogHeader>\n <DialogFooter>\n <Button\n variant='outline'\n onClick={() => {\n setRevokeDialogOpen(false)\n setKeyToRevoke(null)\n }}>\n Cancel\n </Button>\n <Button variant='destructive' onClick={handleRevokeKey}>\n Revoke\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </>\n )\n}\n","import { Breadcrumb, BreadcrumbItem, BreadcrumbList, BreadcrumbPage } from '@mdxui/primitives/breadcrumb'\nimport { Button } from '@mdxui/primitives/button'\nimport { Card, CardContent, CardHeader, CardTitle } from '@mdxui/primitives/card'\nimport { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@mdxui/primitives/chart'\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@mdxui/primitives/dropdown-menu'\nimport { Separator } from '@mdxui/primitives/separator'\nimport { SidebarTrigger } from '@mdxui/primitives/sidebar'\nimport { Skeleton } from '@mdxui/primitives/skeleton'\nimport { Activity, AlertTriangle, BarChart3, ChevronDown, DollarSign } from 'lucide-react'\nimport { useEffect, useState } from 'react'\nimport { Link } from 'react-router-dom'\nimport { Area, AreaChart, Bar, BarChart, ReferenceLine, XAxis, YAxis } from 'recharts'\nimport { getStatsByPeriod, getUsageDataByPeriod, type TimePeriod, timePeriodOptions } from '../lib/mock-data'\n\nconst chartConfig = {\n requests: {\n label: 'Requests',\n color: 'var(--chart-1)',\n },\n} satisfies ChartConfig\n\nfunction Sparkline({ data, color }: { data: { value: number }[]; color: string }) {\n return (\n <div className='h-8 w-20'>\n <AreaChart data={data} width={80} height={32} margin={{ top: 2, right: 0, bottom: 0, left: 0 }}>\n <Area type='monotone' dataKey='value' stroke={color} fill={color} fillOpacity={0.2} strokeWidth={1.5} />\n </AreaChart>\n </div>\n )\n}\n\nfunction StatCardSkeleton() {\n return (\n <Card>\n <CardHeader className='flex flex-row items-center justify-between space-y-0 pb-2'>\n <Skeleton className='h-4 w-24' />\n <Skeleton className='h-4 w-4' />\n </CardHeader>\n <CardContent>\n <Skeleton className='h-8 w-20 mb-1' />\n <Skeleton className='h-3 w-32' />\n </CardContent>\n </Card>\n )\n}\n\nconst SKELETON_HEIGHTS = [45, 72, 38, 85, 61, 29, 78, 52, 66, 41, 88, 55]\n\nfunction ChartSkeleton() {\n return (\n <div className='h-[500px] w-full flex items-end justify-around gap-2 px-8'>\n {SKELETON_HEIGHTS.map((height, i) => (\n <Skeleton key={i.toString()} className='w-full' style={{ height: `${height}%` }} />\n ))}\n </div>\n )\n}\n\nfunction EmptyState() {\n return (\n <div className='h-[500px] w-full flex flex-col items-center justify-center text-muted-foreground'>\n <BarChart3 className='h-12 w-12 mb-4 opacity-50' />\n <p className='text-lg font-medium'>No data available</p>\n <p className='text-sm'>There's no usage data for this time period.</p>\n </div>\n )\n}\n\nexport function OverviewPage() {\n const [selectedPeriod, setSelectedPeriod] = useState<TimePeriod>('30d')\n const [isLoading, setIsLoading] = useState(true)\n const [stats, setStats] = useState<ReturnType<typeof getStatsByPeriod> | null>(null)\n const [usageData, setUsageData] = useState<ReturnType<typeof getUsageDataByPeriod>>([])\n\n useEffect(() => {\n let cancelled = false\n // Simulate API call delay\n const timer = setTimeout(() => {\n if (!cancelled) {\n setStats(getStatsByPeriod(selectedPeriod))\n setUsageData(getUsageDataByPeriod(selectedPeriod))\n setIsLoading(false)\n }\n }, 500)\n\n return () => {\n cancelled = true\n clearTimeout(timer)\n }\n }, [selectedPeriod])\n\n const handlePeriodChange = (period: TimePeriod) => {\n setIsLoading(true)\n setSelectedPeriod(period)\n }\n\n const selectedLabel = timePeriodOptions.find((opt) => opt.value === selectedPeriod)?.label\n\n return (\n <>\n <header className='flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12'>\n <div className='flex items-center gap-2 px-4'>\n <SidebarTrigger className='-ml-1' />\n <Separator orientation='vertical' className='mr-2 data-[orientation=vertical]:h-4' />\n <Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem>\n <BreadcrumbPage>Overview</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n </div>\n </header>\n <div className='flex flex-1 flex-col gap-4 px-16 py-4 pt-0'>\n <div className='flex items-center justify-between'>\n <h1 className='text-2xl font-semibold'>Usage</h1>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant='outline' className='w-[140px] justify-between'>\n {selectedLabel}\n <ChevronDown className='h-4 w-4 opacity-50' />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align='end' className='w-[140px]'>\n {timePeriodOptions.map((option) => (\n <DropdownMenuItem key={option.value} onClick={() => handlePeriodChange(option.value)}>\n {option.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n <div className='grid auto-rows-min gap-4 md:grid-cols-3'>\n {isLoading ? (\n <>\n <StatCardSkeleton />\n <StatCardSkeleton />\n <StatCardSkeleton />\n </>\n ) : (\n <>\n <Link to='/requests' className='block'>\n <Card className='transition-colors hover:bg-muted/50 cursor-pointer'>\n <CardHeader className='flex flex-row items-center justify-between space-y-0 pb-2'>\n <CardTitle className='text-sm font-medium'>Total Requests</CardTitle>\n <Activity className='h-4 w-4 text-muted-foreground' />\n </CardHeader>\n <CardContent>\n <div className='flex items-end justify-between'>\n <div>\n <div className='text-2xl font-bold'>{stats?.totalRequests.toLocaleString() ?? '—'}</div>\n <p className='text-xs text-muted-foreground'>{selectedLabel}</p>\n </div>\n <Sparkline data={usageData.slice(-7).map((d) => ({ value: d.requests }))} color='var(--chart-1)' />\n </div>\n </CardContent>\n </Card>\n </Link>\n <Link to='/requests' className='block'>\n <Card className='transition-colors hover:bg-muted/50 cursor-pointer'>\n <CardHeader className='flex flex-row items-center justify-between space-y-0 pb-2'>\n <CardTitle className='text-sm font-medium'>Total Cost</CardTitle>\n <DollarSign className='h-4 w-4 text-muted-foreground' />\n </CardHeader>\n <CardContent>\n <div className='flex items-end justify-between'>\n <div>\n <div className='text-2xl font-bold'>${stats?.totalCost.toFixed(2) ?? '—'}</div>\n <p className='text-xs text-muted-foreground'>{selectedLabel}</p>\n </div>\n <Sparkline data={usageData.slice(-7).map((d) => ({ value: d.requests * 0.02 }))} color='var(--chart-2)' />\n </div>\n </CardContent>\n </Card>\n </Link>\n <Link to='/requests?status=error' className='block'>\n <Card className='transition-colors hover:bg-muted/50 cursor-pointer'>\n <CardHeader className='flex flex-row items-center justify-between space-y-0 pb-2'>\n <CardTitle className='text-sm font-medium'>Error Count</CardTitle>\n <AlertTriangle className='h-4 w-4 text-muted-foreground' />\n </CardHeader>\n <CardContent>\n <div className='flex items-end justify-between'>\n <div>\n <div className='text-2xl font-bold'>{stats?.errorCount ?? '—'}</div>\n <p className='text-xs text-muted-foreground'>Failed requests</p>\n </div>\n <Sparkline\n data={usageData.slice(-7).map((d) => ({\n value: Math.round(d.requests * 0.01),\n }))}\n color='var(--chart-5)'\n />\n </div>\n </CardContent>\n </Card>\n </Link>\n </>\n )}\n </div>\n <Card className='flex-1'>\n <CardHeader>\n <CardTitle>API Usage ({selectedLabel})</CardTitle>\n </CardHeader>\n <CardContent>\n {isLoading ? (\n <ChartSkeleton />\n ) : usageData.length === 0 ? (\n <EmptyState />\n ) : (\n <ChartContainer config={chartConfig} className='h-[500px] w-full'>\n <BarChart data={usageData}>\n <XAxis\n dataKey='date'\n tickLine={false}\n tickMargin={10}\n axisLine={false}\n interval={Math.max(0, Math.floor(usageData.length / 8) - 1)}\n tickFormatter={(value) => {\n const date = new Date(value)\n return date.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n })\n }}\n />\n <YAxis tickLine={false} tickMargin={10} axisLine={false} tickFormatter={(value) => `${value}`} />\n <ChartTooltip content={<ChartTooltipContent />} />\n <ReferenceLine\n y={usageData.reduce((sum, d) => sum + d.requests, 0) / usageData.length}\n stroke='var(--muted-foreground)'\n strokeDasharray='3 3'\n strokeOpacity={0.5}\n label={{\n value: `Avg: ${Math.round(usageData.reduce((sum, d) => sum + d.requests, 0) / usageData.length).toLocaleString()}`,\n position: 'insideBottomLeft',\n className: 'text-xs fill-muted-foreground',\n }}\n />\n <Bar dataKey='requests' fill='var(--color-requests)' radius={4} />\n </BarChart>\n </ChartContainer>\n )}\n </CardContent>\n </Card>\n </div>\n </>\n )\n}\n","import { Breadcrumb, BreadcrumbItem, BreadcrumbList, BreadcrumbPage } from '@mdxui/primitives/breadcrumb'\nimport { Button } from '@mdxui/primitives/button'\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@mdxui/primitives/dropdown-menu'\nimport { Separator } from '@mdxui/primitives/separator'\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from '@mdxui/primitives/sheet'\nimport { SidebarTrigger } from '@mdxui/primitives/sidebar'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@mdxui/primitives/table'\nimport { Activity, ChevronDown } from 'lucide-react'\nimport { useState } from 'react'\nimport { JsonViewer, StatusBadge } from '../components/ui'\nimport { type MockRequest, mockRequests } from '../lib/mock-data'\n\ntype StatusFilter = 'all' | 'success' | 'client_error' | 'server_error'\n\nconst statusFilterOptions: { value: StatusFilter; label: string }[] = [\n { value: 'all', label: 'All Status' },\n { value: 'success', label: 'Success (2xx)' },\n { value: 'client_error', label: 'Client Error (4xx)' },\n { value: 'server_error', label: 'Server Error (5xx)' },\n]\n\nconst methodColors: Record<string, string> = {\n GET: 'text-success',\n POST: 'text-primary',\n PUT: 'text-warning-foreground',\n PATCH: 'text-warning-foreground',\n DELETE: 'text-destructive',\n}\n\nfunction formatTimestamp(timestamp: string): string {\n const date = new Date(timestamp)\n return date.toLocaleTimeString('en-US', {\n hour: 'numeric',\n minute: '2-digit',\n second: '2-digit',\n hour12: true,\n })\n}\n\nfunction formatLatency(ms: number): string {\n if (ms >= 1000) {\n return `${(ms / 1000).toFixed(2)}s`\n }\n return `${ms}ms`\n}\n\nfunction formatCost(cost: number): string {\n if (cost === 0) return '—'\n return `$${cost.toFixed(3)}`\n}\n\nexport function RequestsPage() {\n const [statusFilter, setStatusFilter] = useState<StatusFilter>('all')\n const [selectedRequest, setSelectedRequest] = useState<MockRequest | null>(null)\n const [sheetOpen, setSheetOpen] = useState(false)\n\n const filteredRequests = mockRequests.filter((request) => {\n if (statusFilter === 'all') return true\n if (statusFilter === 'success') return request.statusCode >= 200 && request.statusCode < 300\n if (statusFilter === 'client_error') return request.statusCode >= 400 && request.statusCode < 500\n if (statusFilter === 'server_error') return request.statusCode >= 500\n return true\n })\n\n const handleRowClick = (request: MockRequest) => {\n setSelectedRequest(request)\n setSheetOpen(true)\n }\n\n return (\n <>\n <header className='flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12'>\n <div className='flex items-center gap-2 px-4'>\n <SidebarTrigger className='-ml-1' />\n <Separator orientation='vertical' className='mr-2 data-[orientation=vertical]:h-4' />\n <Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem>\n <BreadcrumbPage>Requests</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n </div>\n </header>\n <div className='flex flex-1 flex-col gap-4 px-4 sm:px-16 py-4 pt-0'>\n <div className='flex items-center justify-between'>\n <div>\n <h1 className='text-2xl font-bold'>Requests</h1>\n <p className='text-muted-foreground'>Monitor and debug your API request logs.</p>\n </div>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant='outline' className='w-[160px] justify-between'>\n {statusFilterOptions.find((o) => o.value === statusFilter)?.label}\n <ChevronDown className='h-4 w-4 opacity-50' />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align='end' className='w-[160px]'>\n {statusFilterOptions.map((option) => (\n <DropdownMenuItem key={option.value} onClick={() => setStatusFilter(option.value)}>\n {option.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n\n {/* Requests Table */}\n <div className='rounded-md border'>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead className='pl-4'>Timestamp</TableHead>\n <TableHead>Method</TableHead>\n <TableHead>Endpoint</TableHead>\n <TableHead>Status</TableHead>\n <TableHead>Latency</TableHead>\n <TableHead>Cost</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {filteredRequests.map((request) => (\n <TableRow key={request.id} className='cursor-pointer hover:bg-muted/50' onClick={() => handleRowClick(request)}>\n <TableCell className='py-3 pl-4 text-muted-foreground'>{formatTimestamp(request.timestamp)}</TableCell>\n <TableCell className='py-3'>\n <span className={`font-mono text-sm font-medium ${methodColors[request.method] || ''}`}>{request.method}</span>\n </TableCell>\n <TableCell className='py-3 font-mono text-sm'>{request.endpoint}</TableCell>\n <TableCell className='py-3'>\n <StatusBadge status={request.statusCode} />\n </TableCell>\n <TableCell className='py-3 text-muted-foreground'>{formatLatency(request.latency)}</TableCell>\n <TableCell className='py-3 text-muted-foreground'>{formatCost(request.cost)}</TableCell>\n </TableRow>\n ))}\n {filteredRequests.length === 0 && (\n <TableRow>\n <TableCell colSpan={6} className='py-16'>\n <div className='flex flex-col items-center justify-center gap-4 text-center'>\n <div className='rounded-full bg-muted p-4'>\n <Activity className='h-8 w-8 text-muted-foreground' />\n </div>\n <div>\n <p className='font-medium'>No requests found</p>\n <p className='text-sm text-muted-foreground mt-1'>No requests match the current filter.</p>\n </div>\n </div>\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n </div>\n\n {/* Request Detail Sheet */}\n <Sheet open={sheetOpen} onOpenChange={setSheetOpen}>\n <SheetContent className='w-full sm:max-w-lg overflow-y-auto'>\n {selectedRequest && (\n <>\n <SheetHeader>\n <SheetTitle className='flex items-center gap-2'>\n <span className={`font-mono ${methodColors[selectedRequest.method] || ''}`}>{selectedRequest.method}</span>\n <span className='font-mono text-muted-foreground font-normal'>{selectedRequest.endpoint}</span>\n </SheetTitle>\n <SheetDescription className='flex items-center gap-2 text-sm'>\n <StatusBadge status={selectedRequest.statusCode} />\n <span className='text-muted-foreground'>•</span>\n <span>{formatLatency(selectedRequest.latency)}</span>\n {selectedRequest.cost > 0 && (\n <>\n <span className='text-muted-foreground'>•</span>\n <span>{formatCost(selectedRequest.cost)}</span>\n </>\n )}\n <span className='text-muted-foreground'>•</span>\n <span>{formatTimestamp(selectedRequest.timestamp)}</span>\n </SheetDescription>\n </SheetHeader>\n\n <div className='mt-6 space-y-6 px-4'>\n <div>\n <h4 className='text-sm font-semibold mb-2'>Request</h4>\n <JsonViewer data={selectedRequest.requestPayload} />\n </div>\n\n <div>\n <h4 className='text-sm font-semibold mb-2'>Response</h4>\n <JsonViewer data={selectedRequest.responsePayload} />\n </div>\n </div>\n </>\n )}\n </SheetContent>\n </Sheet>\n </>\n )\n}\n","import { useAuth, UserProfile } from '@mdxui/auth'\nimport { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from '@mdxui/primitives/breadcrumb'\nimport { Separator } from '@mdxui/primitives/separator'\nimport { SidebarTrigger } from '@mdxui/primitives/sidebar'\nimport { Link } from 'react-router-dom'\nimport { MockUserProfile } from '../../components/widgets'\nimport { useDashboard } from '../../context/dashboard-context'\n\nexport function SettingsProfilePage() {\n const { config } = useDashboard()\n const useMockWidgets = config.identity?.useMockWidgets ?? false\n const { user, getAccessToken, isLoading } = useAuth()\n\n return (\n <>\n <header className='flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12'>\n <div className='flex items-center gap-2 px-4'>\n <SidebarTrigger className='-ml-1' />\n <Separator orientation='vertical' className='mr-2 data-[orientation=vertical]:h-4' />\n <Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem className='hidden md:block'>\n <BreadcrumbLink asChild>\n <Link to='/settings/profile'>Settings</Link>\n </BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator className='hidden md:block' />\n <BreadcrumbItem>\n <BreadcrumbPage>Profile</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n </div>\n </header>\n <div className='flex flex-1 flex-col gap-4 px-4 sm:px-16 py-4 pt-0'>\n <div>\n <h1 className='text-2xl font-bold'>Profile</h1>\n <p className='text-muted-foreground'>Manage your personal information and preferences.</p>\n </div>\n\n {useMockWidgets ? (\n <MockUserProfile />\n ) : isLoading ? (\n <div className='flex items-center justify-center py-12 text-muted-foreground'>Loading...</div>\n ) : !user ? (\n <div className='flex items-center justify-center rounded-md border border-dashed py-24'>\n <p className='text-muted-foreground text-sm'>Please sign in to view your profile.</p>\n </div>\n ) : (\n <UserProfile authToken={getAccessToken} />\n )}\n </div>\n </>\n )\n}\n","import { useAuth, UserSecurity } from '@mdxui/auth'\nimport { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from '@mdxui/primitives/breadcrumb'\nimport { Separator } from '@mdxui/primitives/separator'\nimport { SidebarTrigger } from '@mdxui/primitives/sidebar'\nimport { useEffect, useRef, useState } from 'react'\nimport { Link } from 'react-router-dom'\nimport { MockAuthenticationFactors } from '../../components/widgets'\nimport { useDashboard } from '../../context/dashboard-context'\n\nexport function SettingsSecurityPage() {\n const { config } = useDashboard()\n const useMockWidgets = config.identity?.useMockWidgets ?? false\n const { user, getAccessToken, isLoading } = useAuth()\n const [isEmpty, setIsEmpty] = useState(false)\n const containerRef = useRef<HTMLDivElement>(null)\n\n // Check if the widget renders empty content\n useEffect(() => {\n if (useMockWidgets || isLoading || !user) return\n\n const timer = setTimeout(() => {\n if (containerRef.current) {\n const content = containerRef.current.textContent?.trim()\n const hasVisibleContent = containerRef.current.querySelector('button, input, [role=\"button\"]')\n if (!content && !hasVisibleContent) {\n setIsEmpty(true)\n }\n }\n }, 1000)\n\n return () => clearTimeout(timer)\n }, [isLoading, user, useMockWidgets])\n\n return (\n <>\n <header className='flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12'>\n <div className='flex items-center gap-2 px-4'>\n <SidebarTrigger className='-ml-1' />\n <Separator orientation='vertical' className='mr-2 data-[orientation=vertical]:h-4' />\n <Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem className='hidden md:block'>\n <BreadcrumbLink asChild>\n <Link to='/settings/profile'>Settings</Link>\n </BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator className='hidden md:block' />\n <BreadcrumbItem>\n <BreadcrumbPage>Security</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n </div>\n </header>\n <div className='flex flex-1 flex-col gap-4 px-4 sm:px-16 py-4 pt-0'>\n <div>\n <h1 className='text-2xl font-bold'>Security</h1>\n <p className='text-muted-foreground'>Manage your password, two-factor authentication, and recovery codes.</p>\n </div>\n\n {useMockWidgets ? (\n <MockAuthenticationFactors />\n ) : isLoading ? (\n <div className='flex items-center justify-center py-12 text-muted-foreground'>Loading...</div>\n ) : !user ? (\n <div className='flex items-center justify-center rounded-md border border-dashed py-24'>\n <p className='text-muted-foreground text-sm'>Please sign in to view security settings.</p>\n </div>\n ) : isEmpty ? (\n <div className='flex items-center justify-center rounded-md border border-dashed py-24'>\n <p className='text-muted-foreground text-sm'>No security options are currently available for your account.</p>\n </div>\n ) : (\n <div ref={containerRef}>\n <UserSecurity authToken={getAccessToken} />\n </div>\n )}\n </div>\n </>\n )\n}\n","import { useAuth, UserSessions } from '@mdxui/auth'\nimport { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from '@mdxui/primitives/breadcrumb'\nimport { Separator } from '@mdxui/primitives/separator'\nimport { SidebarTrigger } from '@mdxui/primitives/sidebar'\nimport { Link } from 'react-router-dom'\nimport { MockUserSessions } from '../../components/widgets'\nimport { useDashboard } from '../../context/dashboard-context'\n\nexport function SettingsSessionsPage() {\n const { config } = useDashboard()\n const useMockWidgets = config.identity?.useMockWidgets ?? false\n const { user, getAccessToken, isLoading } = useAuth()\n\n return (\n <>\n <header className='flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12'>\n <div className='flex items-center gap-2 px-4'>\n <SidebarTrigger className='-ml-1' />\n <Separator orientation='vertical' className='mr-2 data-[orientation=vertical]:h-4' />\n <Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem className='hidden md:block'>\n <BreadcrumbLink asChild>\n <Link to='/settings/profile'>Settings</Link>\n </BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator className='hidden md:block' />\n <BreadcrumbItem>\n <BreadcrumbPage>Sessions</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n </div>\n </header>\n <div className='flex flex-1 flex-col gap-4 px-4 sm:px-16 py-4 pt-0'>\n <div>\n <h1 className='text-2xl font-bold'>Sessions</h1>\n <p className='text-muted-foreground'>View and manage your active sessions across devices.</p>\n </div>\n\n {useMockWidgets ? (\n <MockUserSessions />\n ) : isLoading ? (\n <div className='flex items-center justify-center py-12 text-muted-foreground'>Loading...</div>\n ) : !user ? (\n <div className='flex items-center justify-center rounded-md border border-dashed py-24'>\n <p className='text-muted-foreground text-sm'>Please sign in to view your sessions.</p>\n </div>\n ) : (\n <UserSessions authToken={getAccessToken} />\n )}\n </div>\n </>\n )\n}\n","import { UsersManagement, useAuth } from \"@mdxui/auth\";\nimport {\n\tBreadcrumb,\n\tBreadcrumbItem,\n\tBreadcrumbList,\n\tBreadcrumbPage,\n} from \"@mdxui/primitives/breadcrumb\";\nimport { Separator } from \"@mdxui/primitives/separator\";\nimport { SidebarTrigger } from \"@mdxui/primitives/sidebar\";\nimport { MockUsersManagement } from \"../components/widgets\";\nimport { useDashboard } from \"../context/dashboard-context\";\n\nexport interface TeamPageProps {\n\t/** Whether to use mock widgets instead of real WorkOS widgets */\n\tuseMockWidgets?: boolean;\n\t/** Hide the header with sidebar trigger and breadcrumb */\n\thideHeader?: boolean;\n\t/** Additional CSS class for the container */\n\tclassName?: string;\n}\n\nexport function TeamPage({\n\tuseMockWidgets: useMockWidgetsProp,\n\thideHeader = false,\n\tclassName,\n}: TeamPageProps = {}) {\n\tconst { config } = useDashboard();\n\tconst useMockWidgets =\n\t\tconfig.identity?.useMockWidgets ?? useMockWidgetsProp ?? false;\n\n\treturn (\n\t\t<>\n\t\t\t{!hideHeader && (\n\t\t\t\t<header className=\"flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12\">\n\t\t\t\t\t<div className=\"flex items-center gap-2 px-4\">\n\t\t\t\t\t\t<SidebarTrigger className=\"-ml-1\" />\n\t\t\t\t\t\t<Separator\n\t\t\t\t\t\t\torientation=\"vertical\"\n\t\t\t\t\t\t\tclassName=\"mr-2 data-[orientation=vertical]:h-4\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Breadcrumb>\n\t\t\t\t\t\t\t<BreadcrumbList>\n\t\t\t\t\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t\t\t\t\t<BreadcrumbPage>Team</BreadcrumbPage>\n\t\t\t\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t\t\t\t</BreadcrumbList>\n\t\t\t\t\t\t</Breadcrumb>\n\t\t\t\t\t</div>\n\t\t\t\t</header>\n\t\t\t)}\n\t\t\t<div\n\t\t\t\tclassName={`flex flex-1 flex-col gap-4 px-4 sm:px-16 py-4 ${hideHeader ? \"\" : \"pt-0\"} ${className ?? \"\"}`}\n\t\t\t>\n\t\t\t\t<div>\n\t\t\t\t\t<h1 className=\"text-2xl font-bold\">Team</h1>\n\t\t\t\t\t<p className=\"text-muted-foreground\">\n\t\t\t\t\t\tManage your team members and their permissions.\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\n\t\t\t\t<TeamPageContent useMockWidgets={useMockWidgets} />\n\t\t\t</div>\n\t\t</>\n\t);\n}\n\nfunction TeamPageContent({ useMockWidgets }: { useMockWidgets: boolean }) {\n\tconst { user, getAccessToken, isLoading, organizationId, permissions } =\n\t\tuseAuth();\n\n\t// Check if user can manage team (needs to be in an org with widgets:users-table:manage permission)\n\tconst hasOrganization = !!organizationId;\n\tconst canManageTeam =\n\t\thasOrganization && permissions?.includes(\"widgets:users-table:manage\");\n\tconst loading = !useMockWidgets && isLoading;\n\n\tif (loading) {\n\t\treturn (\n\t\t\t<div className=\"flex items-center justify-center py-12 text-muted-foreground\">\n\t\t\t\tLoading...\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (!user) {\n\t\treturn (\n\t\t\t<div className=\"flex items-center justify-center rounded-md border border-dashed py-24\">\n\t\t\t\t<p className=\"text-muted-foreground text-sm\">\n\t\t\t\t\tPlease sign in to manage your team.\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (!hasOrganization) {\n\t\treturn (\n\t\t\t<div className=\"flex items-center justify-center rounded-md border border-dashed py-24\">\n\t\t\t\t<p className=\"text-muted-foreground text-sm\">\n\t\t\t\t\tYou need to be part of an organization to manage team members.\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (!canManageTeam) {\n\t\treturn (\n\t\t\t<div className=\"flex items-center justify-center rounded-md border border-dashed py-24\">\n\t\t\t\t<p className=\"text-muted-foreground text-sm\">\n\t\t\t\t\tYou need admin permissions to manage team members.\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (useMockWidgets) {\n\t\treturn <MockUsersManagement />;\n\t}\n\n\treturn <UsersManagement authToken={getAccessToken} />;\n}\n","import { Breadcrumb, BreadcrumbItem, BreadcrumbList, BreadcrumbPage } from '@mdxui/primitives/breadcrumb'\nimport { Button } from '@mdxui/primitives/button'\nimport { Separator } from '@mdxui/primitives/separator'\nimport { SidebarTrigger } from '@mdxui/primitives/sidebar'\nimport { Plus } from 'lucide-react'\nimport { useState } from 'react'\nimport { toast } from 'sonner'\nimport { VaultInputModal } from '../components/vault/vault-input-modal'\nimport { VaultList } from '../components/vault/vault-list'\nimport {\n logos,\n mockVaultItems,\n type VaultItem,\n} from '../lib/vault-mock'\n\n// Simulates an external request for credentials (e.g., from an agent)\n// In production, this would come from an API or event\nconst pendingCredentialRequest = {\n id: 'stripe',\n name: 'Stripe',\n logoUrl: logos.stripe,\n fields: [\n { key: 'secret_key', label: 'Secret Key', type: 'password' as const, required: true, placeholder: 'sk_live_...' },\n { key: 'publishable_key', label: 'Publishable Key', type: 'text' as const, required: true, placeholder: 'pk_live_...' },\n ],\n}\n\nexport function VaultPage() {\n const [items, setItems] = useState<VaultItem[]>(mockVaultItems)\n const [addModalOpen, setAddModalOpen] = useState(false)\n const [pendingIntegration, setPendingIntegration] = useState<typeof pendingCredentialRequest | null>(null)\n\n const handleOpenAddModal = () => {\n // In production, this would be triggered by an external credential request\n // For demo, we simulate a request for Stripe credentials\n setPendingIntegration(pendingCredentialRequest)\n setAddModalOpen(true)\n }\n\n const handleAdd = async (_credentials: Record<string, string>) => {\n if (!pendingIntegration) return\n\n // In a real app, this would call an API\n const newItem: VaultItem = {\n id: Date.now().toString(),\n name: pendingIntegration.name,\n integrationId: pendingIntegration.id,\n logoUrl: pendingIntegration.logoUrl,\n createdAt: new Date(),\n updatedAt: new Date(),\n }\n\n setItems((prev) => [...prev, newItem])\n toast.success(`${pendingIntegration.name} credentials added successfully`)\n }\n\n const handleCloseAddModal = () => {\n setAddModalOpen(false)\n setPendingIntegration(null)\n }\n\n const handleRotate = async (id: string, _credentials: Record<string, string>) => {\n const item = items.find((i) => i.id === id)\n // In a real app, this would call an API\n setItems((prev) => prev.map((i) => (i.id === id ? { ...i, updatedAt: new Date() } : i)))\n toast.success(`${item?.name || 'Credentials'} rotated successfully`)\n }\n\n const handleDelete = async (id: string) => {\n const item = items.find((i) => i.id === id)\n // In a real app, this would call an API\n setItems((prev) => prev.filter((i) => i.id !== id))\n toast.success(`${item?.name || 'Credentials'} deleted successfully`)\n }\n\n return (\n <>\n <header className=\"flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12\">\n <div className=\"flex items-center gap-2 px-4\">\n <SidebarTrigger className=\"-ml-1\" />\n <Separator orientation=\"vertical\" className=\"mr-2 data-[orientation=vertical]:h-4\" />\n <Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem>\n <BreadcrumbPage>Vault</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n </div>\n </header>\n <div className=\"flex flex-1 flex-col gap-4 px-4 sm:px-16 py-4 pt-0\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-bold\">Vault</h1>\n <p className=\"text-muted-foreground\">Securely stored credentials for your agents.</p>\n </div>\n {items.length > 0 && (\n <Button onClick={handleOpenAddModal}>\n <Plus className=\"h-4 w-4\" />\n Add Credential\n </Button>\n )}\n </div>\n\n <VaultList\n items={items}\n onRotate={handleRotate}\n onDelete={handleDelete}\n onOpenAddModal={handleOpenAddModal}\n />\n\n <VaultInputModal\n isOpen={addModalOpen}\n onClose={handleCloseAddModal}\n mode=\"create\"\n integration={pendingIntegration || undefined}\n onSave={handleAdd}\n />\n </div>\n </>\n )\n}\n","import {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '@mdxui/primitives/breadcrumb'\nimport { Button } from '@mdxui/primitives/button'\nimport { Card, CardContent, CardHeader, CardTitle } from '@mdxui/primitives/card'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@mdxui/primitives/dropdown-menu'\nimport { cn } from '@mdxui/primitives/lib/utils'\nimport { Progress } from '@mdxui/primitives/progress'\nimport { Separator } from '@mdxui/primitives/separator'\nimport { SidebarTrigger } from '@mdxui/primitives/sidebar'\nimport { Activity, AlertTriangle, CheckCircle2, ChevronDown, Clock, XCircle } from 'lucide-react'\nimport { useState } from 'react'\nimport { Link } from 'react-router-dom'\nimport { mockWebhookActivity } from '../../lib/mock-data'\n\ntype TimePeriod = '24h' | '7d' | '30d'\n\nconst periodOptions: { value: TimePeriod; label: string }[] = [\n { value: '7d', label: 'Last 7 days' },\n { value: '24h', label: 'Last 24 hours' },\n { value: '30d', label: 'Last 30 days' },\n]\n\n// Simulated data multipliers for different time periods\nconst periodMultipliers: Record<TimePeriod, number> = {\n '24h': 1,\n '7d': 7,\n '30d': 30,\n}\n\nexport function WebhooksActivityPage() {\n const [period, setPeriod] = useState<TimePeriod>('7d')\n\n const multiplier = periodMultipliers[period]\n const activity = {\n delivered: Math.round(mockWebhookActivity.delivered * multiplier),\n failed: Math.round(mockWebhookActivity.failed * multiplier),\n pending: mockWebhookActivity.pending,\n successRate: mockWebhookActivity.successRate,\n endpointsWithIssues: mockWebhookActivity.endpointsWithIssues.map((ep) => ({\n ...ep,\n failures: Math.round(ep.failures * multiplier),\n })),\n }\n\n const total = activity.delivered + activity.failed + activity.pending\n\n return (\n <>\n <header className='flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12'>\n <div className='flex items-center gap-2 px-4'>\n <SidebarTrigger className='-ml-1' />\n <Separator orientation='vertical' className='mr-2 data-[orientation=vertical]:h-4' />\n <Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem>\n <BreadcrumbLink asChild>\n <Link to='/webhooks'>Webhooks</Link>\n </BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbPage>Activity</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n </div>\n </header>\n <div className='flex flex-1 flex-col gap-4 px-4 sm:px-16 py-4 pt-0'>\n <div className='flex items-center justify-between'>\n <div>\n <h1 className='text-2xl font-bold'>Webhook Activity</h1>\n <p className='text-muted-foreground'>Monitor webhook health and delivery status.</p>\n </div>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant='outline' className='w-[160px] justify-between'>\n {periodOptions.find((o) => o.value === period)?.label}\n <ChevronDown className='h-4 w-4 opacity-50' />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align='end' className='w-[160px]'>\n {periodOptions.map((option) => (\n <DropdownMenuItem key={option.value} onClick={() => setPeriod(option.value)}>\n {option.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n\n {/* Empty State */}\n {total === 0 ? (\n <Card>\n <CardContent className='py-16'>\n <div className='flex flex-col items-center justify-center gap-4 text-center'>\n <div className='rounded-full bg-muted p-4'>\n <Activity className='h-8 w-8 text-muted-foreground' />\n </div>\n <div>\n <p className='font-medium'>No activity yet</p>\n <p className='text-sm text-muted-foreground mt-1'>\n Webhook activity will appear here once you start receiving events.\n </p>\n </div>\n </div>\n </CardContent>\n </Card>\n ) : (\n <>\n {/* Stats Cards */}\n <div className='grid gap-4 md:grid-cols-3'>\n <Card>\n <CardHeader className='flex flex-row items-center justify-between space-y-0 pb-2'>\n <CardTitle className='text-sm font-medium'>Delivered</CardTitle>\n <CheckCircle2 className='h-4 w-4 text-success' />\n </CardHeader>\n <CardContent>\n <div className='text-2xl font-bold'>{activity.delivered.toLocaleString()}</div>\n <p className='text-xs text-muted-foreground'>\n {((activity.delivered / total) * 100).toFixed(1)}% of total\n </p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className='flex flex-row items-center justify-between space-y-0 pb-2'>\n <CardTitle className='text-sm font-medium'>Failed</CardTitle>\n <XCircle className='h-4 w-4 text-destructive' />\n </CardHeader>\n <CardContent>\n <div className='text-2xl font-bold'>{activity.failed.toLocaleString()}</div>\n <p className='text-xs text-muted-foreground'>\n {((activity.failed / total) * 100).toFixed(1)}% of total\n </p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className='flex flex-row items-center justify-between space-y-0 pb-2'>\n <CardTitle className='text-sm font-medium'>Pending</CardTitle>\n <Clock className='h-4 w-4 text-warning' />\n </CardHeader>\n <CardContent>\n <div className='text-2xl font-bold'>{activity.pending.toLocaleString()}</div>\n <p className='text-xs text-muted-foreground'>Waiting for delivery</p>\n </CardContent>\n </Card>\n </div>\n\n {/* Success Rate */}\n <Card>\n <CardHeader>\n <CardTitle className='text-sm font-medium'>Delivery Success Rate</CardTitle>\n </CardHeader>\n <CardContent>\n <div className='flex items-center gap-4'>\n <div\n className={cn(\n 'text-3xl font-semibold',\n activity.successRate >= 95\n ? 'text-success'\n : activity.successRate >= 80\n ? 'text-warning'\n : 'text-destructive'\n )}\n >\n {activity.successRate}%\n </div>\n <div className='flex-1'>\n <Progress\n value={activity.successRate}\n className={cn(\n 'h-3',\n activity.successRate >= 95\n ? '[&>div]:bg-success'\n : activity.successRate >= 80\n ? '[&>div]:bg-warning'\n : '[&>div]:bg-destructive'\n )}\n />\n </div>\n </div>\n <p className='text-sm text-muted-foreground mt-2'>\n {activity.delivered.toLocaleString()} of {total.toLocaleString()} webhooks delivered\n successfully\n </p>\n </CardContent>\n </Card>\n\n {/* Endpoints with Issues */}\n {activity.endpointsWithIssues.length > 0 && (\n <Card>\n <CardHeader>\n <CardTitle className='text-sm font-medium flex items-center gap-2'>\n <AlertTriangle className='h-4 w-4 text-warning' />\n Endpoints with Issues\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className='space-y-3'>\n {activity.endpointsWithIssues.map((endpoint) => (\n <div\n key={endpoint.url}\n className='flex items-center justify-between p-3 rounded-md bg-muted/50'\n >\n <span className='font-mono text-sm truncate flex-1'>{endpoint.url}</span>\n <div className='flex items-center gap-4 ml-4'>\n <span className='text-sm text-destructive font-medium'>\n {endpoint.failures} failures\n </span>\n <Link\n to='/webhooks/logs?status=failed'\n className='text-sm text-muted-foreground hover:text-foreground transition-colors'\n >\n View logs\n </Link>\n </div>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n )}\n </>\n )}\n </div>\n </>\n )\n}\n","import { Badge } from '@mdxui/primitives/badge'\nimport { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from '@mdxui/primitives/breadcrumb'\nimport { Button } from '@mdxui/primitives/button'\nimport { Card, CardContent } from '@mdxui/primitives/card'\nimport { Checkbox } from '@mdxui/primitives/checkbox'\nimport { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from '@mdxui/primitives/dialog'\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger } from '@mdxui/primitives/dropdown-menu'\nimport { Input } from '@mdxui/primitives/input'\nimport { Label } from '@mdxui/primitives/label'\nimport { Separator } from '@mdxui/primitives/separator'\nimport { SidebarTrigger } from '@mdxui/primitives/sidebar'\nimport { Switch } from '@mdxui/primitives/switch'\nimport { Check, Circle, Copy, Link2, MoreHorizontal, Pencil, Plus, RefreshCw, Trash2 } from 'lucide-react'\nimport { useState } from 'react'\nimport { Link } from 'react-router-dom'\nimport { toast } from 'sonner'\nimport { mockWebhookEndpoints, mockWebhookEvents, type WebhookEndpoint } from '../../lib/mock-data'\n\nexport type { WebhookEndpoint }\n\nexport interface WebhooksEndpointsPageProps {\n /** Initial endpoints data - uses mock data if not provided */\n endpoints?: WebhookEndpoint[]\n /** Callback when an endpoint is created */\n onCreateEndpoint?: (data: { url: string; events: string[]; enabled: boolean }) => Promise<{ id: string; secret: string }>\n /** Callback when an endpoint is updated */\n onUpdateEndpoint?: (id: string, data: { url: string; events: string[]; enabled: boolean }) => Promise<void>\n /** Callback when an endpoint is deleted */\n onDeleteEndpoint?: (id: string) => Promise<void>\n /** Hide the header with sidebar trigger and breadcrumb */\n hideHeader?: boolean\n /** Additional CSS class for the container */\n className?: string\n}\n\nfunction formatRelativeTime(timestamp: string | null): string {\n if (!timestamp) return 'Never'\n const date = new Date(timestamp)\n const now = new Date()\n const diffInMs = now.getTime() - date.getTime()\n const diffInMinutes = Math.floor(diffInMs / (1000 * 60))\n\n if (diffInMinutes < 1) return 'Just now'\n if (diffInMinutes < 60) return `${diffInMinutes} min ago`\n const diffInHours = Math.floor(diffInMinutes / 60)\n if (diffInHours < 24) return `${diffInHours} hr ago`\n const diffInDays = Math.floor(diffInHours / 24)\n return `${diffInDays} days ago`\n}\n\n// Group events by category\nconst eventsByCategory = mockWebhookEvents.reduce((acc, event) => {\n if (!acc[event.category]) {\n acc[event.category] = []\n }\n acc[event.category].push(event)\n return acc\n}, {} as Record<string, typeof mockWebhookEvents>)\n\nexport function WebhooksEndpointsPage({\n endpoints: initialEndpoints,\n onCreateEndpoint,\n onUpdateEndpoint,\n onDeleteEndpoint,\n hideHeader = false,\n className,\n}: WebhooksEndpointsPageProps = {}) {\n const [endpoints, setEndpoints] = useState<WebhookEndpoint[]>(initialEndpoints ?? mockWebhookEndpoints)\n const [createDialogOpen, setCreateDialogOpen] = useState(false)\n const [editDialogOpen, setEditDialogOpen] = useState(false)\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false)\n const [selectedEndpoint, setSelectedEndpoint] = useState<WebhookEndpoint | null>(null)\n const [copiedSecret, setCopiedSecret] = useState<string | null>(null)\n\n // Form state\n const [formUrl, setFormUrl] = useState('')\n const [formEvents, setFormEvents] = useState<string[]>([])\n const [formEnabled, setFormEnabled] = useState(true)\n\n const resetForm = () => {\n setFormUrl('')\n setFormEvents([])\n setFormEnabled(true)\n }\n\n const handleCreate = async () => {\n if (onCreateEndpoint) {\n try {\n const result = await onCreateEndpoint({ url: formUrl, events: formEvents, enabled: formEnabled })\n const newEndpoint: WebhookEndpoint = {\n id: result.id,\n url: formUrl,\n events: formEvents,\n lastDelivery: null,\n status: formEnabled ? 'active' : 'disabled',\n secret: result.secret,\n createdAt: new Date().toISOString(),\n failureCount: 0,\n }\n setEndpoints([...endpoints, newEndpoint])\n } catch {\n toast.error('Failed to create endpoint')\n return\n }\n } else {\n const newEndpoint: WebhookEndpoint = {\n id: `ep_${Date.now()}`,\n url: formUrl,\n events: formEvents,\n lastDelivery: null,\n status: formEnabled ? 'active' : 'disabled',\n secret: `whsec_${Math.random().toString(36).substring(2, 15)}`,\n createdAt: new Date().toISOString(),\n failureCount: 0,\n }\n setEndpoints([...endpoints, newEndpoint])\n }\n setCreateDialogOpen(false)\n resetForm()\n toast.success('Endpoint created', {\n description: 'Your webhook endpoint has been created successfully.',\n })\n }\n\n const handleEdit = async () => {\n if (!selectedEndpoint) return\n\n if (onUpdateEndpoint) {\n try {\n await onUpdateEndpoint(selectedEndpoint.id, { url: formUrl, events: formEvents, enabled: formEnabled })\n } catch {\n toast.error('Failed to update endpoint')\n return\n }\n }\n\n setEndpoints(\n endpoints.map((ep) =>\n ep.id === selectedEndpoint.id ? { ...ep, url: formUrl, events: formEvents, status: formEnabled ? 'active' : 'disabled' } : ep,\n ),\n )\n setEditDialogOpen(false)\n setSelectedEndpoint(null)\n resetForm()\n toast.success('Endpoint updated', {\n description: 'Your webhook endpoint has been updated successfully.',\n })\n }\n\n const handleDelete = async () => {\n if (!selectedEndpoint) return\n\n if (onDeleteEndpoint) {\n try {\n await onDeleteEndpoint(selectedEndpoint.id)\n } catch {\n toast.error('Failed to delete endpoint')\n return\n }\n }\n\n setEndpoints(endpoints.filter((ep) => ep.id !== selectedEndpoint.id))\n setDeleteDialogOpen(false)\n setSelectedEndpoint(null)\n toast.success('Endpoint deleted', {\n description: 'Your webhook endpoint has been deleted.',\n })\n }\n\n const openEditDialog = (endpoint: WebhookEndpoint) => {\n setSelectedEndpoint(endpoint)\n setFormUrl(endpoint.url)\n setFormEvents(endpoint.events)\n setFormEnabled(endpoint.status === 'active')\n setEditDialogOpen(true)\n }\n\n const openDeleteDialog = (endpoint: WebhookEndpoint) => {\n setSelectedEndpoint(endpoint)\n setDeleteDialogOpen(true)\n }\n\n const handleCopySecret = async (endpoint: WebhookEndpoint) => {\n await navigator.clipboard.writeText(endpoint.secret)\n setCopiedSecret(endpoint.id)\n setTimeout(() => setCopiedSecret(null), 2000)\n toast.success('Secret copied to clipboard')\n }\n\n const toggleEvent = (eventName: string) => {\n if (formEvents.includes(eventName)) {\n setFormEvents(formEvents.filter((e) => e !== eventName))\n } else {\n setFormEvents([...formEvents, eventName])\n }\n }\n\n return (\n <>\n {!hideHeader && (\n <header className='flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12'>\n <div className='flex items-center gap-2 px-4'>\n <SidebarTrigger className='-ml-1' />\n <Separator orientation='vertical' className='mr-2 data-[orientation=vertical]:h-4' />\n <Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem>\n <BreadcrumbLink asChild>\n <Link to='/webhooks'>Webhooks</Link>\n </BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbPage>Endpoints</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n </div>\n </header>\n )}\n <div className={`flex flex-1 flex-col gap-4 px-4 sm:px-16 py-4 ${hideHeader ? '' : 'pt-0'} ${className ?? ''}`}>\n <div className='flex items-center justify-between'>\n <div>\n <h1 className='text-2xl font-bold'>Endpoints</h1>\n <p className='text-muted-foreground'>Manage your webhook subscription endpoints.</p>\n </div>\n <Dialog open={createDialogOpen} onOpenChange={setCreateDialogOpen}>\n <DialogTrigger asChild>\n <Button onClick={resetForm}>\n <Plus className='h-4 w-4' />\n Add Endpoint\n </Button>\n </DialogTrigger>\n <DialogContent className='sm:max-w-xl'>\n <DialogHeader>\n <DialogTitle>Add Webhook Endpoint</DialogTitle>\n <DialogDescription>Configure a new endpoint to receive webhook events.</DialogDescription>\n </DialogHeader>\n <div className='space-y-6'>\n {/* URL and Status */}\n <div className='space-y-4'>\n <div className='space-y-2'>\n <Label htmlFor='url'>Endpoint URL</Label>\n <Input\n id='url'\n placeholder='https://api.example.com.ai/webhooks'\n value={formUrl}\n onChange={(e) => setFormUrl(e.target.value)}\n />\n </div>\n <div className='flex items-center justify-between rounded-lg border p-3'>\n <div className='space-y-0.5'>\n <Label htmlFor='enabled' className='text-sm font-medium'>\n Active\n </Label>\n <p className='text-xs text-muted-foreground'>Enable this endpoint to receive events</p>\n </div>\n <Switch id='enabled' checked={formEnabled} onCheckedChange={setFormEnabled} />\n </div>\n </div>\n\n {/* Events by Category */}\n <div className='space-y-3'>\n <Label>Events to subscribe</Label>\n <div className='rounded-lg border divide-y'>\n {Object.entries(eventsByCategory).map(([category, events]) => {\n const categoryEvents = events.map((e) => e.name)\n const allSelected = categoryEvents.every((e) => formEvents.includes(e))\n const someSelected = categoryEvents.some((e) => formEvents.includes(e))\n\n const toggleCategory = () => {\n if (allSelected) {\n setFormEvents(formEvents.filter((e) => !categoryEvents.includes(e)))\n } else {\n setFormEvents([...new Set([...formEvents, ...categoryEvents])])\n }\n }\n\n return (\n <div key={category} className='p-3 space-y-2'>\n <div className='flex items-center gap-2'>\n <Checkbox\n id={`category-${category}`}\n checked={allSelected}\n onCheckedChange={toggleCategory}\n className={someSelected && !allSelected ? 'opacity-50' : ''}\n />\n <Label htmlFor={`category-${category}`} className='text-sm font-medium cursor-pointer'>\n {category}\n </Label>\n </div>\n <div className='ml-6 space-y-1.5'>\n {events.map((event) => (\n <div key={event.name} className='flex items-center gap-2'>\n <Checkbox\n id={event.name}\n checked={formEvents.includes(event.name)}\n onCheckedChange={() => toggleEvent(event.name)}\n />\n <Label htmlFor={event.name} className='text-sm font-normal text-muted-foreground cursor-pointer'>\n {event.name}\n </Label>\n </div>\n ))}\n </div>\n </div>\n )\n })}\n </div>\n <p className='text-xs text-muted-foreground'>\n {formEvents.length} event{formEvents.length !== 1 ? 's' : ''} selected\n </p>\n </div>\n </div>\n <DialogFooter>\n <Button variant='outline' onClick={() => setCreateDialogOpen(false)}>\n Cancel\n </Button>\n <Button onClick={handleCreate} disabled={!formUrl || formEvents.length === 0}>\n Create Endpoint\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </div>\n\n {/* Endpoints List */}\n <div className='space-y-3'>\n {endpoints.map((endpoint) => {\n const hasIssues = endpoint.failureCount > 0\n\n return (\n <Card key={endpoint.id}>\n <CardContent className='p-4 py-0'>\n <div className='flex items-start justify-between gap-4'>\n <div className='min-w-0 flex-1 space-y-1'>\n {/* Line 1: Status + URL */}\n <div className='flex items-center gap-2'>\n <Circle\n className={`h-2 w-2 shrink-0 ${\n endpoint.status === 'disabled'\n ? 'fill-muted-foreground text-muted-foreground'\n : hasIssues\n ? 'fill-warning text-warning'\n : 'fill-success text-success'\n }`}\n />\n <span className='font-mono text-sm truncate'>{endpoint.url}</span>\n {endpoint.status === 'disabled' && (\n <Badge variant='secondary' className='shrink-0'>\n Disabled\n </Badge>\n )}\n </div>\n {/* Line 2: Metadata */}\n <div className='flex items-center gap-1 text-sm text-muted-foreground ml-4'>\n <span>\n {endpoint.events.length} event{endpoint.events.length !== 1 ? 's' : ''}\n </span>\n <span>·</span>\n <span>Last delivery {formatRelativeTime(endpoint.lastDelivery).toLowerCase()}</span>\n {endpoint.failureCount > 0 && (\n <>\n <span>·</span>\n <span className='text-destructive'>\n {endpoint.failureCount} failure{endpoint.failureCount !== 1 ? 's' : ''}\n </span>\n </>\n )}\n </div>\n </div>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant='ghost' size='icon' className='h-8 w-8 shrink-0'>\n <MoreHorizontal className='h-4 w-4' />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align='end'>\n <DropdownMenuItem onClick={() => openEditDialog(endpoint)}>\n <Pencil className='h-4 w-4' />\n Edit\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => handleCopySecret(endpoint)}>\n {copiedSecret === endpoint.id ? <Check className='h-4 w-4' /> : <Copy className='h-4 w-4' />}\n Copy Secret\n </DropdownMenuItem>\n <DropdownMenuItem>\n <RefreshCw className='h-4 w-4' />\n Regenerate Secret\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem className='text-destructive focus:text-destructive' onClick={() => openDeleteDialog(endpoint)}>\n <Trash2 className='h-4 w-4' />\n Delete\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </CardContent>\n </Card>\n )\n })}\n {endpoints.length === 0 && (\n <Card>\n <CardContent className='py-16'>\n <div className='flex flex-col items-center justify-center gap-4 text-center'>\n <div className='rounded-full bg-muted p-4'>\n <Link2 className='h-8 w-8 text-muted-foreground' />\n </div>\n <div>\n <p className='font-medium'>No endpoints configured</p>\n <p className='text-sm text-muted-foreground mt-1'>Add your first endpoint to start receiving webhook events.</p>\n </div>\n <Button onClick={() => setCreateDialogOpen(true)} className='mt-2'>\n <Plus className='h-4 w-4' />\n Add Your First Endpoint\n </Button>\n </div>\n </CardContent>\n </Card>\n )}\n </div>\n </div>\n\n {/* Edit Dialog */}\n <Dialog open={editDialogOpen} onOpenChange={setEditDialogOpen}>\n <DialogContent className='sm:max-w-xl'>\n <DialogHeader>\n <DialogTitle>Edit Endpoint</DialogTitle>\n <DialogDescription>Update your webhook endpoint configuration.</DialogDescription>\n </DialogHeader>\n <div className='space-y-6'>\n {/* URL and Status */}\n <div className='space-y-4'>\n <div className='space-y-2'>\n <Label htmlFor='edit-url'>Endpoint URL</Label>\n <Input\n id='edit-url'\n placeholder='https://api.example.com.ai/webhooks'\n value={formUrl}\n onChange={(e) => setFormUrl(e.target.value)}\n />\n </div>\n <div className='flex items-center justify-between rounded-lg border p-3'>\n <div className='space-y-0.5'>\n <Label htmlFor='edit-enabled' className='text-sm font-medium'>\n Active\n </Label>\n <p className='text-xs text-muted-foreground'>Enable this endpoint to receive events</p>\n </div>\n <Switch id='edit-enabled' checked={formEnabled} onCheckedChange={setFormEnabled} />\n </div>\n </div>\n\n {/* Events by Category */}\n <div className='space-y-3'>\n <Label>Events to subscribe</Label>\n <div className='rounded-lg border divide-y'>\n {Object.entries(eventsByCategory).map(([category, events]) => {\n const categoryEvents = events.map((e) => e.name)\n const allSelected = categoryEvents.every((e) => formEvents.includes(e))\n const someSelected = categoryEvents.some((e) => formEvents.includes(e))\n\n const toggleCategory = () => {\n if (allSelected) {\n setFormEvents(formEvents.filter((e) => !categoryEvents.includes(e)))\n } else {\n setFormEvents([...new Set([...formEvents, ...categoryEvents])])\n }\n }\n\n return (\n <div key={category} className='p-3 space-y-2'>\n <div className='flex items-center gap-2'>\n <Checkbox\n id={`edit-category-${category}`}\n checked={allSelected}\n onCheckedChange={toggleCategory}\n className={someSelected && !allSelected ? 'opacity-50' : ''}\n />\n <Label htmlFor={`edit-category-${category}`} className='text-sm font-medium cursor-pointer'>\n {category}\n </Label>\n </div>\n <div className='ml-6 space-y-1.5'>\n {events.map((event) => (\n <div key={event.name} className='flex items-center gap-2'>\n <Checkbox\n id={`edit-${event.name}`}\n checked={formEvents.includes(event.name)}\n onCheckedChange={() => toggleEvent(event.name)}\n />\n <Label htmlFor={`edit-${event.name}`} className='text-sm font-normal text-muted-foreground cursor-pointer'>\n {event.name}\n </Label>\n </div>\n ))}\n </div>\n </div>\n )\n })}\n </div>\n <p className='text-xs text-muted-foreground'>\n {formEvents.length} event{formEvents.length !== 1 ? 's' : ''} selected\n </p>\n </div>\n </div>\n <DialogFooter>\n <Button variant='outline' onClick={() => setEditDialogOpen(false)}>\n Cancel\n </Button>\n <Button onClick={handleEdit} disabled={!formUrl || formEvents.length === 0}>\n Save Changes\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n\n {/* Delete Dialog */}\n <Dialog open={deleteDialogOpen} onOpenChange={setDeleteDialogOpen}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Delete Endpoint</DialogTitle>\n <DialogDescription>Are you sure you want to delete this endpoint? This action cannot be undone.</DialogDescription>\n </DialogHeader>\n {selectedEndpoint && (\n <div className='rounded-md bg-muted p-3'>\n <p className='font-mono text-sm truncate'>{selectedEndpoint.url}</p>\n </div>\n )}\n <DialogFooter>\n <Button variant='outline' onClick={() => setDeleteDialogOpen(false)}>\n Cancel\n </Button>\n <Button variant='destructive' onClick={handleDelete}>\n Delete\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </>\n )\n}\n","import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from '@mdxui/primitives/breadcrumb'\nimport { Card, CardContent } from '@mdxui/primitives/card'\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@mdxui/primitives/collapsible'\nimport { Input } from '@mdxui/primitives/input'\nimport { Separator } from '@mdxui/primitives/separator'\nimport { SidebarTrigger } from '@mdxui/primitives/sidebar'\nimport { BookOpen, ChevronRight, Search } from 'lucide-react'\nimport { useState } from 'react'\nimport { Link } from 'react-router-dom'\nimport { JsonViewer } from '../../components/ui'\nimport { mockWebhookEvents, type WebhookEvent } from '../../lib/mock-data'\n\nexport function WebhooksEventCatalogPage() {\n const [searchQuery, setSearchQuery] = useState('')\n const [expandedEvents, setExpandedEvents] = useState<Set<string>>(new Set())\n\n const filteredEvents = mockWebhookEvents.filter(\n (event) =>\n event.name.toLowerCase().includes(searchQuery.toLowerCase()) ||\n event.description.toLowerCase().includes(searchQuery.toLowerCase()) ||\n event.category.toLowerCase().includes(searchQuery.toLowerCase()),\n )\n\n // Group events by category\n const groupedEvents = filteredEvents.reduce<Record<string, WebhookEvent[]>>((acc, event) => {\n if (!acc[event.category]) {\n acc[event.category] = []\n }\n acc[event.category].push(event)\n return acc\n }, {})\n\n const toggleEvent = (eventId: string) => {\n const newExpanded = new Set(expandedEvents)\n if (newExpanded.has(eventId)) {\n newExpanded.delete(eventId)\n } else {\n newExpanded.add(eventId)\n }\n setExpandedEvents(newExpanded)\n }\n\n return (\n <>\n <header className='flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12'>\n <div className='flex items-center gap-2 px-4'>\n <SidebarTrigger className='-ml-1' />\n <Separator orientation='vertical' className='mr-2 data-[orientation=vertical]:h-4' />\n <Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem>\n <BreadcrumbLink asChild>\n <Link to='/webhooks'>Webhooks</Link>\n </BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbPage>Event Catalog</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n </div>\n </header>\n <div className='flex flex-1 flex-col gap-4 px-4 sm:px-16 py-4 pt-0'>\n <div className='flex items-center justify-between'>\n <div>\n <h1 className='text-2xl font-bold'>Event Catalog</h1>\n <p className='text-muted-foreground'>Browse and search available webhook events.</p>\n </div>\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 placeholder='Search events...'\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className='pl-9 w-[300px]'\n />\n </div>\n </div>\n\n {/* Events by Category */}\n <div className='space-y-6'>\n {Object.entries(groupedEvents).map(([category, events]) => (\n <div key={category}>\n <h2 className='text-sm font-semibold text-muted-foreground mb-3 pt-2'>{category}</h2>\n <div className='space-y-2'>\n {events.map((event) => (\n <Card key={event.id} noPadding>\n <Collapsible open={expandedEvents.has(event.id)} onOpenChange={() => toggleEvent(event.id)}>\n <CollapsibleTrigger asChild>\n <CardContent className='p-4 cursor-pointer hover:bg-muted/50 transition-colors'>\n <div className='flex items-center gap-3'>\n <ChevronRight\n className={`h-4 w-4 text-muted-foreground transition-transform ${\n expandedEvents.has(event.id) ? 'rotate-90' : ''\n }`}\n />\n <div className='flex-1 min-w-0'>\n <p className='font-mono text-sm font-medium'>{event.name}</p>\n <p className='text-sm text-muted-foreground truncate'>{event.description}</p>\n </div>\n </div>\n </CardContent>\n </CollapsibleTrigger>\n <CollapsibleContent>\n <div className='px-4 pb-4 ml-7 mr-7'>\n <JsonViewer data={event.payloadSchema} />\n </div>\n </CollapsibleContent>\n </Collapsible>\n </Card>\n ))}\n </div>\n </div>\n ))}\n {Object.keys(groupedEvents).length === 0 && (\n <Card>\n <CardContent className='py-16'>\n <div className='flex flex-col items-center justify-center gap-4 text-center'>\n <div className='rounded-full bg-muted p-4'>\n <BookOpen className='h-8 w-8 text-muted-foreground' />\n </div>\n <div>\n <p className='font-medium'>No events found</p>\n <p className='text-sm text-muted-foreground mt-1'>Try adjusting your search query.</p>\n </div>\n </div>\n </CardContent>\n </Card>\n )}\n </div>\n </div>\n </>\n )\n}\n","import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from '@mdxui/primitives/breadcrumb'\nimport { Button } from '@mdxui/primitives/button'\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@mdxui/primitives/dropdown-menu'\nimport { Separator } from '@mdxui/primitives/separator'\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from '@mdxui/primitives/sheet'\nimport { SidebarTrigger } from '@mdxui/primitives/sidebar'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@mdxui/primitives/table'\nimport { Check, ChevronDown, Copy, RefreshCw, ScrollText } from 'lucide-react'\nimport { useState } from 'react'\nimport { Link } from 'react-router-dom'\nimport { toast } from 'sonner'\nimport { JsonViewer, StatusBadge, StatusDot } from '../../components/ui'\nimport { mockWebhookLogs, type WebhookLog } from '../../lib/mock-data'\n\ntype StatusFilter = 'all' | 'success' | 'failed'\n\nconst statusFilterOptions: { value: StatusFilter; label: string }[] = [\n { value: 'all', label: 'All Status' },\n { value: 'success', label: 'Success' },\n { value: 'failed', label: 'Failed' },\n]\n\nfunction formatTimestamp(timestamp: string): string {\n const date = new Date(timestamp)\n return date.toLocaleTimeString('en-US', {\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n })\n}\n\nfunction formatFullTimestamp(timestamp: string): string {\n const date = new Date(timestamp)\n return date.toLocaleString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n second: '2-digit',\n hour12: true,\n })\n}\n\nfunction formatLatency(ms: number): string {\n if (ms >= 1000) {\n return `${(ms / 1000).toFixed(2)}s`\n }\n return `${ms}ms`\n}\n\nexport function WebhooksLogsPage() {\n const [statusFilter, setStatusFilter] = useState<StatusFilter>('all')\n const [selectedLog, setSelectedLog] = useState<WebhookLog | null>(null)\n const [sheetOpen, setSheetOpen] = useState(false)\n const [copiedUrl, setCopiedUrl] = useState(false)\n\n const filteredLogs = mockWebhookLogs.filter((log) => {\n if (statusFilter === 'all') return true\n if (statusFilter === 'success') return log.statusCode >= 200 && log.statusCode < 300\n return log.statusCode >= 400\n })\n\n const handleRowClick = (log: WebhookLog) => {\n setSelectedLog(log)\n setSheetOpen(true)\n setCopiedUrl(false)\n }\n\n const handleCopyUrl = async (url: string) => {\n await navigator.clipboard.writeText(url)\n setCopiedUrl(true)\n setTimeout(() => setCopiedUrl(false), 2000)\n }\n\n const handleRetry = () => {\n toast.success('Webhook retry triggered', {\n description: 'The webhook delivery will be retried shortly.',\n })\n setSheetOpen(false)\n }\n\n return (\n <>\n <header className='flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12'>\n <div className='flex items-center gap-2 px-4'>\n <SidebarTrigger className='-ml-1' />\n <Separator orientation='vertical' className='mr-2 data-[orientation=vertical]:h-4' />\n <Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem>\n <BreadcrumbLink asChild>\n <Link to='/webhooks'>Webhooks</Link>\n </BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbPage>Logs</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n </div>\n </header>\n <div className='flex flex-1 flex-col gap-4 px-4 sm:px-16 py-4 pt-0'>\n <div className='flex items-center justify-between'>\n <div>\n <h1 className='text-2xl font-bold'>Webhook Logs</h1>\n <p className='text-muted-foreground'>View webhook delivery history and debug issues.</p>\n </div>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant='outline' className='w-[140px] justify-between'>\n {statusFilterOptions.find((o) => o.value === statusFilter)?.label}\n <ChevronDown className='h-4 w-4 opacity-50' />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align='end' className='w-[140px]'>\n {statusFilterOptions.map((option) => (\n <DropdownMenuItem key={option.value} onClick={() => setStatusFilter(option.value)}>\n {option.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n\n {/* Logs Table */}\n <div className='rounded-md border'>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead className='w-[40px] pl-4'></TableHead>\n <TableHead>Timestamp</TableHead>\n <TableHead>Event</TableHead>\n <TableHead>Endpoint</TableHead>\n <TableHead>Status</TableHead>\n <TableHead>Latency</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {filteredLogs.map((log) => (\n <TableRow key={log.id} className='cursor-pointer hover:bg-muted/50' onClick={() => handleRowClick(log)}>\n <TableCell className='py-3 pl-4'>\n <StatusDot status={log.statusCode} />\n </TableCell>\n <TableCell className='py-3 text-muted-foreground'>{formatTimestamp(log.timestamp)}</TableCell>\n <TableCell className='py-3 font-mono text-sm'>{log.eventName}</TableCell>\n <TableCell className='py-3 font-mono text-sm text-muted-foreground truncate max-w-[200px]'>\n {new URL(log.endpointUrl).hostname}\n </TableCell>\n <TableCell className='py-3'>\n <StatusBadge status={log.statusCode} />\n </TableCell>\n <TableCell className='py-3 text-muted-foreground'>{formatLatency(log.latency)}</TableCell>\n </TableRow>\n ))}\n {filteredLogs.length === 0 && (\n <TableRow>\n <TableCell colSpan={6} className='py-16'>\n <div className='flex flex-col items-center justify-center gap-4 text-center'>\n <div className='rounded-full bg-muted p-4'>\n <ScrollText className='h-8 w-8 text-muted-foreground' />\n </div>\n <div>\n <p className='font-medium'>No logs found</p>\n <p className='text-sm text-muted-foreground mt-1'>No webhook deliveries match the current filter.</p>\n </div>\n </div>\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n </div>\n\n {/* Log Detail Sheet */}\n <Sheet open={sheetOpen} onOpenChange={setSheetOpen}>\n <SheetContent className='w-full sm:max-w-lg overflow-y-auto'>\n {selectedLog && (\n <>\n <SheetHeader>\n <SheetTitle className='font-mono text-sm'>{selectedLog.eventName}</SheetTitle>\n <SheetDescription className='flex items-center gap-2 text-sm'>\n <StatusBadge status={selectedLog.statusCode} />\n <span>•</span>\n <span>{formatLatency(selectedLog.latency)}</span>\n </SheetDescription>\n </SheetHeader>\n\n <div className='mt-6 space-y-6 px-4'>\n <div className='space-y-1 text-sm text-muted-foreground'>\n <p>{formatFullTimestamp(selectedLog.timestamp)}</p>\n <button\n type='button'\n className='flex items-center gap-2 font-mono truncate text-left hover:text-foreground transition-colors cursor-pointer'\n onClick={() => handleCopyUrl(selectedLog.endpointUrl)}>\n <span className='truncate'>{selectedLog.endpointUrl}</span>\n {copiedUrl ? <Check className='h-3.5 w-3.5 shrink-0' /> : <Copy className='h-3.5 w-3.5 shrink-0' />}\n </button>\n </div>\n\n <div>\n <h4 className='text-sm font-semibold mb-2'>Request Payload</h4>\n <JsonViewer data={selectedLog.requestPayload} />\n </div>\n\n <div>\n <h4 className='text-sm font-semibold mb-2'>Response</h4>\n {selectedLog.responseBody ? (\n <div className='rounded-md border bg-muted p-4 text-sm font-mono'>{selectedLog.responseBody}</div>\n ) : (\n <p className='text-sm text-muted-foreground'>No response received</p>\n )}\n </div>\n\n {selectedLog.statusCode >= 400 && (\n <Button onClick={handleRetry}>\n <RefreshCw className='h-4 w-4' />\n Retry Delivery\n </Button>\n )}\n </div>\n </>\n )}\n </SheetContent>\n </Sheet>\n </>\n )\n}\n","import type { DeveloperDashboardProps as MdxuiProps, CustomRoute as MdxuiCustomRoute } from 'mdxui'\nimport { getIconByName } from './lib/icons'\nimport { AppProviders, AuthGate } from './providers'\nimport { DashboardRouter, DashboardRoutes } from './router'\nimport type { CustomRoute, DashboardConfig } from './types/config'\n\n/**\n * Props for DeveloperDashboard - supports both mdxui interface and legacy config.\n *\n * Option 1: mdxui interface (recommended for new code)\n * ```tsx\n * <DeveloperDashboard\n * identity={{ clientId: 'xxx' }}\n * routes={{ webhooks: true, billing: false }}\n * customRoutes={[{ path: '/analytics', label: 'Analytics', element: <Analytics /> }]}\n * />\n * ```\n *\n * Option 2: Legacy config object\n * ```tsx\n * <DeveloperDashboard config={{ identity: { clientId: 'xxx' }, routes: {...} }} />\n * ```\n */\nexport type DeveloperDashboardProps = MdxuiProps | { config: DashboardConfig }\n\n/**\n * Converts mdxui props to internal DashboardConfig.\n * Handles legacy props (showAPIKeys, showWebhooks, etc.) for backwards compatibility.\n */\nfunction propsToConfig(props: MdxuiProps): DashboardConfig {\n // Build routes config, merging legacy props with new routes object\n const routes = {\n overview: props.routes?.overview ?? true,\n requests: props.routes?.requests ?? props.showLogs ?? props.showUsage ?? true,\n keys: props.routes?.keys ?? props.showAPIKeys ?? true,\n team: props.routes?.team ?? true,\n billing: props.routes?.billing ?? true,\n settings: props.routes?.settings ?? true,\n webhooks: props.routes?.webhooks ?? props.showWebhooks ?? false,\n database: props.routes?.database ?? false,\n integrations: props.routes?.integrations ?? false,\n vault: props.routes?.vault ?? false,\n }\n\n // Convert mdxui CustomRoute (string icon names) to internal CustomRoute (LucideIcon components)\n const customRoutes: CustomRoute[] | undefined = props.customRoutes?.map((route: MdxuiCustomRoute) => ({\n path: route.path,\n label: route.label,\n icon: route.icon ? getIconByName(route.icon) : undefined,\n element: route.element,\n group: route.group,\n order: route.order,\n index: route.index,\n }))\n\n // Build identity config - use demo mode if not provided\n const identity = props.identity ?? {\n clientId: 'demo',\n useMockWidgets: true,\n required: false,\n onUnauthenticated: 'allow' as const,\n }\n\n return {\n basePath: props.basePath ?? '/',\n branding: props.branding,\n routes,\n customRoutes,\n theme: props.theme,\n identity,\n devToken: props.devToken,\n debug: props.debug,\n }\n}\n\n/**\n * Check if props are legacy config format\n */\nfunction isLegacyConfig(props: DeveloperDashboardProps): props is { config: DashboardConfig } {\n return 'config' in props && props.config !== undefined\n}\n\n/**\n * Main dashboard component that wraps everything with necessary providers\n * and renders the dashboard routes.\n *\n * Provider hierarchy (handled by AppProviders):\n * - ThemeProvider (next-themes) - Theme mode (light/dark/system)\n * - DashboardProvider - Dashboard config context\n * - SDKInitializer - Platform SDK setup\n * - IdentityProvider - WorkOS AuthKit + Widgets\n * - QueryProvider - TanStack Query + Auth sync\n *\n * @example Basic usage\n * ```tsx\n * <DeveloperDashboard\n * identity={{ clientId: 'xxx' }}\n * />\n * ```\n *\n * @example With custom routes\n * ```tsx\n * <DeveloperDashboard\n * identity={{ clientId: 'xxx' }}\n * routes={{ webhooks: true, billing: false }}\n * customRoutes={[\n * { path: '/analytics', label: 'Analytics', icon: 'BarChart3', element: <AnalyticsPage /> },\n * ]}\n * />\n * ```\n *\n * @example Hide built-in routes\n * ```tsx\n * <DeveloperDashboard\n * identity={{ clientId: 'xxx' }}\n * routes={{ billing: false, team: false }}\n * />\n * ```\n */\nexport function DeveloperDashboard(props: DeveloperDashboardProps) {\n // Support both mdxui props and legacy config format\n const config = isLegacyConfig(props) ? props.config : propsToConfig(props)\n\n return (\n <AppProviders config={config}>\n <AuthGate>\n <DashboardRouter basePath={config.basePath}>\n <DashboardRoutes />\n </DashboardRouter>\n </AuthGate>\n </AppProviders>\n )\n}\n","'use client'\n\nimport { ThemeProvider } from 'next-themes'\nimport type { ReactNode } from 'react'\nimport { applyThemeToElement, type Theme } from '@mdxui/themes'\nimport { useEffect, useRef } from 'react'\n\n/**\n * Configuration for standalone components.\n * Lighter weight than full DashboardConfig - no auth or routing required.\n */\nexport interface StandaloneConfig {\n /** Theme configuration */\n theme?: {\n /** Theme preset name */\n preset?: Theme\n /** Color mode */\n mode?: 'light' | 'dark' | 'system'\n /** Custom CSS variable overrides */\n custom?: Record<string, string>\n }\n /** Base path for internal links (optional) */\n basePath?: string\n}\n\ninterface StandaloneProviderProps {\n /** Configuration options */\n config?: StandaloneConfig\n /** Children components */\n children: ReactNode\n}\n\n/**\n * Lightweight provider for standalone page components.\n *\n * Use this when you want to embed individual cockpit pages\n * (APIKeys, Webhooks, Billing, etc.) in your own app shell\n * without the full DeveloperDashboard.\n *\n * Does NOT include:\n * - Authentication (you handle this)\n * - Routing (you handle this)\n * - Dashboard layout/sidebar (you provide your own)\n *\n * DOES include:\n * - Theme provider (light/dark mode)\n * - Theme preset application\n * - Custom CSS variable support\n *\n * @example\n * ```tsx\n * import { StandaloneProvider, StandaloneAPIKeys } from '@mdxui/cockpit'\n *\n * function MyApp() {\n * return (\n * <StandaloneProvider config={{ theme: { preset: 'stripe', mode: 'dark' } }}>\n * <MyAppShell>\n * <StandaloneAPIKeys\n * onCreateKey={createKey}\n * onRevokeKey={revokeKey}\n * />\n * </MyAppShell>\n * </StandaloneProvider>\n * )\n * }\n * ```\n */\nexport function StandaloneProvider({ config, children }: StandaloneProviderProps) {\n const themeMode = config?.theme?.mode ?? 'system'\n const containerRef = useRef<HTMLDivElement>(null)\n\n // Apply theme preset\n useEffect(() => {\n if (containerRef.current && config?.theme?.preset) {\n const resolvedMode = config.theme.mode === 'system' ? 'light' : (config.theme.mode ?? 'light')\n applyThemeToElement(containerRef.current, config.theme.preset, resolvedMode)\n }\n }, [config?.theme])\n\n return (\n <ThemeProvider\n attribute=\"class\"\n defaultTheme={themeMode}\n enableSystem={themeMode === 'system'}\n disableTransitionOnChange\n >\n <div ref={containerRef} className=\"standalone-provider\">\n {children}\n </div>\n </ThemeProvider>\n )\n}\n","'use client'\n\nimport { KeysPage, type ApiKey } from '../pages/keys'\n\n/**\n * Props for standalone API Keys component.\n */\nexport interface StandaloneAPIKeysProps {\n /** Initial API keys data (uses mock data if not provided) */\n keys?: ApiKey[]\n /** Callback when a new key is created */\n onCreateKey?: (name: string) => Promise<{ id: string; key: string }>\n /** Callback when a key is revoked */\n onRevokeKey?: (keyId: string) => Promise<void>\n /** Callback when a key is renamed */\n onRenameKey?: (keyId: string, newName: string) => Promise<void>\n /** Hide the page header/breadcrumb (default: true for standalone) */\n hideHeader?: boolean\n /** Additional CSS class */\n className?: string\n}\n\n/**\n * Standalone API Keys management component.\n *\n * Use this component to embed API key management in your own app shell\n * without requiring the full DeveloperDashboard.\n *\n * @example Basic usage (uses mock data)\n * ```tsx\n * import { StandaloneProvider, StandaloneAPIKeys } from '@mdxui/cockpit'\n *\n * function MySettings() {\n * return (\n * <StandaloneProvider>\n * <StandaloneAPIKeys />\n * </StandaloneProvider>\n * )\n * }\n * ```\n *\n * @example With real backend integration\n * ```tsx\n * <StandaloneAPIKeys\n * keys={myKeys}\n * onCreateKey={async (name) => {\n * const result = await api.createKey(name)\n * return { id: result.id, key: result.secretKey }\n * }}\n * onRevokeKey={async (keyId) => {\n * await api.revokeKey(keyId)\n * }}\n * onRenameKey={async (keyId, newName) => {\n * await api.renameKey(keyId, newName)\n * }}\n * />\n * ```\n */\nexport function StandaloneAPIKeys({\n keys,\n onCreateKey,\n onRevokeKey,\n onRenameKey,\n hideHeader = true,\n className,\n}: StandaloneAPIKeysProps) {\n return (\n <KeysPage\n keys={keys}\n onCreateKey={onCreateKey}\n onRevokeKey={onRevokeKey}\n onRenameKey={onRenameKey}\n hideHeader={hideHeader}\n className={className}\n />\n )\n}\n","'use client'\n\nimport { WebhooksEndpointsPage, type WebhookEndpoint } from '../pages/webhooks/endpoints'\n\n/**\n * Props for standalone Webhooks component.\n */\nexport interface StandaloneWebhooksProps {\n /** Initial endpoints data (uses mock data if not provided) */\n endpoints?: WebhookEndpoint[]\n /** Callback when an endpoint is created */\n onCreateEndpoint?: (data: { url: string; events: string[]; enabled: boolean }) => Promise<{ id: string; secret: string }>\n /** Callback when an endpoint is updated */\n onUpdateEndpoint?: (id: string, data: { url: string; events: string[]; enabled: boolean }) => Promise<void>\n /** Callback when an endpoint is deleted */\n onDeleteEndpoint?: (id: string) => Promise<void>\n /** Hide the page header/breadcrumb (default: true for standalone) */\n hideHeader?: boolean\n /** Additional CSS class */\n className?: string\n}\n\n/**\n * Standalone Webhooks management component.\n *\n * Use this component to embed webhook management in your own app shell\n * without requiring the full DeveloperDashboard.\n *\n * @example Basic usage (uses mock data)\n * ```tsx\n * import { StandaloneProvider, StandaloneWebhooks } from '@mdxui/cockpit'\n *\n * function MySettings() {\n * return (\n * <StandaloneProvider>\n * <StandaloneWebhooks />\n * </StandaloneProvider>\n * )\n * }\n * ```\n *\n * @example With real backend integration\n * ```tsx\n * <StandaloneWebhooks\n * endpoints={myEndpoints}\n * onCreateEndpoint={async (data) => {\n * const result = await api.createWebhook(data)\n * return { id: result.id, secret: result.secret }\n * }}\n * onUpdateEndpoint={async (id, data) => {\n * await api.updateWebhook(id, data)\n * }}\n * onDeleteEndpoint={async (id) => {\n * await api.deleteWebhook(id)\n * }}\n * />\n * ```\n */\nexport function StandaloneWebhooks({\n endpoints,\n onCreateEndpoint,\n onUpdateEndpoint,\n onDeleteEndpoint,\n hideHeader = true,\n className,\n}: StandaloneWebhooksProps) {\n return (\n <WebhooksEndpointsPage\n endpoints={endpoints}\n onCreateEndpoint={onCreateEndpoint}\n onUpdateEndpoint={onUpdateEndpoint}\n onDeleteEndpoint={onDeleteEndpoint}\n hideHeader={hideHeader}\n className={className}\n />\n )\n}\n","'use client'\n\nimport { BillingPage, type BillingData } from '../pages/billing'\n\n/**\n * Props for standalone Billing component.\n */\nexport interface StandaloneBillingProps {\n /** Billing data (uses mock data if not provided) */\n billingData?: BillingData\n /** Callback when \"Manage Plan\" is clicked */\n onManagePlan?: () => Promise<void>\n /** Callback when \"Update\" payment method is clicked */\n onUpdatePaymentMethod?: () => Promise<void>\n /** Callback when an invoice is downloaded */\n onDownloadInvoice?: (invoiceId: string) => Promise<void>\n /** Callback when billing alerts are toggled */\n onToggleAlerts?: (enabled: boolean) => Promise<void>\n /** Hide the page header/breadcrumb (default: true for standalone) */\n hideHeader?: boolean\n /** Additional CSS class */\n className?: string\n}\n\n/**\n * Standalone Billing management component.\n *\n * Use this component to embed billing management in your own app shell\n * without requiring the full DeveloperDashboard.\n *\n * @example Basic usage (uses mock data)\n * ```tsx\n * import { StandaloneProvider, StandaloneBilling } from '@mdxui/cockpit'\n *\n * function MySettings() {\n * return (\n * <StandaloneProvider>\n * <StandaloneBilling />\n * </StandaloneProvider>\n * )\n * }\n * ```\n *\n * @example With real backend integration\n * ```tsx\n * <StandaloneBilling\n * billingData={myBillingData}\n * onManagePlan={async () => {\n * const url = await createBillingPortalSession()\n * window.location.href = url\n * }}\n * onDownloadInvoice={async (invoiceId) => {\n * const url = await api.getInvoiceDownloadUrl(invoiceId)\n * window.open(url, '_blank')\n * }}\n * />\n * ```\n */\nexport function StandaloneBilling({\n billingData,\n onManagePlan,\n onUpdatePaymentMethod,\n onDownloadInvoice,\n onToggleAlerts,\n hideHeader = true,\n className,\n}: StandaloneBillingProps) {\n return (\n <BillingPage\n billingData={billingData}\n onManagePlan={onManagePlan}\n onUpdatePaymentMethod={onUpdatePaymentMethod}\n onDownloadInvoice={onDownloadInvoice}\n onToggleAlerts={onToggleAlerts}\n hideHeader={hideHeader}\n className={className}\n />\n )\n}\n","'use client'\n\nimport { TeamPage } from '../pages/team'\n\n/**\n * Props for standalone Team component.\n */\nexport interface StandaloneTeamProps {\n /** Whether to use mock widgets instead of real WorkOS widgets */\n useMockWidgets?: boolean\n /** Hide the page header/breadcrumb (default: true for standalone) */\n hideHeader?: boolean\n /** Additional CSS class */\n className?: string\n}\n\n/**\n * Standalone Team management component.\n *\n * Use this component to embed team management in your own app shell\n * without requiring the full DeveloperDashboard.\n *\n * NOTE: This component uses WorkOS widgets for team management.\n * You need to wrap your app with IdentityProvider from @mdxui/auth\n * for the real widgets to work. Use useMockWidgets={true} for demo/testing.\n *\n * @example Basic usage (uses mock widgets)\n * ```tsx\n * import { StandaloneProvider, StandaloneTeam } from '@mdxui/cockpit'\n *\n * function MySettings() {\n * return (\n * <StandaloneProvider>\n * <StandaloneTeam useMockWidgets />\n * </StandaloneProvider>\n * )\n * }\n * ```\n *\n * @example With WorkOS integration\n * ```tsx\n * import { IdentityProvider } from '@mdxui/auth'\n * import { StandaloneProvider, StandaloneTeam } from '@mdxui/cockpit'\n *\n * function MySettings() {\n * return (\n * <IdentityProvider clientId=\"your-client-id\">\n * <StandaloneProvider>\n * <StandaloneTeam />\n * </StandaloneProvider>\n * </IdentityProvider>\n * )\n * }\n * ```\n */\nexport function StandaloneTeam({\n useMockWidgets,\n hideHeader = true,\n className,\n}: StandaloneTeamProps) {\n return (\n <TeamPage\n useMockWidgets={useMockWidgets}\n hideHeader={hideHeader}\n className={className}\n />\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cn } from \"@mdxui/primitives/lib/utils\"\n\nexport interface AuthLayoutProps extends React.ComponentProps<\"div\"> {\n children: React.ReactNode\n title?: string\n subtitle?: string\n logo?: React.ReactNode\n backgroundImage?: string\n showTestimonial?: boolean\n testimonial?: {\n quote: string\n author: string\n role: string\n avatar?: string\n }\n}\n\nfunction AuthLayout({\n className,\n children,\n title,\n subtitle,\n logo,\n backgroundImage,\n showTestimonial = false,\n testimonial,\n ...props\n}: AuthLayoutProps) {\n return (\n <div className={cn(\"min-h-screen w-full lg:grid lg:grid-cols-2\", className)} {...props}>\n {/* Left side - Form */}\n <div className=\"flex items-center justify-center py-12\">\n <div className=\"mx-auto w-full max-w-[400px] space-y-8 px-4\">\n {logo && <div className=\"flex justify-center\">{logo}</div>}\n\n {(title || subtitle) && (\n <div className=\"space-y-2 text-center\">\n {title && (\n <h1 className=\"text-3xl font-bold tracking-tight\">{title}</h1>\n )}\n {subtitle && (\n <p className=\"text-muted-foreground text-sm\">{subtitle}</p>\n )}\n </div>\n )}\n\n <div>{children}</div>\n </div>\n </div>\n\n {/* Right side - Visual/Testimonial */}\n <div\n className=\"bg-muted hidden lg:block\"\n style={\n backgroundImage\n ? {\n backgroundImage: `url(${backgroundImage})`,\n backgroundSize: \"cover\",\n backgroundPosition: \"center\",\n }\n : undefined\n }\n >\n {showTestimonial && testimonial && !backgroundImage && (\n <div className=\"flex h-full items-center justify-center p-12\">\n <div className=\"max-w-md space-y-6\">\n <blockquote className=\"space-y-4\">\n <p className=\"text-lg font-medium leading-relaxed\">\n \"{testimonial.quote}\"\n </p>\n <footer className=\"flex items-center gap-3\">\n {testimonial.avatar && (\n <img\n src={testimonial.avatar}\n alt={testimonial.author}\n className=\"size-10 rounded-full\"\n />\n )}\n <div>\n <div className=\"font-semibold\">{testimonial.author}</div>\n <div className=\"text-muted-foreground text-sm\">\n {testimonial.role}\n </div>\n </div>\n </footer>\n </blockquote>\n </div>\n </div>\n )}\n </div>\n </div>\n )\n}\n\nexport { AuthLayout }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { LoginForm } from \"@mdxui/primitives/auth/login-form\"\nimport { AuthLayout } from \"./auth-layout\"\n\nexport interface LoginPageProps {\n onSubmit?: (data: { email: string; password: string; rememberMe?: boolean }) => void | Promise<void>\n onOAuthClick?: (provider: \"google\" | \"github\" | \"microsoft\") => void | Promise<void>\n onMagicLinkClick?: (email: string) => void | Promise<void>\n onForgotPasswordClick?: () => void\n onSignupClick?: () => void\n isLoading?: boolean\n showOAuth?: boolean\n showMagicLink?: boolean\n oauthProviders?: Array<\"google\" | \"github\" | \"microsoft\">\n error?: string\n logo?: React.ReactNode\n title?: string\n subtitle?: string\n backgroundImage?: string\n showTestimonial?: boolean\n testimonial?: {\n quote: string\n author: string\n role: string\n avatar?: string\n }\n}\n\nfunction LoginPage({\n onSubmit,\n onOAuthClick,\n onMagicLinkClick,\n onForgotPasswordClick,\n onSignupClick,\n isLoading,\n showOAuth = true,\n showMagicLink = false,\n oauthProviders = [\"google\", \"github\"],\n error,\n logo,\n title = \"Welcome back\",\n subtitle = \"Sign in to your account to continue\",\n backgroundImage,\n showTestimonial = false,\n testimonial,\n}: LoginPageProps) {\n return (\n <AuthLayout\n logo={logo}\n title={title}\n subtitle={subtitle}\n backgroundImage={backgroundImage}\n showTestimonial={showTestimonial}\n testimonial={testimonial}\n >\n <LoginForm\n onSubmit={onSubmit}\n onOAuthClick={onOAuthClick}\n onMagicLinkClick={onMagicLinkClick}\n onForgotPasswordClick={onForgotPasswordClick}\n onSignupClick={onSignupClick}\n isLoading={isLoading}\n showOAuth={showOAuth}\n showMagicLink={showMagicLink}\n oauthProviders={oauthProviders}\n error={error}\n />\n </AuthLayout>\n )\n}\n\nexport { LoginPage }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { SignupForm } from \"@mdxui/primitives/auth/signup-form\"\nimport { AuthLayout } from \"./auth-layout\"\n\nexport interface SignupPageProps {\n onSubmit?: (data: {\n fullName: string\n email: string\n password: string\n confirmPassword: string\n agreeToTerms: boolean\n }) => void | Promise<void>\n onOAuthClick?: (provider: \"google\" | \"github\" | \"microsoft\") => void | Promise<void>\n onLoginClick?: () => void\n isLoading?: boolean\n showOAuth?: boolean\n oauthProviders?: Array<\"google\" | \"github\" | \"microsoft\">\n multiStep?: boolean\n error?: string\n logo?: React.ReactNode\n title?: string\n subtitle?: string\n backgroundImage?: string\n showTestimonial?: boolean\n testimonial?: {\n quote: string\n author: string\n role: string\n avatar?: string\n }\n}\n\nfunction SignupPage({\n onSubmit,\n onOAuthClick,\n onLoginClick,\n isLoading,\n showOAuth = true,\n oauthProviders = [\"google\", \"github\"],\n multiStep = false,\n error,\n logo,\n title = \"Create an account\",\n subtitle = \"Get started with your free account\",\n backgroundImage,\n showTestimonial = false,\n testimonial,\n}: SignupPageProps) {\n return (\n <AuthLayout\n logo={logo}\n title={title}\n subtitle={subtitle}\n backgroundImage={backgroundImage}\n showTestimonial={showTestimonial}\n testimonial={testimonial}\n >\n <SignupForm\n onSubmit={onSubmit}\n onOAuthClick={onOAuthClick}\n onLoginClick={onLoginClick}\n isLoading={isLoading}\n showOAuth={showOAuth}\n oauthProviders={oauthProviders}\n multiStep={multiStep}\n error={error}\n />\n </AuthLayout>\n )\n}\n\nexport { SignupPage }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { PasswordResetForm } from \"@mdxui/primitives/auth/password-reset-form\"\nimport { AuthLayout } from \"./auth-layout\"\n\nexport interface PasswordResetPageProps {\n mode?: \"request\" | \"confirm\"\n onRequestSubmit?: (data: { email: string }) => void | Promise<void>\n onConfirmSubmit?: (data: { password: string; confirmPassword: string }) => void | Promise<void>\n onBackToLogin?: () => void\n isLoading?: boolean\n error?: string\n successMessage?: string\n logo?: React.ReactNode\n title?: string\n subtitle?: string\n backgroundImage?: string\n}\n\nfunction PasswordResetPage({\n mode = \"request\",\n onRequestSubmit,\n onConfirmSubmit,\n onBackToLogin,\n isLoading,\n error,\n successMessage,\n logo,\n title,\n subtitle,\n backgroundImage,\n}: PasswordResetPageProps) {\n const defaultTitle =\n mode === \"request\" ? \"Reset your password\" : \"Create new password\"\n const defaultSubtitle =\n mode === \"request\"\n ? \"We'll send you a link to reset your password\"\n : \"Enter your new password below\"\n\n return (\n <AuthLayout\n logo={logo}\n title={title || defaultTitle}\n subtitle={subtitle || defaultSubtitle}\n backgroundImage={backgroundImage}\n >\n <PasswordResetForm\n mode={mode}\n onRequestSubmit={onRequestSubmit}\n onConfirmSubmit={onConfirmSubmit}\n onBackToLogin={onBackToLogin}\n isLoading={isLoading}\n error={error}\n successMessage={successMessage}\n />\n </AuthLayout>\n )\n}\n\nexport { PasswordResetPage }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { OTPInputForm } from \"@mdxui/primitives/auth/otp-input\"\nimport { AuthLayout } from \"./auth-layout\"\n\nexport interface OTPPageProps {\n onSubmit?: (data: { otp: string }) => void | Promise<void>\n onResend?: () => void | Promise<void>\n isLoading?: boolean\n error?: string\n canResend?: boolean\n resendTimeout?: number\n logo?: React.ReactNode\n title?: string\n subtitle?: string\n description?: string\n backgroundImage?: string\n}\n\nfunction OTPPage({\n onSubmit,\n onResend,\n isLoading,\n error,\n canResend = false,\n resendTimeout = 60,\n logo,\n title = \"Two-Factor Authentication\",\n subtitle = \"Enter the code from your authenticator app\",\n description,\n backgroundImage,\n}: OTPPageProps) {\n return (\n <AuthLayout logo={logo} backgroundImage={backgroundImage}>\n <OTPInputForm\n onSubmit={onSubmit}\n onResend={onResend}\n isLoading={isLoading}\n error={error}\n title={title}\n description={description || subtitle}\n canResend={canResend}\n resendTimeout={resendTimeout}\n />\n </AuthLayout>\n )\n}\n\nexport { OTPPage }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { OnboardingWizard, type OnboardingStep } from \"@mdxui/primitives/auth/onboarding-wizard\"\nimport { cn } from \"@mdxui/primitives/lib/utils\"\n\nexport interface OnboardingPageProps {\n steps: OnboardingStep[]\n onComplete?: (data: Record<string, any>) => void | Promise<void>\n onSkip?: () => void\n allowSkip?: boolean\n isLoading?: boolean\n logo?: React.ReactNode\n title?: string\n subtitle?: string\n showProgress?: boolean\n className?: string\n}\n\nfunction OnboardingPage({\n steps,\n onComplete,\n onSkip,\n allowSkip = false,\n isLoading,\n logo,\n title = \"Welcome! Let's get you set up\",\n subtitle = \"This will only take a few minutes\",\n showProgress = true,\n className,\n}: OnboardingPageProps) {\n return (\n <div className={cn(\"flex min-h-screen items-center justify-center p-4\", className)}>\n <div className=\"w-full space-y-8\">\n {logo && <div className=\"flex justify-center\">{logo}</div>}\n\n <OnboardingWizard\n steps={steps}\n onComplete={onComplete}\n onSkip={onSkip}\n allowSkip={allowSkip}\n isLoading={isLoading}\n title={title}\n subtitle={subtitle}\n showProgress={showProgress}\n />\n </div>\n </div>\n )\n}\n\nexport { OnboardingPage }\n","// Main App export for convenience\nexport { DeveloperDashboard as App, DeveloperDashboard } from './developer'\n\n// Re-export everything from developer\nexport * from './developer'\n\n// Re-export auth components\nexport * from './auth'\n\n// =============================================================================\n// AppComponents Export - Implements mdxui interface\n// =============================================================================\n\nimport type { AppComponents } from 'mdxui'\nimport { DeveloperDashboard } from './developer'\nimport {\n APIKeyManager,\n Billing,\n DashboardLayout,\n SettingsPage,\n TeamManager,\n} from './developer/components'\nimport { OverviewPage } from './developer/pages'\n\n/**\n * AppComponents implementation for @mdxui/cockpit\n *\n * This export provides components that implement the mdxui AppComponents interface.\n * Not all required components are implemented yet - this is a partial implementation\n * focused on the developer dashboard use case.\n *\n * Note: Some components are mapped from internal names to interface names:\n * - DeveloperDashboard -> App (also exports DeveloperDashboard for backwards compat)\n * - DashboardLayout -> Shell\n * - OverviewPage -> Dashboard\n * - SettingsPage -> Settings\n * - APIKeyManager -> APIKeys\n * - TeamManager -> Team\n *\n * Type assertions are used because the internal component props don't exactly match\n * the mdxui interface props - this is intentional as cockpit uses its own config\n * pattern while still providing the conceptual AppComponents structure.\n */\nexport const components = {\n // Layout Components\n App: DeveloperDashboard,\n Shell: DashboardLayout,\n Dashboard: OverviewPage,\n Settings: SettingsPage,\n\n // Pre-built Features\n DeveloperDashboard,\n APIKeys: APIKeyManager,\n Team: TeamManager,\n Billing,\n} satisfies Partial<Record<keyof AppComponents, unknown>>\n"],"mappings":"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","names":["useAuth","applyThemeToElement","formatTimestamp","Card","CardContent","CardDescription","CardHeader","CardTitle","jsx","jsxs","Card","CardContent","CardDescription","CardHeader","CardTitle","ChartContainer","ChartTooltip","ChartTooltipContent","CartesianGrid","XAxis","YAxis","jsx","jsxs","jsx","jsxs","cn","jsx","cn","useState","jsx","jsxs","Card","CardContent","CardHeader","CardTitle","Area","AreaChart","cn","jsx","jsxs","Card","CardContent","CardDescription","CardHeader","CardTitle","ChartContainer","ChartTooltip","ChartTooltipContent","CartesianGrid","XAxis","YAxis","jsx","jsxs","useAuth","useEffect","jsx","useState","jsx","jsxs","jsx","jsxs","organizationId","Link","jsx","useTheme","jsx","Fragment","jsx","jsxs","useAuth","useAuth","Button","BarChart3","Key","Users","jsx","jsxs","useAuth","Button","Key","BarChart3","Users","cn","useTheme","useEffect","useState","jsx","jsxs","cn","jsx","jsxs","Button","Dialog","DialogContent","jsx","jsxs","Button","Lock","jsx","jsxs","Button","Dialog","DialogContent","DialogFooter","DialogHeader","DialogTitle","Input","Key","useState","jsx","jsxs","Button","Card","Key","jsx","jsxs","useState","Fragment","jsx","jsxs","useState","Avatar","AvatarFallback","AvatarImage","Badge","Button","Card","CardContent","CardDescription","CardHeader","CardTitle","Input","Label","Table","TableBody","TableCell","TableHead","TableHeader","TableRow","Shield","jsx","jsxs","Card","CardContent","CardDescription","CardHeader","CardTitle","jsx","jsxs","React","Avatar","AvatarFallback","AvatarImage","Button","Card","CardContent","CardDescription","CardHeader","CardTitle","Input","Label","User","Mail","jsx","jsxs","React","Button","Card","CardContent","CardDescription","CardHeader","CardTitle","Badge","Table","TableBody","TableCell","TableHead","TableHeader","TableRow","Dialog","DialogContent","DialogDescription","DialogFooter","DialogHeader","DialogTitle","DropdownMenu","DropdownMenuContent","DropdownMenuItem","DropdownMenuTrigger","Input","Label","Copy","Key","MoreHorizontal","Plus","Fragment","jsx","jsxs","formatDate","maskKey","React","Avatar","AvatarFallback","AvatarImage","Button","Badge","Card","CardContent","CardDescription","CardHeader","CardTitle","Table","TableBody","TableCell","TableHead","TableHeader","TableRow","Dialog","DialogContent","DialogDescription","DialogFooter","DialogHeader","DialogTitle","DialogTrigger","DropdownMenu","DropdownMenuContent","DropdownMenuItem","DropdownMenuTrigger","Input","Label","MoreHorizontal","Plus","Mail","Trash2","Users","toast","jsx","jsxs","formatDate","React","Button","Badge","Card","CardContent","CardDescription","CardHeader","CardTitle","Table","TableBody","TableCell","TableHead","TableHeader","TableRow","Separator","Dialog","DialogContent","DialogDescription","DialogFooter","DialogHeader","DialogTitle","DialogTrigger","Input","Label","CreditCard","Plus","Trash2","toast","jsx","jsxs","formatDate","useEffect","jsx","useAuth","useEffect","Fragment","jsx","jsxs","useAuth","useEffect","jsx","jsxs","useEffect","jsx","useEffect","useLocation","Badge","Button","Card","CardContent","CardDescription","CardHeader","CardTitle","Label","Separator","Table","TableBody","TableCell","TableHead","TableHeader","TableRow","Check","CreditCard","Download","FileText","useState","toast","Fragment","jsx","jsxs","useState","toast","Separator","Card","CardHeader","CardTitle","Badge","CardDescription","CardContent","Check","Button","CreditCard","Label","Table","TableHeader","TableRow","TableHead","TableBody","TableCell","Download","FileText","Breadcrumb","BreadcrumbItem","BreadcrumbList","BreadcrumbPage","Card","CardContent","Separator","SidebarTrigger","Database","Fragment","jsx","jsxs","Breadcrumb","BreadcrumbItem","BreadcrumbList","BreadcrumbPage","Separator","SidebarTrigger","Plug","Fragment","jsx","jsxs","Breadcrumb","BreadcrumbItem","BreadcrumbList","BreadcrumbPage","Button","Dialog","DialogContent","DialogDescription","DialogFooter","DialogHeader","DialogTitle","DialogTrigger","DropdownMenu","DropdownMenuContent","DropdownMenuItem","DropdownMenuSeparator","DropdownMenuTrigger","Input","Separator","SidebarTrigger","Table","TableBody","TableCell","TableHead","TableHeader","TableRow","BarChart3","Check","Copy","Key","MoreHorizontal","Plus","Trash2","useState","toast","Fragment","jsx","jsxs","useState","toast","SidebarTrigger","Separator","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbPage","Dialog","DialogTrigger","Button","Plus","DialogContent","DialogHeader","DialogTitle","DialogDescription","Input","Check","Copy","DialogFooter","Table","TableHeader","TableRow","TableHead","TableBody","TableCell","DropdownMenu","DropdownMenuTrigger","MoreHorizontal","DropdownMenuContent","DropdownMenuItem","BarChart3","DropdownMenuSeparator","Trash2","Key","Breadcrumb","BreadcrumbItem","BreadcrumbList","BreadcrumbPage","Button","Card","CardContent","CardHeader","CardTitle","ChartContainer","ChartTooltip","ChartTooltipContent","DropdownMenu","DropdownMenuContent","DropdownMenuItem","DropdownMenuTrigger","Separator","SidebarTrigger","Activity","AlertTriangle","BarChart3","DollarSign","useEffect","useState","Link","Area","AreaChart","Bar","BarChart","ReferenceLine","XAxis","YAxis","Fragment","jsx","jsxs","AreaChart","Area","Card","CardHeader","CardContent","BarChart3","useState","useEffect","SidebarTrigger","Separator","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbPage","DropdownMenu","DropdownMenuTrigger","Button","DropdownMenuContent","DropdownMenuItem","Link","CardTitle","Activity","DollarSign","AlertTriangle","ChartContainer","BarChart","XAxis","YAxis","ChartTooltip","ChartTooltipContent","ReferenceLine","Bar","Breadcrumb","BreadcrumbItem","BreadcrumbList","BreadcrumbPage","Button","DropdownMenu","DropdownMenuContent","DropdownMenuItem","DropdownMenuTrigger","Separator","SidebarTrigger","Table","TableBody","TableCell","TableHead","TableHeader","TableRow","Activity","ChevronDown","useState","Fragment","jsx","jsxs","useState","SidebarTrigger","Separator","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbPage","DropdownMenu","DropdownMenuTrigger","Button","ChevronDown","DropdownMenuContent","DropdownMenuItem","Table","TableHeader","TableRow","TableHead","TableBody","TableCell","Activity","useAuth","UserProfile","Breadcrumb","BreadcrumbItem","BreadcrumbList","BreadcrumbPage","Separator","SidebarTrigger","Link","Fragment","jsx","jsxs","useAuth","SidebarTrigger","Separator","Breadcrumb","BreadcrumbList","BreadcrumbItem","Link","BreadcrumbPage","UserProfile","useAuth","Breadcrumb","BreadcrumbItem","BreadcrumbLink","BreadcrumbList","BreadcrumbPage","BreadcrumbSeparator","Separator","SidebarTrigger","useEffect","useRef","useState","Link","Fragment","jsx","jsxs","useAuth","useState","useRef","useEffect","SidebarTrigger","Separator","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","Link","BreadcrumbSeparator","BreadcrumbPage","useAuth","Breadcrumb","BreadcrumbItem","BreadcrumbLink","BreadcrumbList","BreadcrumbPage","BreadcrumbSeparator","Separator","SidebarTrigger","Link","Fragment","jsx","jsxs","useAuth","SidebarTrigger","Separator","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","Link","BreadcrumbSeparator","BreadcrumbPage","useAuth","Breadcrumb","BreadcrumbItem","BreadcrumbList","BreadcrumbPage","Separator","SidebarTrigger","Fragment","jsx","jsxs","SidebarTrigger","Separator","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbPage","useAuth","Breadcrumb","BreadcrumbItem","BreadcrumbList","BreadcrumbPage","Button","Separator","SidebarTrigger","Plus","useState","toast","Fragment","jsx","jsxs","useState","toast","SidebarTrigger","Separator","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbPage","Button","Plus","Breadcrumb","BreadcrumbItem","BreadcrumbLink","BreadcrumbList","BreadcrumbPage","BreadcrumbSeparator","Button","Card","CardContent","CardHeader","CardTitle","DropdownMenu","DropdownMenuContent","DropdownMenuItem","DropdownMenuTrigger","cn","Progress","Separator","SidebarTrigger","Activity","AlertTriangle","CheckCircle2","ChevronDown","useState","Link","Fragment","jsx","jsxs","useState","SidebarTrigger","Separator","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","Link","BreadcrumbSeparator","BreadcrumbPage","DropdownMenu","DropdownMenuTrigger","Button","ChevronDown","DropdownMenuContent","DropdownMenuItem","Card","CardContent","Activity","CardHeader","CardTitle","CheckCircle2","cn","Progress","AlertTriangle","Badge","Breadcrumb","BreadcrumbItem","BreadcrumbLink","BreadcrumbList","BreadcrumbPage","BreadcrumbSeparator","Button","Card","CardContent","Dialog","DialogContent","DialogDescription","DialogFooter","DialogHeader","DialogTitle","DialogTrigger","DropdownMenu","DropdownMenuContent","DropdownMenuItem","DropdownMenuSeparator","DropdownMenuTrigger","Input","Label","Separator","SidebarTrigger","Switch","Check","Copy","Link2","MoreHorizontal","Pencil","Plus","Trash2","useState","Link","toast","Fragment","jsx","jsxs","useState","toast","SidebarTrigger","Separator","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","Link","BreadcrumbSeparator","BreadcrumbPage","Dialog","DialogTrigger","Button","Plus","DialogContent","DialogHeader","DialogTitle","DialogDescription","Label","Input","Switch","DialogFooter","Card","CardContent","Badge","DropdownMenu","DropdownMenuTrigger","MoreHorizontal","DropdownMenuContent","DropdownMenuItem","Pencil","Check","Copy","DropdownMenuSeparator","Trash2","Link2","Breadcrumb","BreadcrumbItem","BreadcrumbLink","BreadcrumbList","BreadcrumbPage","BreadcrumbSeparator","Card","CardContent","Input","Separator","SidebarTrigger","ChevronRight","Search","useState","Link","Fragment","jsx","jsxs","useState","SidebarTrigger","Separator","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","Link","BreadcrumbSeparator","BreadcrumbPage","Search","Input","Card","CardContent","ChevronRight","Breadcrumb","BreadcrumbItem","BreadcrumbLink","BreadcrumbList","BreadcrumbPage","BreadcrumbSeparator","Button","DropdownMenu","DropdownMenuContent","DropdownMenuItem","DropdownMenuTrigger","Separator","Sheet","SheetContent","SheetDescription","SheetHeader","SheetTitle","SidebarTrigger","Table","TableBody","TableCell","TableHead","TableHeader","TableRow","Check","ChevronDown","Copy","RefreshCw","useState","Link","toast","Fragment","jsx","jsxs","statusFilterOptions","formatTimestamp","formatLatency","useState","toast","SidebarTrigger","Separator","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","Link","BreadcrumbSeparator","BreadcrumbPage","DropdownMenu","DropdownMenuTrigger","Button","ChevronDown","DropdownMenuContent","DropdownMenuItem","Table","TableHeader","TableRow","TableHead","TableBody","TableCell","Sheet","SheetContent","SheetHeader","SheetTitle","SheetDescription","Check","Copy","RefreshCw","Fragment","jsx","jsxs","useLocation","useEffect","jsx","ThemeProvider","applyThemeToElement","useEffect","useRef","jsx","jsx","jsx","jsx","jsx","cn","jsx","jsxs","jsx","jsx","jsx","jsx","cn","jsx","jsxs"]}
|
|
1
|
+
{"version":3,"sources":["../src/developer/index.ts","../src/developer/components/dashboard/activity-feed.tsx","../src/developer/components/dashboard/area-chart.tsx","../src/developer/components/dashboard/bar-chart.tsx","../src/developer/components/dashboard/command-palette.tsx","../src/developer/components/dashboard/dashboard-grid.tsx","../src/developer/components/dashboard/data-table.tsx","../src/developer/components/dashboard/kpi-card.tsx","../src/developer/components/dashboard/line-chart.tsx","../src/developer/components/layout/dashboard-layout.tsx","../src/developer/context/dashboard-context.tsx","../src/developer/hooks/use-theme-loader.ts","../src/developer/types/config.ts","../src/developer/lib/icons.ts","../src/developer/routes/build-nav.ts","../src/developer/routes/build-routes.ts","../src/developer/pages/settings/account.tsx","../src/developer/components/layout/settings-layout.tsx","../src/developer/components/settings/widget-slot.tsx","../src/developer/components/widgets/mock-widgets.tsx","../src/developer/pages/settings/billing.tsx","../src/developer/components/billing/plan-picker-modal.tsx","../src/developer/hooks/use-billing.ts","../src/developer/pages/settings/users.tsx","../src/developer/pages/data-browser.tsx","../src/developer/pages/database.tsx","../src/developer/pages/events-log.tsx","../src/developer/pages/integrations.tsx","../src/developer/pages/keys.tsx","../src/developer/pages/overview.tsx","../src/developer/pages/requests.tsx","../src/developer/components/ui/json-viewer.tsx","../src/developer/components/ui/sidebar-ad.tsx","../src/developer/components/ui/status-badge.tsx","../src/developer/lib/mock-data.ts","../src/developer/pages/vault.tsx","../src/developer/components/vault/vault-input-modal.tsx","../src/developer/components/vault/vault-list.tsx","../src/developer/lib/vault-mock.ts","../src/developer/components/vault/vault-delete-dialog.tsx","../src/developer/components/vault/vault-empty-state.tsx","../src/developer/components/vault/vault-item-card.tsx","../src/developer/pages/onboarding.tsx","../src/developer/components/ui/headlessly-logo.tsx","../src/developer/pages/webhooks/endpoints.tsx","../src/developer/pages/webhooks/event-catalog.tsx","../src/developer/pages/webhooks/logs.tsx","../src/developer/routes/hooks.ts","../src/developer/routes/definitions.ts","../src/developer/components/layout/nav-main.tsx","../src/developer/components/layout/nav-user.tsx","../src/developer/components/layout/landing-page.tsx","../src/developer/components/app/user-profile.tsx","../src/developer/components/app/api-key-manager.tsx","../src/developer/components/app/team-manager.tsx","../src/developer/components/app/billing.tsx","../src/developer/components/checkout-intent-handler.tsx","../src/developer/onboarding-gate.tsx","../src/developer/providers/app-providers.tsx","../src/developer/providers/identity-provider.tsx","../src/developer/providers/query-provider.tsx","../src/developer/lib/query-client.ts","../src/developer/providers/auth-gate.tsx","../src/developer/router.tsx","../src/developer/developer-dashboard.tsx","../src/auth/auth-layout.tsx","../src/auth/login-page.tsx","../src/auth/signup-page.tsx","../src/auth/password-reset-page.tsx","../src/auth/otp-page.tsx","../src/auth/onboarding-page.tsx","../src/index.ts"],"sourcesContent":["// Re-export useAuth from @mdxui/auth for convenience\nexport { useAuth } from '@mdxui/auth'\n\n// Theme system exports\nexport {\n type ThemePreset,\n type Theme,\n themePresets,\n themeNames,\n isThemePreset,\n useThemeStore,\n applyThemeToElement,\n type ThemeStore,\n getThemeCSS,\n themeCSS,\n ThemeScript,\n getThemeScriptContent,\n type ThemeMode,\n type ThemeState,\n getResolvedMode,\n} from '@mdxui/themes'\n\n// Re-export components for advanced usage\nexport * from './components'\n\n// Context hooks\nexport { useDashboard, useRoutes, useCustomRoutes } from './context/dashboard-context'\n\n// Main component\nexport { DeveloperDashboard } from './developer-dashboard'\nexport type { DeveloperDashboardProps } from './developer-dashboard'\n\n// Pages - for direct import by advanced users\nexport * from './pages'\n\n// Icon utilities\nexport { getIconByName, dashboardIcons } from './lib/icons'\n\n// Types\nexport type {\n CustomRoute,\n DashboardBranding,\n DashboardConfig,\n DashboardEventsConfig,\n DashboardIdentity,\n DashboardRoutes,\n DashboardTheme,\n} from './types/config'\nexport type { SidebarAdProps } from './components/ui/sidebar-ad'\nexport type { PlanConfig, PlanDisplayConfig, PlanFeatureConfig } from './components/billing/plan-config'\n\nexport { OnboardingGate } from './onboarding-gate'\nexport type { OnboardingGateProps, OnboardingGateCallbacks } from './onboarding-gate'\n","import { Avatar, AvatarFallback, AvatarImage } from '@mdxui/primitives/avatar'\nimport { Badge } from '@mdxui/primitives/badge'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@mdxui/primitives/card'\nimport { type LucideIcon } from 'lucide-react'\n\n// Simple scroll container component (avoiding ScrollArea dependency)\nfunction ScrollContainer({ children, style }: { children: React.ReactNode; style?: React.CSSProperties }) {\n return (\n <div className=\"overflow-y-auto overflow-x-hidden\" style={style}>\n {children}\n </div>\n )\n}\n\nexport interface ActivityItem {\n /** Unique ID */\n id: string\n /** Activity type */\n type: string\n /** Activity title/message */\n title: string\n /** Activity description */\n description?: string\n /** Activity timestamp */\n timestamp: Date | string\n /** User who performed the activity */\n user?: {\n name: string\n avatar?: string\n }\n /** Icon to display */\n icon?: LucideIcon\n /** Status badge */\n status?: {\n label: string\n variant?: 'default' | 'secondary' | 'destructive' | 'outline'\n }\n /** Additional metadata to display */\n metadata?: Record<string, any>\n}\n\nexport interface ActivityFeedProps {\n /** Feed title */\n title?: string\n /** Feed description */\n description?: string\n /** Activity items */\n items: ActivityItem[]\n /** Maximum height (enables scrolling) */\n maxHeight?: number | string\n /** Show avatars */\n showAvatars?: boolean\n /** Show timestamps */\n showTimestamps?: boolean\n /** Additional CSS classes */\n className?: string\n /** Empty state message */\n emptyMessage?: string\n /** Timestamp formatter */\n formatTimestamp?: (timestamp: Date | string) => string\n}\n\nfunction defaultFormatTimestamp(timestamp: Date | string): string {\n const date = typeof timestamp === 'string' ? new Date(timestamp) : timestamp\n const now = new Date()\n const diff = now.getTime() - date.getTime()\n const seconds = Math.floor(diff / 1000)\n const minutes = Math.floor(seconds / 60)\n const hours = Math.floor(minutes / 60)\n const days = Math.floor(hours / 24)\n\n if (seconds < 60) return 'Just now'\n if (minutes < 60) return `${minutes}m ago`\n if (hours < 24) return `${hours}h ago`\n if (days < 7) return `${days}d ago`\n return date.toLocaleDateString('en-US', { month: 'short', day: 'numeric' })\n}\n\nexport function ActivityFeed({\n title = 'Recent Activity',\n description,\n items,\n maxHeight = 600,\n showAvatars = true,\n showTimestamps = true,\n className,\n emptyMessage = 'No activity yet.',\n formatTimestamp = defaultFormatTimestamp,\n}: ActivityFeedProps) {\n return (\n <Card className={className}>\n <CardHeader>\n <CardTitle>{title}</CardTitle>\n {description && <CardDescription>{description}</CardDescription>}\n </CardHeader>\n <CardContent>\n {items.length === 0 ? (\n <div className='flex h-32 items-center justify-center text-sm text-muted-foreground'>{emptyMessage}</div>\n ) : (\n <ScrollContainer style={{ maxHeight }}>\n <div className='space-y-4 pr-4'>\n {items.map((item, index) => {\n const Icon = item.icon\n const isLast = index === items.length - 1\n\n return (\n <div key={item.id} className='relative flex gap-4'>\n {/* Timeline connector */}\n {!isLast && <div className='absolute left-4 top-10 h-full w-px bg-border' />}\n\n {/* Avatar or Icon */}\n <div className='relative'>\n {showAvatars && item.user ? (\n <Avatar className='h-8 w-8'>\n <AvatarImage src={item.user.avatar} />\n <AvatarFallback>\n {item.user.name\n .split(' ')\n .map((n) => n[0])\n .join('')\n .toUpperCase()}\n </AvatarFallback>\n </Avatar>\n ) : Icon ? (\n <div className='flex h-8 w-8 items-center justify-center rounded-full bg-muted'>\n <Icon className='h-4 w-4 text-muted-foreground' />\n </div>\n ) : (\n <div className='h-8 w-8 rounded-full bg-muted' />\n )}\n </div>\n\n {/* Content */}\n <div className='flex-1 space-y-1 pb-4'>\n <div className='flex items-start justify-between gap-2'>\n <div className='flex-1'>\n <p className='text-sm font-medium leading-none'>{item.title}</p>\n {item.description && <p className='text-sm text-muted-foreground mt-1'>{item.description}</p>}\n </div>\n {item.status && (\n <Badge variant={item.status.variant || 'secondary'} className='shrink-0'>\n {item.status.label}\n </Badge>\n )}\n </div>\n {showTimestamps && (\n <p className='text-xs text-muted-foreground'>{formatTimestamp(item.timestamp)}</p>\n )}\n {item.metadata && Object.keys(item.metadata).length > 0 && (\n <div className='mt-2 flex flex-wrap gap-2'>\n {Object.entries(item.metadata).map(([key, value]) => (\n <div key={key} className='rounded-md bg-muted px-2 py-1 text-xs'>\n <span className='font-medium'>{key}:</span>{' '}\n <span className='text-muted-foreground'>{String(value)}</span>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n )\n })}\n </div>\n </ScrollContainer>\n )}\n </CardContent>\n </Card>\n )\n}\n","import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@mdxui/primitives/card'\nimport { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@mdxui/primitives/chart'\nimport { Area, AreaChart as RechartsAreaChart, CartesianGrid, XAxis, YAxis } from 'recharts'\n\nexport interface AreaChartProps {\n /** Chart title */\n title?: string\n /** Chart description */\n description?: string\n /** Data points for the chart */\n data: Array<Record<string, any>>\n /** X-axis data key */\n xAxisKey: string\n /** Y-axis data keys (one or more lines) */\n yAxisKeys: string[]\n /** Chart configuration for colors and labels */\n config: ChartConfig\n /** Show grid lines */\n showGrid?: boolean\n /** Show X axis */\n showXAxis?: boolean\n /** Show Y axis */\n showYAxis?: boolean\n /** X-axis label formatter */\n xAxisFormatter?: (value: any) => string\n /** Y-axis label formatter */\n yAxisFormatter?: (value: any) => string\n /** Chart height */\n height?: number | string\n /** Additional CSS classes */\n className?: string\n /** Fill opacity (0-1) */\n fillOpacity?: number\n /** Stroke width */\n strokeWidth?: number\n}\n\nexport function AreaChart({\n title,\n description,\n data,\n xAxisKey,\n yAxisKeys,\n config,\n showGrid = true,\n showXAxis = true,\n showYAxis = true,\n xAxisFormatter,\n yAxisFormatter,\n height = 350,\n className,\n fillOpacity = 0.2,\n strokeWidth = 2,\n}: AreaChartProps) {\n return (\n <Card className={className}>\n {(title || description) && (\n <CardHeader>\n {title && <CardTitle>{title}</CardTitle>}\n {description && <CardDescription>{description}</CardDescription>}\n </CardHeader>\n )}\n <CardContent>\n <ChartContainer config={config} className='w-full' style={{ height }}>\n <RechartsAreaChart data={data}>\n {showGrid && <CartesianGrid strokeDasharray='3 3' className='stroke-muted' />}\n {showXAxis && (\n <XAxis\n dataKey={xAxisKey}\n tickLine={false}\n tickMargin={10}\n axisLine={false}\n tickFormatter={xAxisFormatter}\n />\n )}\n {showYAxis && (\n <YAxis\n tickLine={false}\n tickMargin={10}\n axisLine={false}\n tickFormatter={yAxisFormatter}\n />\n )}\n <ChartTooltip content={<ChartTooltipContent />} />\n {yAxisKeys.map((key) => (\n <Area\n key={key}\n type='monotone'\n dataKey={key}\n stroke={`var(--color-${key})`}\n fill={`var(--color-${key})`}\n fillOpacity={fillOpacity}\n strokeWidth={strokeWidth}\n stackId={yAxisKeys.length > 1 ? 'stack' : undefined}\n />\n ))}\n </RechartsAreaChart>\n </ChartContainer>\n </CardContent>\n </Card>\n )\n}\n","import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@mdxui/primitives/card'\nimport { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@mdxui/primitives/chart'\nimport { Bar, BarChart as RechartsBarChart, CartesianGrid, ReferenceLine, XAxis, YAxis } from 'recharts'\n\nexport interface BarChartProps {\n /** Chart title */\n title?: string\n /** Chart description */\n description?: string\n /** Data points for the chart */\n data: Array<Record<string, any>>\n /** X-axis data key */\n xAxisKey: string\n /** Y-axis data keys (one or more bars) */\n yAxisKeys: string[]\n /** Chart configuration for colors and labels */\n config: ChartConfig\n /** Show grid lines */\n showGrid?: boolean\n /** Show X axis */\n showXAxis?: boolean\n /** Show Y axis */\n showYAxis?: boolean\n /** X-axis label formatter */\n xAxisFormatter?: (value: any) => string\n /** Y-axis label formatter */\n yAxisFormatter?: (value: any) => string\n /** Chart height */\n height?: number | string\n /** Additional CSS classes */\n className?: string\n /** Bar radius */\n radius?: number | [number, number, number, number]\n /** Show average reference line */\n showAverage?: boolean\n /** Average label prefix */\n averageLabel?: string\n /** Layout: horizontal or vertical */\n layout?: 'horizontal' | 'vertical'\n}\n\nexport function BarChart({\n title,\n description,\n data,\n xAxisKey,\n yAxisKeys,\n config,\n showGrid = true,\n showXAxis = true,\n showYAxis = true,\n xAxisFormatter,\n yAxisFormatter,\n height = 350,\n className,\n radius = 4,\n showAverage = false,\n averageLabel = 'Avg',\n layout = 'horizontal',\n}: BarChartProps) {\n // Calculate average for the first y-axis key if showing average\n const average = showAverage && data.length > 0\n ? data.reduce((sum, item) => sum + (item[yAxisKeys[0]] || 0), 0) / data.length\n : 0\n\n return (\n <Card className={className}>\n {(title || description) && (\n <CardHeader>\n {title && <CardTitle>{title}</CardTitle>}\n {description && <CardDescription>{description}</CardDescription>}\n </CardHeader>\n )}\n <CardContent>\n <ChartContainer config={config} className='w-full' style={{ height }}>\n <RechartsBarChart data={data} layout={layout}>\n {showGrid && <CartesianGrid strokeDasharray='3 3' className='stroke-muted' />}\n {showXAxis && layout === 'horizontal' && (\n <XAxis\n dataKey={xAxisKey}\n tickLine={false}\n tickMargin={10}\n axisLine={false}\n tickFormatter={xAxisFormatter}\n />\n )}\n {showYAxis && layout === 'horizontal' && (\n <YAxis\n tickLine={false}\n tickMargin={10}\n axisLine={false}\n tickFormatter={yAxisFormatter}\n />\n )}\n {showXAxis && layout === 'vertical' && (\n <XAxis\n type='number'\n tickLine={false}\n tickMargin={10}\n axisLine={false}\n tickFormatter={xAxisFormatter}\n />\n )}\n {showYAxis && layout === 'vertical' && (\n <YAxis\n type='category'\n dataKey={xAxisKey}\n tickLine={false}\n tickMargin={10}\n axisLine={false}\n tickFormatter={yAxisFormatter}\n />\n )}\n <ChartTooltip content={<ChartTooltipContent />} />\n {showAverage && average > 0 && (\n <ReferenceLine\n y={layout === 'horizontal' ? average : undefined}\n x={layout === 'vertical' ? average : undefined}\n stroke='var(--muted-foreground)'\n strokeDasharray='3 3'\n strokeOpacity={0.5}\n label={{\n value: `${averageLabel}: ${Math.round(average).toLocaleString()}`,\n position: layout === 'horizontal' ? 'insideBottomLeft' : 'insideTopRight',\n className: 'text-xs fill-muted-foreground',\n }}\n />\n )}\n {yAxisKeys.map((key) => (\n <Bar\n key={key}\n dataKey={key}\n fill={`var(--color-${key})`}\n radius={radius}\n />\n ))}\n </RechartsBarChart>\n </ChartContainer>\n </CardContent>\n </Card>\n )\n}\n","'use client'\n\nimport { Dialog, DialogContent } from '@mdxui/primitives/dialog'\nimport { cn } from '@mdxui/primitives/lib/utils'\nimport { Command as CommandPrimitive } from 'cmdk'\nimport { type LucideIcon, Search } from 'lucide-react'\nimport { useEffect, useState } from 'react'\n\nexport interface CommandItem {\n /** Unique ID */\n id: string\n /** Display label */\n label: string\n /** Optional description */\n description?: string\n /** Icon to display */\n icon?: LucideIcon\n /** Keyboard shortcut to display */\n shortcut?: string\n /** Action to perform when selected */\n onSelect: () => void\n /** Optional keywords for search */\n keywords?: string[]\n}\n\nexport interface CommandGroup {\n /** Group heading */\n heading: string\n /** Items in this group */\n items: CommandItem[]\n}\n\nexport interface CommandPaletteProps {\n /** Command groups */\n groups: CommandGroup[]\n /** Placeholder text */\n placeholder?: string\n /** Empty state message */\n emptyMessage?: string\n /** Open state (controlled) */\n open?: boolean\n /** On open change (controlled) */\n onOpenChange?: (open: boolean) => void\n /** Keyboard shortcut to open (default: Cmd+K / Ctrl+K) */\n shortcut?: string\n /** Additional CSS classes */\n className?: string\n}\n\nexport function CommandPalette({\n groups,\n placeholder = 'Type a command or search...',\n emptyMessage = 'No results found.',\n open: controlledOpen,\n onOpenChange,\n shortcut = 'k',\n className,\n}: CommandPaletteProps) {\n const [internalOpen, setInternalOpen] = useState(false)\n const isControlled = controlledOpen !== undefined\n const open = isControlled ? controlledOpen : internalOpen\n const setOpen = isControlled ? onOpenChange || (() => {}) : setInternalOpen\n\n useEffect(() => {\n const down = (e: KeyboardEvent) => {\n if (e.key === shortcut && (e.metaKey || e.ctrlKey)) {\n e.preventDefault()\n setOpen(!open)\n }\n }\n\n document.addEventListener('keydown', down)\n return () => document.removeEventListener('keydown', down)\n }, [open, setOpen, shortcut])\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogContent className='overflow-hidden p-0 shadow-lg'>\n <CommandPrimitive className={cn('flex h-full w-full flex-col overflow-hidden rounded-md', className)}>\n <div className='flex items-center border-b px-3'>\n <Search className='mr-2 h-4 w-4 shrink-0 opacity-50' />\n <CommandPrimitive.Input\n placeholder={placeholder}\n className='flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50'\n />\n </div>\n <CommandPrimitive.List className='max-h-[400px] overflow-y-auto overflow-x-hidden p-2'>\n <CommandPrimitive.Empty className='py-6 text-center text-sm text-muted-foreground'>\n {emptyMessage}\n </CommandPrimitive.Empty>\n {groups.map((group) => (\n <CommandPrimitive.Group\n key={group.heading}\n heading={group.heading}\n className='overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground'\n >\n {group.items.map((item) => {\n const Icon = item.icon\n return (\n <CommandPrimitive.Item\n key={item.id}\n value={item.label}\n keywords={item.keywords}\n onSelect={() => {\n item.onSelect()\n setOpen(false)\n }}\n className='relative flex cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none aria-selected:bg-accent aria-selected:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50'\n >\n {Icon && <Icon className='mr-2 h-4 w-4' />}\n <div className='flex-1'>\n <div className='font-medium'>{item.label}</div>\n {item.description && <div className='text-xs text-muted-foreground'>{item.description}</div>}\n </div>\n {item.shortcut && (\n <div className='ml-2 flex items-center gap-1 text-xs text-muted-foreground'>\n {item.shortcut.split('+').map((key, index) => (\n <kbd\n key={index}\n className='pointer-events-none inline-flex h-5 select-none items-center gap-1 rounded border bg-muted px-1.5 font-mono text-[10px] font-medium text-muted-foreground opacity-100'\n >\n {key}\n </kbd>\n ))}\n </div>\n )}\n </CommandPrimitive.Item>\n )\n })}\n </CommandPrimitive.Group>\n ))}\n </CommandPrimitive.List>\n </CommandPrimitive>\n </DialogContent>\n </Dialog>\n )\n}\n\n// Hook to programmatically open the command palette\nexport function useCommandPalette() {\n const [open, setOpen] = useState(false)\n\n return {\n open,\n setOpen,\n toggle: () => setOpen((prev) => !prev),\n }\n}\n","import { cn } from '@mdxui/primitives/lib/utils'\nimport { type ReactNode } from 'react'\n\nexport interface DashboardGridProps {\n /** Grid children */\n children: ReactNode\n /** Number of columns */\n columns?: 1 | 2 | 3 | 4 | 6 | 12\n /** Gap between items */\n gap?: 2 | 4 | 6 | 8\n /** Additional CSS classes */\n className?: string\n}\n\nexport function DashboardGrid({ children, columns = 3, gap = 4, className }: DashboardGridProps) {\n const columnClasses = {\n 1: 'md:grid-cols-1',\n 2: 'md:grid-cols-2',\n 3: 'md:grid-cols-3',\n 4: 'md:grid-cols-4',\n 6: 'md:grid-cols-6',\n 12: 'md:grid-cols-12',\n }\n\n const gapClasses = {\n 2: 'gap-2',\n 4: 'gap-4',\n 6: 'gap-6',\n 8: 'gap-8',\n }\n\n return <div className={cn('grid auto-rows-min', columnClasses[columns], gapClasses[gap], className)}>{children}</div>\n}\n\nexport interface DashboardGridItemProps {\n /** Item children */\n children: ReactNode\n /** Column span */\n colSpan?: 1 | 2 | 3 | 4 | 6 | 12 | 'full'\n /** Row span */\n rowSpan?: 1 | 2 | 3 | 4 | 6\n /** Additional CSS classes */\n className?: string\n}\n\nexport function DashboardGridItem({ children, colSpan = 1, rowSpan = 1, className }: DashboardGridItemProps) {\n const colSpanClasses = {\n 1: 'md:col-span-1',\n 2: 'md:col-span-2',\n 3: 'md:col-span-3',\n 4: 'md:col-span-4',\n 6: 'md:col-span-6',\n 12: 'md:col-span-12',\n full: 'md:col-span-full',\n }\n\n const rowSpanClasses = {\n 1: 'md:row-span-1',\n 2: 'md:row-span-2',\n 3: 'md:row-span-3',\n 4: 'md:row-span-4',\n 6: 'md:row-span-6',\n }\n\n return <div className={cn(colSpanClasses[colSpan], rowSpanClasses[rowSpan], className)}>{children}</div>\n}\n","import { Button } from '@mdxui/primitives/button'\nimport { Input } from '@mdxui/primitives/input'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@mdxui/primitives/table'\nimport { cn } from '@mdxui/primitives/lib/utils'\nimport {\n type ColumnDef,\n type ColumnFiltersState,\n type SortingState,\n type VisibilityState,\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n} from '@tanstack/react-table'\nimport { ArrowDown, ArrowUp, ArrowUpDown, ChevronLeft, ChevronRight } from 'lucide-react'\nimport { useState } from 'react'\n\nexport interface DataTableProps<TData, TValue> {\n /** Column definitions */\n columns: ColumnDef<TData, TValue>[]\n /** Table data */\n data: TData[]\n /** Enable search/filtering */\n searchable?: boolean\n /** Search placeholder text */\n searchPlaceholder?: string\n /** Column to search on (if searchable) */\n searchColumn?: string\n /** Enable pagination */\n paginated?: boolean\n /** Initial page size */\n pageSize?: number\n /** Page size options */\n pageSizeOptions?: number[]\n /** Additional CSS classes */\n className?: string\n /** Empty state message */\n emptyMessage?: string\n}\n\nexport function DataTable<TData, TValue>({\n columns,\n data,\n searchable = true,\n searchPlaceholder = 'Search...',\n searchColumn,\n paginated = true,\n pageSize = 10,\n pageSizeOptions = [10, 20, 50, 100],\n className,\n emptyMessage = 'No results found.',\n}: DataTableProps<TData, TValue>) {\n const [sorting, setSorting] = useState<SortingState>([])\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([])\n const [columnVisibility, setColumnVisibility] = useState<VisibilityState>({})\n const [rowSelection, setRowSelection] = useState({})\n\n const table = useReactTable({\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n getPaginationRowModel: paginated ? getPaginationRowModel() : undefined,\n onSortingChange: setSorting,\n getSortedRowModel: getSortedRowModel(),\n onColumnFiltersChange: setColumnFilters,\n getFilteredRowModel: getFilteredRowModel(),\n onColumnVisibilityChange: setColumnVisibility,\n onRowSelectionChange: setRowSelection,\n state: {\n sorting,\n columnFilters,\n columnVisibility,\n rowSelection,\n },\n initialState: {\n pagination: {\n pageSize,\n },\n },\n })\n\n return (\n <div className={cn('space-y-4', className)}>\n {searchable && searchColumn && (\n <div className='flex items-center'>\n <Input\n placeholder={searchPlaceholder}\n value={(table.getColumn(searchColumn)?.getFilterValue() as string) ?? ''}\n onChange={(event) => table.getColumn(searchColumn)?.setFilterValue(event.target.value)}\n className='max-w-sm'\n />\n </div>\n )}\n <div className='rounded-md border'>\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => {\n return (\n <TableHead key={header.id}>\n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n </TableHead>\n )\n })}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow key={row.id} data-state={row.getIsSelected() && 'selected'}>\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id}>{flexRender(cell.column.columnDef.cell, cell.getContext())}</TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell colSpan={columns.length} className='h-24 text-center'>\n {emptyMessage}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n {paginated && (\n <div className='flex items-center justify-between px-2'>\n <div className='flex-1 text-sm text-muted-foreground'>\n {table.getFilteredSelectedRowModel().rows.length > 0 && (\n <span>\n {table.getFilteredSelectedRowModel().rows.length} of {table.getFilteredRowModel().rows.length} row(s)\n selected.\n </span>\n )}\n </div>\n <div className='flex items-center space-x-6 lg:space-x-8'>\n <div className='flex items-center space-x-2'>\n <p className='text-sm font-medium'>Rows per page</p>\n <select\n className='h-8 w-[70px] rounded-md border border-input bg-background px-2 text-sm'\n value={table.getState().pagination.pageSize}\n onChange={(e) => {\n table.setPageSize(Number(e.target.value))\n }}\n >\n {pageSizeOptions.map((size) => (\n <option key={size} value={size}>\n {size}\n </option>\n ))}\n </select>\n </div>\n <div className='flex w-[100px] items-center justify-center text-sm font-medium'>\n Page {table.getState().pagination.pageIndex + 1} of {table.getPageCount()}\n </div>\n <div className='flex items-center space-x-2'>\n <Button\n variant='outline'\n size='sm'\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n >\n <ChevronLeft className='h-4 w-4' />\n Previous\n </Button>\n <Button variant='outline' size='sm' onClick={() => table.nextPage()} disabled={!table.getCanNextPage()}>\n Next\n <ChevronRight className='h-4 w-4' />\n </Button>\n </div>\n </div>\n </div>\n )}\n </div>\n )\n}\n\n// Helper component for sortable column headers\nexport function SortableHeader({ column, children }: { column: any; children: React.ReactNode }) {\n return (\n <Button variant='ghost' onClick={() => column.toggleSorting(column.getIsSorted() === 'asc')} className='-ml-4'>\n {children}\n {column.getIsSorted() === 'asc' ? (\n <ArrowUp className='ml-2 h-4 w-4' />\n ) : column.getIsSorted() === 'desc' ? (\n <ArrowDown className='ml-2 h-4 w-4' />\n ) : (\n <ArrowUpDown className='ml-2 h-4 w-4' />\n )}\n </Button>\n )\n}\n","import { Card, CardContent, CardHeader, CardTitle } from '@mdxui/primitives/card'\nimport { type LucideIcon, TrendingDown, TrendingUp } from 'lucide-react'\nimport { Area, AreaChart } from 'recharts'\nimport { cn } from '@mdxui/primitives/lib/utils'\n\nexport interface KPICardProps {\n /** Card title */\n title: string\n /** Main metric value */\n value: string | number\n /** Optional description or subtitle */\n description?: string\n /** Icon to display */\n icon?: LucideIcon\n /** Change percentage (e.g. 12.5 for +12.5%) */\n change?: number\n /** Trend direction - overrides auto-detection from change */\n trend?: 'up' | 'down' | 'neutral'\n /** Sparkline data points */\n sparklineData?: Array<{ value: number }>\n /** Sparkline color */\n sparklineColor?: string\n /** Additional CSS classes */\n className?: string\n /** Click handler */\n onClick?: () => void\n}\n\nexport function KPICard({\n title,\n value,\n description,\n icon: Icon,\n change,\n trend,\n sparklineData,\n sparklineColor = 'var(--chart-1)',\n className,\n onClick,\n}: KPICardProps) {\n // Auto-detect trend from change if not explicitly set\n const effectiveTrend = trend || (change !== undefined ? (change > 0 ? 'up' : change < 0 ? 'down' : 'neutral') : 'neutral')\n\n const isClickable = !!onClick\n\n return (\n <Card\n className={cn(\n isClickable && 'cursor-pointer transition-colors hover:bg-muted/50',\n className\n )}\n onClick={onClick}\n >\n <CardHeader className='flex flex-row items-center justify-between space-y-0 pb-2'>\n <CardTitle className='text-sm font-medium'>{title}</CardTitle>\n {Icon && <Icon className='h-4 w-4 text-muted-foreground' />}\n </CardHeader>\n <CardContent>\n <div className='flex items-end justify-between'>\n <div className='space-y-1'>\n <div className='text-2xl font-bold'>{value}</div>\n {description && (\n <p className='text-xs text-muted-foreground'>{description}</p>\n )}\n {change !== undefined && (\n <div className='flex items-center gap-1 text-xs'>\n {effectiveTrend === 'up' && (\n <>\n <TrendingUp className='h-3 w-3 text-green-500' />\n <span className='text-green-500'>+{change}%</span>\n </>\n )}\n {effectiveTrend === 'down' && (\n <>\n <TrendingDown className='h-3 w-3 text-red-500' />\n <span className='text-red-500'>{change}%</span>\n </>\n )}\n {effectiveTrend === 'neutral' && (\n <span className='text-muted-foreground'>{change}%</span>\n )}\n </div>\n )}\n </div>\n {sparklineData && sparklineData.length > 0 && (\n <div className='h-8 w-20'>\n <AreaChart\n data={sparklineData}\n width={80}\n height={32}\n margin={{ top: 2, right: 0, bottom: 0, left: 0 }}\n >\n <Area\n type='monotone'\n dataKey='value'\n stroke={sparklineColor}\n fill={sparklineColor}\n fillOpacity={0.2}\n strokeWidth={1.5}\n />\n </AreaChart>\n </div>\n )}\n </div>\n </CardContent>\n </Card>\n )\n}\n","import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@mdxui/primitives/card'\nimport { type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent } from '@mdxui/primitives/chart'\nimport { CartesianGrid, Line, LineChart as RechartsLineChart, XAxis, YAxis } from 'recharts'\n\nexport interface LineChartProps {\n /** Chart title */\n title?: string\n /** Chart description */\n description?: string\n /** Data points for the chart */\n data: Array<Record<string, any>>\n /** X-axis data key */\n xAxisKey: string\n /** Y-axis data keys (one or more lines) */\n yAxisKeys: string[]\n /** Chart configuration for colors and labels */\n config: ChartConfig\n /** Show grid lines */\n showGrid?: boolean\n /** Show X axis */\n showXAxis?: boolean\n /** Show Y axis */\n showYAxis?: boolean\n /** Show legend */\n showLegend?: boolean\n /** X-axis label formatter */\n xAxisFormatter?: (value: any) => string\n /** Y-axis label formatter */\n yAxisFormatter?: (value: any) => string\n /** Chart height */\n height?: number | string\n /** Additional CSS classes */\n className?: string\n /** Line type */\n lineType?: 'monotone' | 'linear' | 'step' | 'stepBefore' | 'stepAfter'\n /** Stroke width */\n strokeWidth?: number\n /** Show dots on data points */\n showDots?: boolean\n /** Dot radius */\n dotRadius?: number\n}\n\nexport function LineChart({\n title,\n description,\n data,\n xAxisKey,\n yAxisKeys,\n config,\n showGrid = true,\n showXAxis = true,\n showYAxis = true,\n showLegend = false,\n xAxisFormatter,\n yAxisFormatter,\n height = 350,\n className,\n lineType = 'monotone',\n strokeWidth = 2,\n showDots = true,\n dotRadius = 4,\n}: LineChartProps) {\n return (\n <Card className={className}>\n {(title || description) && (\n <CardHeader>\n {title && <CardTitle>{title}</CardTitle>}\n {description && <CardDescription>{description}</CardDescription>}\n </CardHeader>\n )}\n <CardContent>\n <ChartContainer config={config} className='w-full' style={{ height }}>\n <RechartsLineChart data={data}>\n {showGrid && <CartesianGrid strokeDasharray='3 3' className='stroke-muted' />}\n {showXAxis && (\n <XAxis\n dataKey={xAxisKey}\n tickLine={false}\n tickMargin={10}\n axisLine={false}\n tickFormatter={xAxisFormatter}\n />\n )}\n {showYAxis && (\n <YAxis\n tickLine={false}\n tickMargin={10}\n axisLine={false}\n tickFormatter={yAxisFormatter}\n />\n )}\n <ChartTooltip content={<ChartTooltipContent />} />\n {showLegend && <ChartLegend content={<ChartLegendContent />} />}\n {yAxisKeys.map((key) => (\n <Line\n key={key}\n type={lineType}\n dataKey={key}\n stroke={`var(--color-${key})`}\n strokeWidth={strokeWidth}\n dot={showDots ? { r: dotRadius } : false}\n activeDot={showDots ? { r: dotRadius + 2 } : false}\n />\n ))}\n </RechartsLineChart>\n </ChartContainer>\n </CardContent>\n </Card>\n )\n}\n","import { useAuth } from '@mdxui/auth'\nimport { WebOutlet, WebLink } from '@mdxui/navigation/web'\nimport { DashboardShell } from '@mdxui/primitives/dashboard-shell'\nimport { SidebarMenu, SidebarMenuButton, SidebarMenuItem, SidebarTrigger } from '@mdxui/primitives/sidebar'\nimport { ReportIssue } from '@mdxui/widgets'\nimport { Bug } from 'lucide-react'\nimport { useCallback, useMemo } from 'react'\nimport { useDashboard } from '../../context/dashboard-context'\nimport type { ReportIssueConfig } from '../../types/config'\nimport { getIconByName } from '../../lib/icons'\nimport { buildNavItems, routeDefinitions } from '../../routes'\nimport type { NavSubItem } from '../../routes'\nimport { SidebarAd } from '../ui/sidebar-ad'\nimport { TeamSwitcher } from '@mdxui/auth'\nimport { NavMain } from './nav-main'\nimport { NavUser } from './nav-user'\n\n/**\n * Hook that resolves dynamic sub-items from route definitions that have useSubItems hooks.\n * Returns a map of route key -> resolved sub-items.\n *\n * Because hooks must be called unconditionally, we call ALL useSubItems hooks\n * every render (routeDefinitions is a static array so the order is stable).\n * buildNavItems filters by enabled routes.\n */\nfunction useResolvedSubItems(): Record<string, { items: NavSubItem[]; className?: string }> {\n const results: Record<string, { items: NavSubItem[]; className?: string }> = {}\n\n for (const def of routeDefinitions) {\n if (def.useSubItems) {\n // biome-ignore lint/correctness/useHookAtTopLevel: called in stable order (definitions is static)\n const resolved = def.useSubItems()\n results[def.key] = resolved\n }\n }\n\n return results\n}\n\nfunction useNavItems() {\n const { routes, customRoutes } = useDashboard()\n const subItemsMap = useResolvedSubItems()\n\n return useMemo(\n () => buildNavItems(routeDefinitions, routes, customRoutes, subItemsMap, getIconByName),\n [routes, customRoutes, subItemsMap],\n )\n}\n\nfunction ReportIssueButton({\n config,\n navUser,\n organizationId,\n role,\n impersonator,\n}: {\n config: { reportIssue?: ReportIssueConfig | false }\n navUser: { id: string; email: string; name: string } | null\n organizationId?: string | null\n role?: string | null\n impersonator?: { email: string; reason: string | null } | null\n}) {\n return (\n <SidebarMenu className='px-2 py-2'>\n <SidebarMenuItem>\n <ReportIssue\n user={navUser ? { id: navUser.id, email: navUser.email, name: navUser.name } : undefined}\n {...(typeof config.reportIssue === 'object' ? config.reportIssue : {})}\n context={{\n ...(organizationId && { organizationId }),\n ...(role && { role }),\n ...(impersonator && { impersonator }),\n ...(typeof config.reportIssue === 'object' ? config.reportIssue.context : {}),\n }}\n >\n <SidebarMenuButton tooltip=\"Report Issue\" className=\"cursor-pointer\">\n <Bug />\n <span>Report Issue</span>\n </SidebarMenuButton>\n </ReportIssue>\n </SidebarMenuItem>\n </SidebarMenu>\n )\n}\n\nexport function DashboardLayout() {\n const { user, signOut, organizationId } = useAuth()\n const role = user?.role ?? null\n const impersonator = null\n const { config } = useDashboard()\n const navItems = useNavItems()\n\n const handleSignOut = useCallback(() => signOut({ redirectTo: config.identity?.signOutRedirectUri ?? '/' }), [signOut, config.identity?.signOutRedirectUri])\n\n const navUser = user\n ? {\n id: user.id,\n name: user.firstName && user.lastName ? `${user.firstName} ${user.lastName}` : user.email,\n email: user.email,\n avatar: user.profilePictureUrl ?? undefined,\n }\n : null\n\n const reportIssueButton = config.reportIssue !== false ? (\n <ReportIssueButton\n config={config}\n navUser={navUser}\n organizationId={organizationId}\n role={role}\n impersonator={impersonator}\n />\n ) : null\n\n return (\n <DashboardShell\n header={\n <div className=\"flex flex-col gap-2\">\n <SidebarMenu>\n <SidebarMenuItem className=\"flex h-12 items-center justify-between group-data-[collapsible=icon]:justify-center\">\n {config.branding?.logo && (\n <SidebarMenuButton asChild className=\"overflow-hidden transition-[opacity,width] duration-200 group-data-[collapsible=icon]:opacity-0 group-data-[collapsible=icon]:!w-0 group-data-[collapsible=icon]:!p-0 group-data-[collapsible=icon]:pointer-events-none\">\n <WebLink to=\"/\">\n {config.branding.logo}\n </WebLink>\n </SidebarMenuButton>\n )}\n <SidebarTrigger className=\"group-data-[collapsible=icon]:mx-auto\" />\n </SidebarMenuItem>\n </SidebarMenu>\n <TeamSwitcher />\n </div>\n }\n navigation={\n <div className=\"flex flex-col flex-1 justify-between\">\n <NavMain items={navItems} />\n {reportIssueButton}\n </div>\n }\n footer={\n <>\n {config.sidebarAd && <SidebarAd {...config.sidebarAd} />}\n {navUser && <NavUser user={navUser} onSignOut={handleSignOut} />}\n </>\n }\n mainClassName='overflow-hidden h-screen'\n >\n <WebOutlet />\n </DashboardShell>\n )\n}\n","import { createContext, type ReactNode, useContext, useMemo } from 'react'\nimport { useCustomThemeVariables, useThemeLoader } from '../hooks/use-theme-loader'\nimport type { SidebarAdProps } from '../components/ui/sidebar-ad'\nimport type { CustomRoute, DashboardConfig, DashboardEventsConfig, DashboardIdentity, DashboardRoutes, ReportIssueConfig } from '../types/config'\nimport type { PlanConfig } from '../components/billing/plan-config'\nimport { defaultConfig, defaultIdentity, defaultRoutes } from '../types/config'\n\ninterface DashboardContextValue {\n config: Required<Omit<DashboardConfig, 'identity' | 'sidebarAd' | 'events' | 'reportIssue' | 'onboardingComponent' | 'planConfig'>> & {\n identity: DashboardIdentity\n sidebarAd?: SidebarAdProps | false\n events?: DashboardEventsConfig\n reportIssue?: ReportIssueConfig | false\n planConfig?: PlanConfig\n }\n routes: Required<DashboardRoutes>\n customRoutes: CustomRoute[]\n basePath: string\n}\n\nconst DashboardContext = createContext<DashboardContextValue | null>(null)\n\ninterface DashboardProviderProps {\n config: DashboardConfig\n children: ReactNode\n}\n\nexport function DashboardProvider({ config, children }: DashboardProviderProps) {\n const value = useMemo<DashboardContextValue>(() => {\n const mergedConfig = {\n ...defaultConfig,\n ...config,\n branding: { ...defaultConfig.branding, ...config.branding },\n routes: { ...defaultRoutes, ...config.routes },\n customRoutes: config.customRoutes ?? [],\n theme: { ...defaultConfig.theme, ...config.theme },\n identity: { ...defaultIdentity, ...config.identity },\n sidebarAd: config.sidebarAd,\n planConfig: config.planConfig,\n }\n\n return {\n config: mergedConfig,\n routes: mergedConfig.routes,\n customRoutes: mergedConfig.customRoutes,\n basePath: mergedConfig.basePath,\n }\n }, [config])\n\n // Apply theme preset and mode via @mdxui/themes store\n useThemeLoader(value.config.theme.preset, value.config.theme.mode)\n\n // Apply custom CSS variable overrides on top of the theme preset\n useCustomThemeVariables(value.config.theme.custom)\n\n return <DashboardContext.Provider value={value}>{children}</DashboardContext.Provider>\n}\n\nexport function useDashboard() {\n const context = useContext(DashboardContext)\n if (!context) {\n throw new Error('useDashboard must be used within a DashboardProvider')\n }\n return context\n}\n\nexport function useRoutes() {\n const { routes } = useDashboard()\n return routes\n}\n\nexport function useCustomRoutes() {\n const { customRoutes } = useDashboard()\n return customRoutes\n}\n","import { useThemeStore } from '@mdxui/themes'\nimport { useEffect, useRef } from 'react'\n\n/**\n * Hook that applies a theme preset to the document via @mdxui/themes store.\n * Initializes the store on first mount and syncs preset from config.\n */\nexport function useThemeLoader(preset: string | undefined, mode?: 'light' | 'dark' | 'system') {\n const { setPreset, setMode, initialize } = useThemeStore()\n const initializedRef = useRef(false)\n\n // Initialize theme store once (sets up system preference listener)\n useEffect(() => {\n if (!initializedRef.current) {\n initialize()\n initializedRef.current = true\n }\n }, [initialize])\n\n // Sync preset from config\n useEffect(() => {\n if (preset) {\n setPreset(preset as Parameters<typeof setPreset>[0])\n }\n }, [preset, setPreset])\n\n // Sync mode from config\n useEffect(() => {\n if (mode) {\n setMode(mode)\n }\n }, [mode, setMode])\n}\n\n/**\n * Hook that applies custom CSS variable overrides.\n * These override the theme preset values.\n */\nexport function useCustomThemeVariables(custom: Record<string, string> | undefined) {\n useEffect(() => {\n if (!custom || Object.keys(custom).length === 0) {\n return\n }\n\n const root = document.documentElement\n const previousValues: Record<string, string> = {}\n\n // Apply custom variables\n for (const [key, value] of Object.entries(custom)) {\n previousValues[key] = root.style.getPropertyValue(key)\n root.style.setProperty(key, value)\n }\n\n // Cleanup: restore previous values\n return () => {\n for (const [key, value] of Object.entries(previousValues)) {\n if (value) {\n root.style.setProperty(key, value)\n } else {\n root.style.removeProperty(key)\n }\n }\n }\n }, [custom])\n}\n","import type React from 'react'\nimport type { LucideIcon } from 'lucide-react'\nimport type { ReactNode } from 'react'\nimport type { Theme } from '@mdxui/themes'\nimport type { OnboardingGateCallbacks } from '../onboarding-gate'\nimport type { MessageType, ReportIssueData, ReportIssueSeverity, SeverityOption } from '@mdxui/widgets'\nimport type { PlanConfig } from '../components/billing/plan-config'\nimport type { SidebarAdProps } from '../components/ui/sidebar-ad'\n\n/**\n * Custom route definition for extending the dashboard with additional pages.\n * Allows consumers to add their own pages without modifying the cockpit package.\n */\nexport interface CustomRoute {\n /** URL path (e.g., '/pipeline', '/analytics') */\n path: string\n /** Display label in sidebar navigation */\n label: string\n /** Lucide icon component for sidebar */\n icon?: LucideIcon\n /** React element to render for this route */\n element: ReactNode\n /**\n * Navigation group placement:\n * - 'main' (default): Primary navigation section\n * - 'secondary': Below main nav, before settings\n * - 'admin': Admin/settings section at bottom\n */\n group?: 'main' | 'secondary' | 'admin'\n /** Sort order within group (lower = higher in list) */\n order?: number\n /** Make this route the index/home page */\n index?: boolean\n}\n\nexport interface DashboardRoutes {\n overview?: boolean\n events?: boolean\n keys?: boolean\n settings?: boolean\n webhooks?: boolean\n database?: boolean\n integrations?: boolean\n vault?: boolean\n}\n\nexport interface DashboardBranding {\n name?: string\n logo?: ReactNode\n}\n\nexport interface DashboardTheme {\n /**\n * Theme preset name. Built-in presets include:\n * 'cyan', 'anthropic', 'linear', 'stripe', 'arc', 'airbnb', 'bubblegum',\n * 'mono', 'notation', 'polaris', 'sage', 'x'\n *\n * You can also pass a custom string if you're loading your own theme CSS.\n */\n preset?: Theme\n mode?: 'light' | 'dark' | 'system'\n /** Custom CSS variable overrides (e.g., { '--primary': 'oklch(0.6 0.2 240)' }) */\n custom?: Record<string, string>\n}\n\n/**\n * Identity provider configuration for authentication and user management.\n * Powered by id.org.ai\n */\nexport interface DashboardIdentity {\n /** Client ID from identity provider dashboard */\n clientId: string\n /** Custom authentication domain (optional - if not set, use devMode) */\n apiHostname?: string\n /** Enable dev mode - stores refresh token in localStorage instead of secure cookie */\n devMode?: boolean\n /** Redirect URI after sign-in (defaults to current origin + basePath) */\n redirectUri?: string\n /** Redirect URI after sign-out (defaults to current origin) */\n signOutRedirectUri?: string\n /** Use mock widgets instead of real identity widgets (for demos/development) */\n useMockWidgets?: boolean\n /** Whether authentication is required to view the dashboard (default: true) */\n required?: boolean\n /** What to do when user is not authenticated */\n onUnauthenticated?: 'redirect' | 'landing' | 'allow' | 'signIn'\n /** URL to redirect to when not authenticated (used with onUnauthenticated: 'redirect') */\n unauthenticatedRedirectUrl?: string\n /** Custom landing component to show when not authenticated (used with onUnauthenticated: 'landing') */\n landingComponent?: ReactNode\n}\n\nexport interface ReportIssueConfig {\n topics?: string[]\n severityOptions?: SeverityOption[]\n defaultTab?: MessageType\n defaultValues?: { message?: string; topic?: string; severity?: ReportIssueSeverity }\n onSubmit?: (data: ReportIssueData) => Promise<void> | void\n apiEndpoint?: string\n apiHeaders?: Record<string, string>\n successMessage?: string\n context?: Record<string, unknown>\n}\n\nexport interface DashboardEventsConfig {\n /** Restrict which channels appear in the events log filter. Omit to show all. */\n availableChannels?: ('worker' | 'action' | 'webhook' | 'trace' | 'log' | 'llm' | 'cdc')[]\n}\n\nexport interface DashboardConfig {\n basePath?: string\n branding?: DashboardBranding\n routes?: DashboardRoutes\n /**\n * Custom routes to add to the dashboard.\n * These will be rendered alongside built-in routes and appear in sidebar navigation.\n */\n customRoutes?: CustomRoute[]\n theme?: DashboardTheme\n /** Identity provider configuration for authentication and user management */\n identity: DashboardIdentity\n /**\n * Sidebar promotional banner configuration.\n * Pass props to show a SidebarAd, or omit/pass false to hide it.\n */\n sidebarAd?: SidebarAdProps | false\n /** Events log page configuration (e.g. restrict available channels) */\n events?: DashboardEventsConfig | undefined\n /**\n * Report Issue sidebar button configuration.\n * Pass config object to customize, omit to show with defaults, or `false` to hide.\n */\n reportIssue?: ReportIssueConfig | false\n /** Component rendered during onboarding. If provided, OnboardingGate wraps the dashboard. */\n onboardingComponent?: React.ComponentType<OnboardingGateCallbacks>\n /** Plan configuration for billing. Defines available plans and feature comparison. */\n planConfig?: PlanConfig\n}\n\n// Default values\nexport const defaultRoutes: Required<DashboardRoutes> = {\n overview: true,\n events: true,\n keys: true,\n settings: true,\n webhooks: true,\n database: true,\n integrations: false,\n vault: false,\n}\n\nexport const defaultIdentity: Omit<DashboardIdentity, 'clientId'> = {\n devMode: false,\n useMockWidgets: false,\n required: true,\n onUnauthenticated: 'landing',\n}\n\nexport const defaultConfig: Omit<Required<DashboardConfig>, 'identity' | 'sidebarAd' | 'events' | 'reportIssue' | 'onboardingComponent' | 'planConfig'> = {\n basePath: '/',\n branding: {\n name: 'Dashboard',\n logo: undefined,\n },\n routes: defaultRoutes,\n customRoutes: [],\n theme: {\n preset: 'dev',\n mode: 'system',\n custom: {},\n },\n}\n","import * as LucideIcons from 'lucide-react'\nimport type { LucideIcon } from 'lucide-react'\n\n/**\n * Maps a Lucide icon name string to the actual icon component.\n * Used to convert mdxui's string-based icon references to LucideIcon components.\n *\n * @example\n * ```ts\n * const icon = getIconByName('BarChart3') // returns BarChart3 component\n * const icon = getIconByName('Settings') // returns Settings component\n * ```\n */\nexport function getIconByName(name: string): LucideIcon | undefined {\n const icons = LucideIcons as unknown as Record<string, LucideIcon | unknown>\n const icon = icons[name]\n // Icons may be functions (class components) or objects (forwardRef components)\n if (icon && (typeof icon === 'function' || typeof icon === 'object')) {\n return icon as LucideIcon\n }\n return undefined\n}\n\n/**\n * Common dashboard icons for quick reference.\n * These are the icons most commonly used in DeveloperDashboard navigation.\n */\nexport const dashboardIcons = {\n overview: 'BarChart3',\n requests: 'Activity',\n keys: 'Key',\n settings: 'Settings',\n webhooks: 'Webhook',\n database: 'Database',\n integrations: 'Puzzle',\n vault: 'Lock',\n} as const\n","import type { LucideIcon } from 'lucide-react'\nimport type { CustomRoute, DashboardRoutes } from '../types/config'\nimport type { NavSubItem, RouteDefinition } from './types'\n\nexport interface NavItem {\n title: string\n url: string\n icon?: LucideIcon\n isActive?: boolean\n items?: NavItem[]\n subItemsClassName?: string\n}\n\n/**\n * Ensure a path has a leading slash.\n */\nfunction ensureLeadingSlash(path: string): string {\n return path.startsWith('/') ? path : `/${path}`\n}\n\n/**\n * Build NavItem[] for the sidebar from route definitions, config flags, custom routes,\n * pre-resolved sub-items, and an icon resolver.\n *\n * Ordering: main built-in -> main custom -> secondary custom -> admin built-in -> admin custom\n */\nexport function buildNavItems(\n definitions: RouteDefinition[],\n routes: Required<DashboardRoutes>,\n customRoutes: CustomRoute[],\n subItemsMap: Record<string, { items: NavSubItem[]; className?: string }>,\n getIcon: (name: string) => LucideIcon | undefined,\n): NavItem[] {\n // Sort custom routes by order within each group\n const sortedCustomRoutes = [...customRoutes].sort((a, b) => (a.order ?? 100) - (b.order ?? 100))\n\n const mainCustom = sortedCustomRoutes.filter((r) => r.group === 'main' || r.group === undefined)\n const secondaryCustom = sortedCustomRoutes.filter((r) => r.group === 'secondary')\n const adminCustom = sortedCustomRoutes.filter((r) => r.group === 'admin')\n\n // Split definitions by group\n const mainDefs = definitions.filter((d) => routes[d.key] && (d.group === 'main' || d.group === undefined))\n const adminDefs = definitions.filter((d) => routes[d.key] && d.group === 'admin')\n\n const items: NavItem[] = []\n\n // Helper: convert a definition to a NavItem\n function defToNavItem(def: RouteDefinition): NavItem {\n const url = def.path ? ensureLeadingSlash(def.path) : '/'\n const item: NavItem = {\n title: def.label,\n url,\n icon: getIcon(def.icon),\n }\n\n // Children from definition\n if (def.children && def.children.length > 0) {\n item.items = def.children.map((child) => ({\n title: child.label,\n url: `/${def.path}/${child.path}`,\n }))\n }\n\n // Dynamic sub-items from subItemsMap (override children if present)\n const subItems = subItemsMap[def.key]\n if (subItems && subItems.items.length > 0) {\n item.items = subItems.items.map((si) => ({\n title: si.title,\n url: si.url,\n }))\n if (subItems.className) {\n item.subItemsClassName = subItems.className\n }\n }\n\n return item\n }\n\n // Helper: convert custom route to NavItem\n function customToNavItem(route: CustomRoute): NavItem {\n return {\n title: route.label,\n url: ensureLeadingSlash(route.path),\n icon: route.icon,\n }\n }\n\n // main built-in\n for (const def of mainDefs) {\n items.push(defToNavItem(def))\n }\n\n // main custom\n for (const route of mainCustom) {\n items.push(customToNavItem(route))\n }\n\n // secondary custom\n for (const route of secondaryCustom) {\n items.push(customToNavItem(route))\n }\n\n // admin built-in\n for (const def of adminDefs) {\n items.push(defToNavItem(def))\n }\n\n // admin custom\n for (const route of adminCustom) {\n items.push(customToNavItem(route))\n }\n\n return items\n}\n","import type { RouteConfig } from '@mdxui/navigation/types'\nimport type { CustomRoute, DashboardRoutes } from '../types/config'\nimport type { RouteDefinition } from './types'\n\n/**\n * Capitalize the first letter of a string.\n * 'profile' -> 'Profile'\n */\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1)\n}\n\n/**\n * Build a flat TanStack RouteConfig from route definitions, config flags, and custom routes.\n *\n * Key behaviors:\n * - Filters definitions by `routes[def.key]` (only enabled routes included)\n * - Index routes get `index: true` with no path\n * - Routes with `redirectToFirstChild` produce a parent redirect + flat child entries\n * - `additionalRoutes` are added as flat siblings keyed by normalized path\n * - Custom routes use `custom_{normalizedPath}` keys\n * - A fallback route with `path: '$'` is always appended\n */\nexport function buildRouteConfig(\n definitions: RouteDefinition[],\n routes: Required<DashboardRoutes>,\n customRoutes: CustomRoute[],\n createRedirect?: (to: string) => React.ComponentType<any>,\n fallbackComponent?: React.ComponentType<any>,\n): RouteConfig {\n const children: RouteConfig = {}\n\n for (const def of definitions) {\n // Skip disabled routes\n if (!routes[def.key]) continue\n\n if (def.children && def.redirectToFirstChild) {\n // Parent redirect entry: e.g. settingsRedirect\n const firstChildPath = `/${def.path}/${def.children[0].path}`\n const redirectComponent = createRedirect ? createRedirect(firstChildPath) : ((() => null) as React.ComponentType<any>)\n children[`${def.key}Redirect`] = {\n path: def.path,\n component: redirectComponent,\n }\n\n // Flat child entries: e.g. settingsProfile, settingsSecurity\n for (const child of def.children) {\n const childKey = `${def.key}${capitalize(child.path)}`\n children[childKey] = {\n path: `${def.path}/${child.path}`,\n component: child.component,\n }\n }\n } else if (def.index) {\n // Index route: no path, index: true\n children[def.key] = {\n index: true,\n component: def.component,\n }\n } else {\n // Simple route\n children[def.key] = {\n path: def.path,\n component: def.component,\n }\n }\n\n // Additional routes (e.g. database/$slug)\n if (def.additionalRoutes) {\n for (const additional of def.additionalRoutes) {\n const routeKey = additional.path.replace(/\\//g, '_')\n children[routeKey] = {\n path: additional.path,\n component: additional.component,\n }\n }\n }\n }\n\n // Custom routes\n for (const route of customRoutes) {\n const path = route.path.startsWith('/') ? route.path.slice(1) : route.path\n const routeKey = `custom_${path.replace(/\\//g, '_')}`\n\n children[routeKey] = {\n path: route.index ? undefined : path,\n index: route.index,\n component: (() => route.element) as React.ComponentType<any>,\n }\n }\n\n // Fallback route\n children.fallback = {\n path: '$',\n component: fallbackComponent ?? ((() => null) as React.ComponentType<any>),\n }\n\n return children\n}\n","import { UserProfile, UserSecurity, UserSessions } from '@mdxui/auth'\nimport { Separator } from '@mdxui/primitives/separator'\nimport { type ReactNode, useEffect, useRef, useState } from 'react'\nimport { SettingsLayout } from '../../components/layout/settings-layout'\nimport { WidgetSlot } from '../../components/settings'\nimport { MockAuthenticationFactors, MockUserProfile, MockUserSessions } from '../../components/widgets'\nimport { useDashboard } from '../../context/dashboard-context'\nimport { useAuth } from '@mdxui/auth'\n\n// --- Helpers ---\n\n/** Extract the `sid` claim from a JWT access token. */\nfunction getSessionId(token: string): string {\n try {\n return JSON.parse(atob(token.split('.')[1])).sid ?? ''\n } catch {\n return ''\n }\n}\n\n// --- Layout Components ---\n\nfunction AccountSection({ title, description, children }: { title: string; description: string; children: ReactNode }) {\n return (\n <section className='grid grid-cols-1 gap-x-14 gap-y-8 md:grid-cols-3'>\n <div>\n <h2 className='font-semibold text-foreground'>{title}</h2>\n <p className='mt-1 text-sm leading-6 text-muted-foreground'>{description}</p>\n </div>\n <div className='md:col-span-2'>{children}</div>\n </section>\n )\n}\n\n// --- Section Widgets ---\n\n/** Security widget with empty-state detection for providers that don't support MFA. */\nfunction SecurityWidget({ token }: { token: string }) {\n const [isEmpty, setIsEmpty] = useState(false)\n const containerRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n const timer = setTimeout(() => {\n if (containerRef.current) {\n const content = containerRef.current.textContent?.trim()\n const hasVisibleContent = containerRef.current.querySelector('button, input, [role=\"button\"]')\n if (!content && !hasVisibleContent) setIsEmpty(true)\n }\n }, 1000)\n return () => clearTimeout(timer)\n }, [])\n\n if (isEmpty) {\n return (\n <div className='flex items-center justify-center rounded-[var(--radius-md)] border border-dashed py-24'>\n <p className='text-muted-foreground text-sm'>No security options are currently available for your account.</p>\n </div>\n )\n }\n\n return (\n <div ref={containerRef}>\n <UserSecurity authToken={token} />\n </div>\n )\n}\n\n// --- Page ---\n\nexport function SettingsAccountPage() {\n const { config } = useDashboard()\n const useMockWidgets = config.identity?.useMockWidgets ?? false\n const { user, accessToken: token, isLoading: loading } = useAuth()\n const ready = !!user && !!token\n\n const slotProps = { useMockWidgets, loading, ready }\n\n return (\n <SettingsLayout>\n <div className='space-y-10'>\n <AccountSection title='Profile' description='Manage your personal information and preferences.'>\n <WidgetSlot {...slotProps} mock={<MockUserProfile />} signInMessage='Please sign in to view your profile.'>\n {token && <UserProfile authToken={token} />}\n </WidgetSlot>\n </AccountSection>\n\n <Separator />\n\n <AccountSection title='Security' description='Manage your password, two-factor authentication, and recovery codes.'>\n <WidgetSlot {...slotProps} mock={<MockAuthenticationFactors />} signInMessage='Please sign in to view security settings.'>\n {token && <SecurityWidget token={token} />}\n </WidgetSlot>\n </AccountSection>\n\n <Separator />\n\n <AccountSection title='Sessions' description='View and manage your active sessions across devices.'>\n <WidgetSlot {...slotProps} mock={<MockUserSessions />} signInMessage='Please sign in to view your sessions.'>\n {token && <UserSessions authToken={token} currentSessionId={getSessionId(token)} />}\n </WidgetSlot>\n </AccountSection>\n </div>\n </SettingsLayout>\n )\n}\n","import { WebLink, useWebLocation } from '@mdxui/navigation/web'\nimport { cn } from '@mdxui/primitives/lib/utils'\n\nconst tabs = [\n { label: 'Account', path: 'settings/account' },\n { label: 'Billing & Usage', path: 'settings/billing' },\n { label: 'Users', path: 'settings/users' },\n] as const\n\nexport function SettingsLayout({ children }: { children: React.ReactNode }) {\n const { pathname } = useWebLocation()\n\n return (\n <div className='mx-auto w-full max-w-7xl flex-1 overflow-y-auto scrollbar-thin px-4'>\n <div className='sticky top-0 z-10 -mx-4 bg-background px-4'>\n <h1 className='pt-4 pb-10 text-2xl font-semibold tracking-tight'>Settings</h1>\n <nav className='text-muted-foreground inline-flex w-full items-center gap-4 border-b border-border bg-transparent p-0'>\n {tabs.map((tab) => {\n const isActive = pathname.includes(tab.path) || (tab.path === 'settings/account' && pathname.endsWith('/settings'))\n return (\n <WebLink\n key={tab.path}\n to={`/${tab.path}`}\n className={cn(\n 'inline-flex items-center gap-1.5 border-b-2 px-1 pb-2 pt-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\"size-\"])]:size-4',\n isActive ? 'text-foreground border-primary' : 'text-muted-foreground hover:text-foreground border-transparent',\n )}\n >\n {tab.label}\n </WebLink>\n )\n })}\n </nav>\n </div>\n <div className='pt-6'>{children}</div>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\n\nexport interface WidgetGate {\n /** Condition that must be true to pass this gate */\n pass: boolean\n /** Message shown when the gate blocks rendering */\n message: string\n}\n\n/** Handles the mock → loading → sign-in → gates → ready rendering states for widget sections. */\nexport function WidgetSlot({\n useMockWidgets,\n loading,\n ready,\n mock,\n signInMessage,\n gates,\n children,\n}: {\n useMockWidgets: boolean\n loading: boolean\n ready: boolean\n mock: ReactNode\n signInMessage: string\n /** Optional ordered permission/org gates checked after auth, before rendering children */\n gates?: WidgetGate[]\n children: ReactNode\n}) {\n if (useMockWidgets) return <>{mock}</>\n if (loading) return <div className='flex items-center justify-center py-12 text-muted-foreground'>Loading...</div>\n if (!ready) {\n return (\n <div className='flex items-center justify-center rounded-[var(--radius-md)] border border-dashed py-24'>\n <p className='text-muted-foreground text-sm'>{signInMessage}</p>\n </div>\n )\n }\n if (gates) {\n for (const gate of gates) {\n if (!gate.pass) {\n return (\n <div className='flex items-center justify-center rounded-[var(--radius-md)] border border-dashed py-24'>\n <p className='text-muted-foreground text-sm'>{gate.message}</p>\n </div>\n )\n }\n }\n }\n return <>{children}</>\n}\n","/**\n * Mock Identity Widgets for development/demo mode\n *\n * These components render placeholder UI when the identity provider is not configured\n * or when running in devMode without valid credentials.\n */\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@mdxui/primitives/avatar'\nimport { Badge } from '@mdxui/primitives/badge'\nimport { Button } from '@mdxui/primitives/button'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@mdxui/primitives/card'\nimport { Input } from '@mdxui/primitives/input'\nimport { Label } from '@mdxui/primitives/label'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@mdxui/primitives/table'\nimport { Mail, MoreHorizontal, Plus, Shield, User } from 'lucide-react'\n\n// Mock data\nconst mockUsers = [\n { id: '1', name: 'John Doe', email: 'john@example.com.ai', role: 'Admin', avatar: '', status: 'Active' },\n { id: '2', name: 'Jane Smith', email: 'jane@example.com.ai', role: 'Member', avatar: '', status: 'Active' },\n { id: '3', name: 'Bob Johnson', email: 'bob@example.com.ai', role: 'Member', avatar: '', status: 'Pending' },\n]\n\nconst mockSessions = [\n { id: '1', device: 'Chrome on macOS', location: 'San Francisco, CA', lastActive: 'Now', current: true },\n { id: '2', device: 'Safari on iPhone', location: 'New York, NY', lastActive: '2 hours ago', current: false },\n { id: '3', device: 'Firefox on Windows', location: 'London, UK', lastActive: '1 day ago', current: false },\n]\n\n/**\n * Mock UsersManagement widget\n */\nexport function MockUsersManagement() {\n return (\n <Card>\n <CardHeader className='flex flex-row items-center justify-between'>\n <div>\n <CardTitle>Team Members</CardTitle>\n <CardDescription>Manage your team members and their roles</CardDescription>\n </div>\n <Button size='sm'>\n <Plus className='mr-2 h-4 w-4' />\n Invite Member\n </Button>\n </CardHeader>\n <CardContent>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>User</TableHead>\n <TableHead>Role</TableHead>\n <TableHead>Status</TableHead>\n <TableHead className='w-[50px]' />\n </TableRow>\n </TableHeader>\n <TableBody>\n {mockUsers.map((user) => (\n <TableRow key={user.id}>\n <TableCell>\n <div className='flex items-center gap-3'>\n <Avatar className='h-8 w-8'>\n <AvatarImage src={user.avatar} />\n <AvatarFallback>\n {user.name\n .split(' ')\n .map((n) => n[0])\n .join('')}\n </AvatarFallback>\n </Avatar>\n <div>\n <div className='font-medium'>{user.name}</div>\n <div className='text-sm text-muted-foreground'>{user.email}</div>\n </div>\n </div>\n </TableCell>\n <TableCell>\n <Badge variant={user.role === 'Admin' ? 'default' : 'secondary'}>{user.role}</Badge>\n </TableCell>\n <TableCell>\n <Badge variant={user.status === 'Active' ? 'outline' : 'secondary'}>{user.status}</Badge>\n </TableCell>\n <TableCell>\n <Button variant='ghost' size='icon'>\n <MoreHorizontal className='h-4 w-4' />\n </Button>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n <p className='mt-4 text-center text-sm text-muted-foreground'>\n This is mock data. Connect your identity provider to manage real team members.\n </p>\n </CardContent>\n </Card>\n )\n}\n\n/**\n * Mock UserProfile widget\n */\nexport function MockUserProfile() {\n return (\n <div className='space-y-6'>\n <Card>\n <CardHeader>\n <CardTitle className='flex items-center gap-2'>\n <User className='h-5 w-5' />\n Personal Information\n </CardTitle>\n <CardDescription>Update your personal details</CardDescription>\n </CardHeader>\n <CardContent className='space-y-4'>\n <div className='flex items-center gap-4'>\n <Avatar className='h-16 w-16'>\n <AvatarFallback>JD</AvatarFallback>\n </Avatar>\n <Button variant='outline' size='sm'>\n Change Avatar\n </Button>\n </div>\n <div className='grid gap-4 sm:grid-cols-2'>\n <div className='space-y-2'>\n <Label htmlFor='firstName'>First Name</Label>\n <Input id='firstName' defaultValue='John' />\n </div>\n <div className='space-y-2'>\n <Label htmlFor='lastName'>Last Name</Label>\n <Input id='lastName' defaultValue='Doe' />\n </div>\n </div>\n <div className='space-y-2'>\n <Label htmlFor='email'>Email</Label>\n <Input id='email' type='email' defaultValue='john@example.com.ai' disabled />\n </div>\n <Button>Save Changes</Button>\n </CardContent>\n </Card>\n <p className='text-center text-sm text-muted-foreground'>\n This is mock data. Connect your identity provider to manage your real profile.\n </p>\n </div>\n )\n}\n\n/**\n * Mock AuthenticationFactors widget\n */\nexport function MockAuthenticationFactors() {\n return (\n <div className='space-y-6'>\n <Card>\n <CardHeader>\n <CardTitle className='flex items-center gap-2'>\n <Shield className='h-5 w-5' />\n Two-Factor Authentication\n </CardTitle>\n <CardDescription>Add an extra layer of security to your account</CardDescription>\n </CardHeader>\n <CardContent className='space-y-4'>\n <div className='flex items-center justify-between rounded-lg border p-4'>\n <div className='flex items-center gap-3'>\n <div className='flex h-10 w-10 items-center justify-center rounded-full bg-muted'>\n <Mail className='h-5 w-5' />\n </div>\n <div>\n <div className='font-medium'>Authenticator App</div>\n <div className='text-sm text-muted-foreground'>Not configured</div>\n </div>\n </div>\n <Button variant='outline' size='sm'>\n Set Up\n </Button>\n </div>\n <div className='flex items-center justify-between rounded-lg border p-4'>\n <div className='flex items-center gap-3'>\n <div className='flex h-10 w-10 items-center justify-center rounded-full bg-muted'>\n <Mail className='h-5 w-5' />\n </div>\n <div>\n <div className='font-medium'>SMS Authentication</div>\n <div className='text-sm text-muted-foreground'>Not configured</div>\n </div>\n </div>\n <Button variant='outline' size='sm'>\n Set Up\n </Button>\n </div>\n </CardContent>\n </Card>\n <p className='text-center text-sm text-muted-foreground'>\n This is mock data. Connect your identity provider to manage security settings.\n </p>\n </div>\n )\n}\n\n/**\n * Mock ApiKeys widget\n */\nexport function MockApiKeys() {\n const mockKeys = [\n { id: '1', name: 'Production Key', key: 'sk_live_abc123def456ghi789jkl012', status: 'Active', created: '2024-10-15' },\n { id: '2', name: 'Development Key', key: 'sk_test_xyz789abc123def456ghi012', status: 'Active', created: '2024-11-01' },\n { id: '3', name: 'CI/CD Pipeline', key: 'sk_live_mno345pqr678stu901vwx234', status: 'Never used', created: '2024-11-10' },\n ]\n\n return (\n <Card>\n <CardHeader className='flex flex-row items-center justify-between'>\n <div>\n <CardTitle>API Keys</CardTitle>\n <CardDescription>Manage your API keys for accessing the API</CardDescription>\n </div>\n <Button size='sm'>\n <Plus className='mr-2 h-4 w-4' />\n Create Key\n </Button>\n </CardHeader>\n <CardContent>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Name</TableHead>\n <TableHead>Key</TableHead>\n <TableHead>Status</TableHead>\n <TableHead>Created</TableHead>\n <TableHead className='w-[50px]' />\n </TableRow>\n </TableHeader>\n <TableBody>\n {mockKeys.map((key) => (\n <TableRow key={key.id}>\n <TableCell className='font-medium'>{key.name}</TableCell>\n <TableCell className='font-mono text-sm text-muted-foreground'>\n {key.key.substring(0, 8)}\n {'•'.repeat(16)}\n </TableCell>\n <TableCell>\n <Badge variant={key.status === 'Active' ? 'outline' : 'secondary'}>{key.status}</Badge>\n </TableCell>\n <TableCell>{key.created}</TableCell>\n <TableCell>\n <Button variant='ghost' size='icon'>\n <MoreHorizontal className='h-4 w-4' />\n </Button>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n <p className='mt-4 text-center text-sm text-muted-foreground'>This is mock data. Connect your identity provider to manage real API keys.</p>\n </CardContent>\n </Card>\n )\n}\n\n/**\n * Mock UserSessions widget\n */\nexport function MockUserSessions() {\n return (\n <div className='space-y-6'>\n <Card>\n <CardHeader>\n <CardTitle>Active Sessions</CardTitle>\n <CardDescription>Manage your active sessions across devices</CardDescription>\n </CardHeader>\n <CardContent>\n <div className='space-y-4'>\n {mockSessions.map((session) => (\n <div key={session.id} className='flex items-center justify-between rounded-lg border p-4'>\n <div>\n <div className='flex items-center gap-2'>\n <span className='font-medium'>{session.device}</span>\n {session.current && (\n <Badge variant='secondary' className='text-xs'>\n Current\n </Badge>\n )}\n </div>\n <div className='text-sm text-muted-foreground'>\n {session.location} · {session.lastActive}\n </div>\n </div>\n {!session.current && (\n <Button variant='outline' size='sm'>\n Revoke\n </Button>\n )}\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n <p className='text-center text-sm text-muted-foreground'>\n This is mock data. Connect your identity provider to manage real sessions.\n </p>\n </div>\n )\n}\n","import { useUsageData } from '@mdxui/admin/usage-overview'\nimport type { UsagePeriod } from '@mdxui/admin/usage-overview'\nimport type { BalanceUnit } from '@mdxui/admin/usage-overview'\nimport { Button } from '@mdxui/primitives/button'\nimport { Progress } from '@mdxui/primitives/progress'\nimport { Skeleton } from '@mdxui/primitives/skeleton'\nimport { useState } from 'react'\nimport { PlanPickerModal } from '../../components/billing/plan-picker-modal'\nimport { SettingsLayout } from '../../components/layout/settings-layout'\nimport { useDashboard } from '../../context/dashboard-context'\nimport { useBillingUsage } from '../../hooks/use-billing'\nimport { useAuth } from '@mdxui/auth'\n\nconst PLAN_FEATURES_SHORT: Record<string, string[]> = {\n free: ['10 credits / mo', '10K API requests', '10K records'],\n grow: ['20,000 credits / mo', '500K API requests', '100K records'],\n scale: ['500,000 credits / mo', '10M API requests', '10M records'],\n}\n\nexport interface BillingPageProps {\n /** Period for usage data fetching */\n usagePeriod?: UsagePeriod\n /** Show the Credit Balance usage row */\n showCreditBalance?: boolean\n /** Show the API Requests usage row */\n showApiRequests?: boolean\n /** Display credit balance as dollar amounts or token counts (default: 'dollars') */\n balanceUnit?: BalanceUnit\n /** Additional CSS class for the container */\n className?: string\n // --- Props commented out: handled by Stripe Portal or not yet implemented ---\n // showPaymentMethod?: boolean // Payment method managed via Stripe Portal (\"Manage Billing\" button)\n // showBillingAlerts?: boolean // Billing alerts not yet implemented — needs org-level settings\n // showInvoiceHistory?: boolean // Invoice history managed via Stripe Portal (\"Manage Billing\" button)\n // billingData?: BillingStaticData // Removed — real data from /billing/usage replaces mock data\n // onUpdatePaymentMethod?: () => Promise<void> // Stripe Portal handles this\n // onDownloadInvoice?: (invoiceId: string) => Promise<void> // Stripe Portal handles this\n // onToggleAlerts?: (enabled: boolean) => Promise<void> // Not yet implemented\n}\n\nfunction formatRelativeDate(dateString: string): string {\n const date = new Date(dateString)\n return date.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' })\n}\n\nfunction formatBalance(value: number, unit: BalanceUnit): string {\n if (unit === 'tokens') return value.toLocaleString()\n return `$${value.toFixed(2)}`\n}\n\nfunction getIndicatorColor(percentage: number): string {\n if (percentage >= 90) return '[&>[data-slot=progress-indicator]]:bg-destructive'\n if (percentage >= 75) return '[&>[data-slot=progress-indicator]]:bg-yellow-500'\n return ''\n}\n\nexport function BillingPage({\n usagePeriod = 'last30d',\n showCreditBalance = true,\n showApiRequests = true,\n balanceUnit = 'tokens',\n className,\n}: BillingPageProps = {}) {\n const { config } = useDashboard()\n const { accessToken: token, organizationId } = useAuth()\n const { data: billingUsage } = useBillingUsage()\n const [showPlanPicker, setShowPlanPicker] = useState(false)\n\n // Fetch usage analytics from ClickHouse (credit balance, requests, cost breakdown)\n const { data: usageData, loading: usageLoading } = useUsageData(usagePeriod, {\n tenant: organizationId ?? undefined,\n token,\n })\n\n const hasUsageData = usageData != null\n const creditBalance = hasUsageData ? usageData.creditBalance : null\n const totalRequests = hasUsageData ? usageData.totalRequests.value : 0\n const totalCost = hasUsageData ? usageData.costBreakdown.total : 0\n const isLoading = usageLoading && !hasUsageData\n\n // Plan data from billing API\n const planName = billingUsage?.plan?.name ?? 'free'\n const planPrice = billingUsage?.plan?.price ?? 0\n const planFeatures = PLAN_FEATURES_SHORT[planName] ?? PLAN_FEATURES_SHORT.free\n const renewsAt = billingUsage?.plan?.renewsAt\n\n // Total spend = flat fee + overage (not raw usage — included credits are free)\n const overageCost = billingUsage?.usage?.overageCost ?? 0\n const totalSpend = planPrice + overageCost\n\n const handleManageBilling = async () => {\n if (!token) return\n try {\n const res = await fetch('/billing/portal', {\n method: 'POST',\n headers: { Authorization: `Bearer ${token}`, 'x-tenant': organizationId || '' },\n })\n const data = await res.json()\n if (data.url) window.location.href = data.url\n } catch (e) {\n console.error('Portal error:', e)\n }\n }\n\n return (\n <SettingsLayout>\n <div className={`pb-4 ${className ?? ''}`}>\n {/* Billing Overview */}\n <section className='grid grid-cols-1 gap-x-14 gap-y-8 md:grid-cols-3'>\n <div>\n <h2 className='font-semibold text-foreground'>Billing</h2>\n <p className='mt-1 text-sm leading-6 text-muted-foreground'>\n Overview of current billing cycle based on fixed and on-demand charges.\n </p>\n </div>\n <div className='md:col-span-2'>\n <ul className='w-full divide-y divide-border border-b border-border'>\n {/* Plan line item */}\n <li className='px-2 py-4 text-sm md:p-4'>\n <div className='w-full'>\n <div className='flex items-center justify-between'>\n <p className='font-medium text-foreground capitalize'>{planName} plan</p>\n <p className='font-medium text-muted-foreground'>${planPrice.toFixed(2)}/mo</p>\n </div>\n <div className='w-full md:w-2/3'>\n <p className='mt-1 text-xs text-muted-foreground'>\n {planFeatures.join(' · ')}\n </p>\n </div>\n </div>\n </li>\n\n {/* Loading skeleton for usage rows */}\n {isLoading && (\n <>\n {showCreditBalance && (\n <li className='px-2 py-4 text-sm md:p-4'>\n <div className='space-y-2'>\n <div className='flex items-center justify-between'>\n <Skeleton className='h-4 w-28' />\n <Skeleton className='h-4 w-24' />\n </div>\n <Skeleton className='h-1.5 w-2/3' />\n <Skeleton className='h-3 w-48' />\n </div>\n </li>\n )}\n {showApiRequests && (\n <li className='px-2 py-4 text-sm md:p-4'>\n <div className='space-y-2'>\n <div className='flex items-center justify-between'>\n <Skeleton className='h-4 w-24' />\n <Skeleton className='h-4 w-16' />\n </div>\n <Skeleton className='h-3 w-40' />\n </div>\n </li>\n )}\n </>\n )}\n\n {/* Credit Balance (live data from ClickHouse) */}\n {!isLoading && hasUsageData && showCreditBalance && creditBalance && (\n <li className='px-2 py-4 text-sm md:p-4'>\n <div className='w-full'>\n <div className='flex items-center justify-between'>\n <p className='font-medium text-foreground'>Credit Balance</p>\n <p className='font-medium text-muted-foreground'>\n {formatBalance(creditBalance.current, balanceUnit)} remaining\n </p>\n </div>\n <div className='w-full md:w-2/3'>\n <Progress\n value={creditBalance.original > 0 ? creditBalance.percentRemaining : 0}\n className={`mt-2 h-1.5 ${getIndicatorColor(100 - creditBalance.percentRemaining)}`}\n />\n <p className='mt-1 flex items-center justify-between text-xs text-muted-foreground'>\n <span>{formatBalance(creditBalance.original - creditBalance.current, balanceUnit)} consumed</span>\n <span>{formatBalance(creditBalance.original, balanceUnit)} included</span>\n </p>\n </div>\n </div>\n </li>\n )}\n\n {/* API Requests (live data from ClickHouse) */}\n {!isLoading && hasUsageData && showApiRequests && (\n <li className='px-2 py-4 text-sm md:p-4'>\n <div className='w-full'>\n <div className='flex items-center justify-between'>\n <p className='font-medium text-foreground'>API Requests</p>\n <p className='font-medium text-muted-foreground'>{formatBalance(totalCost, balanceUnit)}</p>\n </div>\n <p className='mt-1 text-xs text-muted-foreground'>\n {totalRequests.toLocaleString()} requests this period\n </p>\n </div>\n </li>\n )}\n </ul>\n\n {/* Total row */}\n <div className='px-2 py-4 md:p-4'>\n <div className='flex items-center justify-between text-sm font-medium text-foreground'>\n <span>Total for current period</span>\n <span className='font-semibold'>\n {isLoading ? <Skeleton className='inline-block h-4 w-16' /> : formatBalance(totalSpend, balanceUnit)}\n </span>\n </div>\n <div className='mt-2 flex items-center gap-3'>\n {renewsAt && (\n <p className='text-xs text-muted-foreground'>Renews {formatRelativeDate(renewsAt)}</p>\n )}\n {config.planConfig && (\n <Button variant='outline' size='sm' className='h-8 text-sm' onClick={() => setShowPlanPicker(true)}>\n Manage Plan\n </Button>\n )}\n {billingUsage?.subscription?.stripeSubscriptionId && (\n <Button variant='outline' size='sm' className='h-8 text-sm' onClick={handleManageBilling}>\n Manage Billing\n </Button>\n )}\n </div>\n </div>\n </div>\n </section>\n </div>\n\n {config.planConfig && (\n <PlanPickerModal\n open={showPlanPicker}\n onClose={() => setShowPlanPicker(false)}\n currentPlan={planName}\n plans={config.planConfig.plans}\n features={config.planConfig.features}\n />\n )}\n </SettingsLayout>\n )\n}\n","import { PricingMatrix } from '@mdxui/neo'\nimport { useState, useEffect, useRef } from 'react'\nimport { useSwitchPlan, useCompleteOnboarding } from '../../hooks/use-billing'\nimport type { PlanDisplayConfig, PlanFeatureConfig } from './plan-config'\n\nexport interface PlanPickerModalProps {\n open: boolean\n onClose: () => void\n currentPlan: string | null // 'free' | 'grow' | 'scale' | null\n plans: PlanDisplayConfig[]\n features: PlanFeatureConfig[]\n}\n\nexport function PlanPickerModal({ open, onClose, currentPlan, plans, features }: PlanPickerModalProps) {\n const switchPlan = useSwitchPlan()\n const completeOnboarding = useCompleteOnboarding()\n const [confirmingPlan, setConfirmingPlan] = useState<string | null>(null)\n const closeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n // Cleanup timeout on unmount\n useEffect(() => {\n return () => {\n if (closeTimerRef.current) clearTimeout(closeTimerRef.current)\n }\n }, [])\n\n // Reset state when modal opens\n useEffect(() => {\n if (open) {\n setConfirmingPlan(null)\n }\n }, [open])\n\n if (!open) return null\n\n const handlePlanSelect = (planSlug: string) => {\n if (planSlug === currentPlan) return\n if (planSlug === 'free') {\n if (currentPlan && currentPlan !== 'free') {\n // Downgrade to free\n switchPlan.mutate('free', {\n onSuccess: () => {\n setConfirmingPlan('free')\n closeTimerRef.current = setTimeout(() => onClose(), 1500)\n },\n })\n } else {\n // Complete onboarding with free\n completeOnboarding.mutate(undefined, { onSuccess: () => onClose() })\n }\n } else {\n // Upgrade to paid — switchPlan handles redirect to Stripe if needed\n switchPlan.mutate(planSlug, {\n onSuccess: (data) => {\n if (!data.redirect) {\n // Direct switch (no Stripe redirect) — show confirmation\n setConfirmingPlan(planSlug)\n closeTimerRef.current = setTimeout(() => onClose(), 1500)\n }\n },\n })\n }\n }\n\n const isPending = switchPlan.isPending || completeOnboarding.isPending\n\n return (\n <div className='fixed inset-0 z-50 flex items-center justify-center bg-black/50' onClick={onClose}>\n <div\n className='relative bg-background rounded-[var(--radius)] p-6 max-w-4xl w-full mx-4 max-h-[90vh] overflow-y-auto'\n onClick={(e) => e.stopPropagation()}\n >\n <div className='flex justify-between items-center mb-4'>\n <h3 className='text-lg font-semibold'>Switch Plan</h3>\n <button onClick={onClose} className='text-muted-foreground hover:text-foreground'>\n ✕\n </button>\n </div>\n <PricingMatrix\n heading=''\n description=''\n className='py-0!'\n tiers={[\n {\n ...planProps(plans, 'free'),\n buttonText: currentPlan === 'free' ? 'Current Plan' : 'Switch to Free',\n onButtonClick: currentPlan === 'free' ? undefined : () => handlePlanSelect('free'),\n },\n {\n ...planProps(plans, 'grow'),\n buttonText: currentPlan === 'grow' ? 'Current Plan' : isPending ? 'Processing...' : 'Subscribe',\n onButtonClick: currentPlan === 'grow' ? undefined : () => handlePlanSelect('grow'),\n },\n {\n ...planProps(plans, 'scale'),\n buttonText: currentPlan === 'scale' ? 'Current Plan' : isPending ? 'Processing...' : 'Subscribe',\n onButtonClick: currentPlan === 'scale' ? undefined : () => handlePlanSelect('scale'),\n },\n ]}\n features={features.map((f) => ({ feature: f.feature, values: [f.free, f.pro, f.enterprise] }))}\n />\n {confirmingPlan && (\n <div className='absolute inset-0 flex flex-col items-center justify-center bg-background/95 rounded-[var(--radius)]'>\n <div className='flex items-center gap-2 text-lg font-semibold text-foreground'>\n <svg className='h-6 w-6 text-green-500' fill='none' viewBox='0 0 24 24' strokeWidth={2} stroke='currentColor'>\n <path strokeLinecap='round' strokeLinejoin='round' d='M4.5 12.75l6 6 9-13.5' />\n </svg>\n Switched to {confirmingPlan.charAt(0).toUpperCase() + confirmingPlan.slice(1)}\n </div>\n </div>\n )}\n </div>\n </div>\n )\n}\n\nfunction planProps(plans: PlanDisplayConfig[], slug: string) {\n const plan = plans.find((p) => p.slug === slug)!\n return {\n name: plan.name,\n description: plan.description,\n price: plan.price,\n priceDescription: plan.priceDescription,\n buttonVariant: plan.buttonVariant as 'default' | 'outline' | undefined,\n }\n}\n","import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'\nimport { useAuth } from '@mdxui/auth'\n\n// ── Types ───────────────────────────────────────────────────────────────────\n\nexport interface BillingUsage {\n plan: { name: string | null; includedCredits: number; price: number; renewsAt: string | null }\n usage: { used: number; included: number; overage: number; overageCost: number }\n subscription: { status: string; stripeSubscriptionId: string | null }\n hasCompletedOnboarding: boolean\n}\n\n// ── API helpers ─────────────────────────────────────────────────────────────\n\nasync function billingFetch<T>(path: string, token: string, orgId: string, init?: RequestInit): Promise<T> {\n const res = await fetch(path, {\n ...init,\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n 'x-tenant': orgId,\n ...init?.headers,\n },\n })\n if (!res.ok) {\n const body = await res.json().catch(() => ({ error: res.statusText }))\n throw new Error((body as { error?: string }).error || res.statusText)\n }\n return res.json()\n}\n\n// ── Hooks ───────────────────────────────────────────────────────────────────\n\n/**\n * Fetch billing usage and onboarding status for the current org.\n */\nexport function useBillingUsage() {\n const { accessToken: token, organizationId } = useAuth()\n\n return useQuery<BillingUsage>({\n queryKey: ['billing', 'usage', organizationId],\n queryFn: () => billingFetch<BillingUsage>('/billing/usage', token!, organizationId!),\n enabled: !!token && !!organizationId,\n })\n}\n\n/**\n * Complete onboarding with the Free plan.\n * Sets hasCompletedOnboarding: true on the org.\n */\nexport function useCompleteOnboarding() {\n const { accessToken: token, organizationId } = useAuth()\n const queryClient = useQueryClient()\n\n return useMutation<{ ok: boolean; plan: string }, Error>({\n mutationFn: () =>\n billingFetch<{ ok: boolean; plan: string }>('/billing/complete-onboarding', token!, organizationId!, {\n method: 'POST',\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['billing', 'usage', organizationId] })\n },\n })\n}\n\n/**\n * Start a Stripe Checkout session for a paid plan.\n * Returns a URL to redirect to.\n */\nexport function useCheckout() {\n const { accessToken: token, organizationId } = useAuth()\n\n return useMutation<{ url: string }, Error, string>({\n mutationFn: (planName: string) =>\n billingFetch<{ url: string }>('/billing/checkout', token!, organizationId!, {\n method: 'POST',\n body: JSON.stringify({ planName }),\n }),\n onSuccess: (data) => {\n if (data.url) {\n window.location.href = data.url\n }\n },\n })\n}\n\n/**\n * Switch to a different plan.\n * If the API returns redirect: true, starts a Stripe Checkout session.\n * Otherwise invalidates billing queries to refresh usage.\n */\nexport function useSwitchPlan() {\n const { accessToken: token, organizationId } = useAuth()\n const queryClient = useQueryClient()\n const checkout = useCheckout()\n\n return useMutation<{ plan?: string; status?: string; redirect?: boolean }, Error, string>({\n mutationFn: async (planName: string) => {\n const result = await billingFetch<{ plan?: string; status?: string; redirect?: boolean }>(\n '/billing/switch-plan', token!, organizationId!, {\n method: 'POST',\n body: JSON.stringify({ planName }),\n }\n )\n // If upgrade requires Stripe checkout, trigger it\n if (result.redirect) {\n checkout.mutate(planName)\n return result\n }\n return result\n },\n onSuccess: (data) => {\n if (!data.redirect) {\n queryClient.invalidateQueries({ queryKey: ['billing', 'usage', organizationId] })\n }\n },\n })\n}\n\n/**\n * Verify a Stripe Checkout session after redirect.\n * Sets the plan and hasCompletedOnboarding on the org.\n */\nexport function useVerifyCheckout() {\n const { accessToken: token, organizationId } = useAuth()\n const queryClient = useQueryClient()\n\n return useMutation<{ plan: string; status: string }, Error, string>({\n mutationFn: (sessionId: string) =>\n billingFetch<{ plan: string; status: string }>('/billing/verify-checkout', token!, organizationId || '', {\n method: 'POST',\n body: JSON.stringify({ sessionId }),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['billing'] })\n },\n })\n}\n","import { UsersManagement } from '@mdxui/auth'\nimport { SettingsLayout } from '../../components/layout/settings-layout'\nimport { WidgetSlot } from '../../components/settings'\nimport { MockUsersManagement } from '../../components/widgets'\nimport { useDashboard } from '../../context/dashboard-context'\nimport { useAuth } from '@mdxui/auth'\n\nexport interface TeamPageProps {\n /** Whether to use mock widgets instead of real WorkOS widgets */\n useMockWidgets?: boolean\n /** Additional CSS class for the container */\n className?: string\n}\n\nexport function SettingsUsersPage({ useMockWidgets: useMockWidgetsProp, className }: TeamPageProps = {}) {\n const { config } = useDashboard()\n const useMockWidgets = config.identity?.useMockWidgets ?? useMockWidgetsProp ?? false\n const { user, accessToken: token, isLoading: loading, organizationId, permissions } = useAuth()\n const ready = !!user && !!token\n\n const hasOrganization = !!organizationId\n const canManageTeam = hasOrganization && permissions?.includes('widgets:users-table:manage')\n\n return (\n <SettingsLayout>\n <div className={`space-y-4 pb-4 ${className ?? ''}`}>\n <div>\n <h2 className='font-semibold text-foreground'>Team</h2>\n <p className='mt-1 text-sm leading-6 text-muted-foreground'>Manage your team members and their permissions.</p>\n </div>\n\n <WidgetSlot\n useMockWidgets={useMockWidgets}\n loading={!useMockWidgets && loading}\n ready={ready}\n mock={<MockUsersManagement />}\n signInMessage='Please sign in to manage your team.'\n gates={[\n { pass: hasOrganization, message: 'You need to be part of an organization to manage team members.' },\n { pass: !!canManageTeam, message: 'You need admin permissions to manage team members.' },\n ]}\n >\n {token && <UsersManagement authToken={token} />}\n </WidgetSlot>\n </div>\n </SettingsLayout>\n )\n}\n","import { useEffect, useState } from 'react'\nimport { useWebParams, useWebNavigate, useWebSearch } from '@mdxui/navigation/web'\nimport { useCollections, DataBrowser } from '@mdxui/admin/data-browser'\nimport { setBearerToken } from '@mdxui/admin/lib/payload-client'\nimport { useAuth } from '@mdxui/auth'\n\nexport function DataBrowserPage() {\n const navigate = useWebNavigate()\n const params = useWebParams()\n const search = useWebSearch()\n const slug = params.slug as string | undefined\n const recordId = search.recordId as string | undefined\n const atEventId = search.atEventId as string | undefined\n\n // Reactive token — setBearerToken must be called before DataBrowser mounts\n // because DataBrowser reads the module-level bearerToken for record fetches.\n const { user, getAccessToken } = useAuth()\n const [token, setToken] = useState<string>()\n useEffect(() => {\n if (user) {\n getAccessToken().then((t) => {\n setBearerToken(t)\n setToken(t)\n })\n }\n }, [user, getAccessToken])\n\n const { collectionsByGroup, loading } = useCollections(token)\n const crmCollections = collectionsByGroup['CRM'] ?? []\n\n // Redirect base /database to the first CRM collection\n useEffect(() => {\n if (!slug && !loading && crmCollections.length > 0) {\n navigate(`/database/${crmCollections[0].slug}`, { replace: true })\n }\n }, [slug, loading, crmCollections, navigate])\n\n const effectiveSlug = slug ?? (crmCollections.length > 0 ? crmCollections[0].slug : undefined)\n\n return (\n <div className='flex h-full flex-col'>\n <div className='flex flex-1 flex-col overflow-hidden'>\n {token && effectiveSlug ? (\n <DataBrowser\n collectionSlug={effectiveSlug}\n initialRecordId={recordId}\n initialAtEventId={atEventId}\n className='flex-1'\n />\n ) : (\n <DataBrowser\n className='flex-1'\n />\n )}\n </div>\n </div>\n )\n}\n","import { Card, CardContent } from '@mdxui/primitives/card'\nimport { Database } from 'lucide-react'\n\nexport function DatabasePage() {\n return (\n <div className='flex flex-1 flex-col gap-4 px-4 sm:px-16 py-4'>\n <div>\n <h1 className='text-2xl font-bold'>Database</h1>\n <p className='text-muted-foreground'>Browse and manage your database.</p>\n </div>\n <Card>\n <CardContent className='py-16'>\n <div className='flex flex-col items-center justify-center gap-4 text-center'>\n <div className='rounded-full bg-muted p-4'>\n <Database className='h-8 w-8 text-muted-foreground' />\n </div>\n <div>\n <p className='font-medium'>Coming soon</p>\n <p className='text-sm text-muted-foreground mt-1'>\n Database management tools will be available here.\n </p>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n )\n}\n","import { EventsLogPanel } from '@mdxui/admin/events-log'\nimport type { LogChannel } from '@mdxui/admin/events-log'\nimport { useLogEvents } from '@mdxui/admin/events-log'\nimport { useAuth } from '@mdxui/auth'\nimport { useCallback, useEffect, useState } from 'react'\nimport { useWebNavigate } from '@mdxui/navigation/web'\nimport { useDashboard } from '../context/dashboard-context'\n\n/**\n * Outer page component — resolves auth token before mounting the hook.\n *\n * Why: useLogEvents fires an immediate fetch. If that fetch gets a 401\n * (because AuthSync hasn't set the bearer token yet), isAuthError()\n * permanently sets polling=false. By deferring mount until the token\n * is available, the hook never sees a pre-auth 401.\n */\nexport function EventsLogPage() {\n const { user, getAccessToken } = useAuth()\n const { config } = useDashboard()\n const [token, setToken] = useState<string>()\n\n const availableChannels = config.events?.availableChannels\n\n useEffect(() => {\n if (user) {\n getAccessToken().then((t) => setToken(t))\n }\n }, [user, getAccessToken])\n\n return (\n <div className='flex h-full flex-col'>\n <div className='flex flex-1 flex-col overflow-hidden px-4 sm:px-8 pb-2 pt-1'>\n {token ? (\n <EventsLogContent token={token} availableChannels={availableChannels} />\n ) : (\n <EventsLogPanel\n events={[]}\n loading={true}\n loadingMore={false}\n polling={false}\n error={null}\n hasMore={false}\n onLoadMore={() => {}}\n onPausePoll={() => {}}\n onResumePoll={() => {}}\n onFiltersChange={() => {}}\n availableChannels={availableChannels}\n className='flex-1'\n />\n )}\n </div>\n </div>\n )\n}\n\n/**\n * Inner content — only mounts once the auth token is available.\n * This guarantees useLogEvents never fires a pre-auth fetch.\n */\nfunction EventsLogContent({ token, availableChannels }: { token: string; availableChannels?: LogChannel[] }) {\n const navigate = useWebNavigate()\n const [apiOptions, setApiOptions] = useState<{\n types?: string[]\n source?: string\n actor?: string\n namespace?: string\n requestId?: string\n }>({})\n\n const log = useLogEvents({\n ...apiOptions,\n token,\n pollInterval: 5000,\n })\n\n const handleFiltersChange = useCallback(\n (filters: { types?: string[]; source?: string; actor?: string; namespace?: string; requestId?: string }) => {\n setApiOptions(filters)\n },\n [],\n )\n\n const handleDataBrowserLink = useCallback(\n (params: { entityType: string; entityId: string; atEventId: string }) => {\n navigate(`/database/${params.entityType.toLowerCase()}`, {\n search: { recordId: params.entityId, atEventId: params.atEventId },\n })\n },\n [navigate],\n )\n\n return (\n <EventsLogPanel\n events={log.events}\n loading={log.loading}\n loadingMore={log.loadingMore}\n polling={log.polling}\n error={log.error}\n hasMore={log.hasMore}\n onLoadMore={log.loadMore}\n onPausePoll={log.pausePoll}\n onResumePoll={log.resumePoll}\n onFiltersChange={handleFiltersChange}\n onDataBrowserLink={handleDataBrowserLink}\n availableChannels={availableChannels}\n className='flex-1'\n />\n )\n}\n","import { Plug } from 'lucide-react'\n\n\n// Pipes - TODO: Implement\n\nexport function IntegrationsPage() {\n return (\n <div className=\"flex flex-1 flex-col gap-4 px-4 sm:px-16 py-4\">\n <div>\n <h1 className=\"text-2xl font-bold\">Integrations</h1>\n <p className=\"text-muted-foreground\">\n Connect third-party services.\n </p>\n </div>\n\n <div className=\"flex flex-col items-center justify-center rounded-md border border-dashed py-24 gap-4\">\n {/* <Pipes authToken={authToken} /> */}\n <div className=\"rounded-full bg-muted p-4\">\n <Plug className=\"h-8 w-8 text-muted-foreground\" />\n </div>\n <div className=\"text-center\">\n <p className=\"font-medium\">Coming Soon</p>\n <p className=\"text-muted-foreground text-sm max-w-md mt-1\">\n Connect services like GitHub, Slack, Google, Salesforce, and\n more.\n </p>\n </div>\n </div>\n </div>\n )\n}\n","import { ApiKeys, useAuth } from '@mdxui/auth'\nimport { useEffect, useState } from 'react'\nimport { MockApiKeys } from '../components/widgets'\nimport { useDashboard } from '../context/dashboard-context'\n\nexport interface KeysPageProps {\n /** Whether to use mock widgets instead of real WorkOS widgets */\n useMockWidgets?: boolean\n /** Additional CSS class for the container */\n className?: string\n}\n\nexport function KeysPage({ useMockWidgets: useMockWidgetsProp, className }: KeysPageProps = {}) {\n const { config } = useDashboard()\n const useMockWidgets = config.identity?.useMockWidgets ?? useMockWidgetsProp ?? false\n\n return (\n <div className={`mx-auto w-full max-w-7xl flex-1 overflow-y-auto scrollbar-thin px-4 py-4 ${className ?? ''}`}>\n <div className='pb-10'>\n <h1 className='text-2xl font-semibold tracking-tight'>API Keys</h1>\n <p className='text-muted-foreground'>Manage your API keys for accessing the API.</p>\n </div>\n\n <KeysPageContent useMockWidgets={useMockWidgets} />\n </div>\n )\n}\n\nfunction KeysPageContent({ useMockWidgets }: { useMockWidgets: boolean }) {\n const { user, getAccessToken, isLoading, organizationId, permissions } = useAuth()\n const [token, setToken] = useState<string | null>(null)\n\n useEffect(() => {\n if (!user) {\n setToken(null)\n return\n }\n let cancelled = false\n getAccessToken().then((t) => {\n if (!cancelled) setToken(t)\n })\n return () => { cancelled = true }\n }, [user, getAccessToken])\n\n const hasOrganization = !!organizationId\n const canManageKeys = hasOrganization && permissions?.includes('widgets:api-keys:manage')\n const loading = !useMockWidgets && (isLoading || (user && !token))\n\n if (loading) {\n return <div className='flex items-center justify-center py-12 text-muted-foreground'>Loading...</div>\n }\n\n if (useMockWidgets) {\n return <MockApiKeys />\n }\n\n if (!user || !token) {\n return (\n <div className='flex items-center justify-center rounded-md border border-dashed py-24'>\n <p className='text-muted-foreground text-sm'>Please sign in to manage API keys.</p>\n </div>\n )\n }\n\n if (!hasOrganization) {\n return (\n <div className='flex items-center justify-center rounded-md border border-dashed py-24'>\n <p className='text-muted-foreground text-sm'>You need to be part of an organization to manage API keys.</p>\n </div>\n )\n }\n\n if (!canManageKeys) {\n return (\n <div className='flex items-center justify-center rounded-md border border-dashed py-24'>\n <p className='text-muted-foreground text-sm'>You need permission to manage API keys.</p>\n </div>\n )\n }\n\n return <ApiKeys authToken={token} />\n}\n","import { UsageOverviewPanel } from '@mdxui/admin/usage-overview'\nimport { useEffect, useState } from 'react'\nimport { PlanPickerModal } from '../components/billing/plan-picker-modal'\nimport { useDashboard } from '../context/dashboard-context'\nimport { useBillingUsage } from '../hooks/use-billing'\nimport { useAuth } from '@mdxui/auth'\n\nexport function OverviewPage() {\n const { config } = useDashboard()\n const { accessToken: token, organizationId } = useAuth()\n const { data: billingUsage } = useBillingUsage()\n const [checkoutCancelled, setCheckoutCancelled] = useState(false)\n const [showPlanPicker, setShowPlanPicker] = useState(false)\n\n // Handle checkout cancelled query param\n useEffect(() => {\n const params = new URLSearchParams(window.location.search)\n if (params.get('checkout') === 'cancelled') {\n setCheckoutCancelled(true)\n }\n }, [])\n\n return (\n <div className='mx-auto w-full max-w-7xl flex-1 overflow-y-auto scrollbar-thin px-4 py-4 space-y-4'>\n {checkoutCancelled && (\n <div className='flex items-center justify-between rounded-[var(--radius)] border border-amber-200 bg-amber-50 dark:bg-amber-950/20 dark:border-amber-800 p-3'>\n <span className='text-sm text-amber-800 dark:text-amber-200'>Checkout cancelled. You're on the Free plan.</span>\n <button\n type='button'\n className='text-xs text-amber-600 hover:text-amber-800'\n onClick={() => {\n setCheckoutCancelled(false)\n window.history.replaceState({}, '', '/dashboard')\n }}\n >\n Dismiss\n </button>\n </div>\n )}\n\n <UsageOverviewPanel\n token={token}\n tenant={organizationId ?? undefined}\n balanceUnit='tokens'\n planCredits={billingUsage?.usage.included}\n creditAction={config.planConfig && billingUsage?.plan.name === 'free' ? { label: 'Upgrade', onClick: () => setShowPlanPicker(true) } : undefined}\n />\n\n {config.planConfig && (\n <PlanPickerModal\n open={showPlanPicker}\n onClose={() => setShowPlanPicker(false)}\n currentPlan={billingUsage?.plan?.name || null}\n plans={config.planConfig.plans}\n features={config.planConfig.features}\n />\n )}\n </div>\n )\n}\n","import { Button } from '@mdxui/primitives/button'\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@mdxui/primitives/dropdown-menu'\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from '@mdxui/primitives/sheet'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@mdxui/primitives/table'\nimport { Activity, ChevronDown } from 'lucide-react'\nimport { useState } from 'react'\nimport { JsonViewer, StatusBadge } from '../components/ui'\nimport { type MockRequest, mockRequests } from '../lib/mock-data'\n\ntype StatusFilter = 'all' | 'success' | 'client_error' | 'server_error'\n\nconst statusFilterOptions: { value: StatusFilter; label: string }[] = [\n { value: 'all', label: 'All Status' },\n { value: 'success', label: 'Success (2xx)' },\n { value: 'client_error', label: 'Client Error (4xx)' },\n { value: 'server_error', label: 'Server Error (5xx)' },\n]\n\nconst methodColors: Record<string, string> = {\n GET: 'text-success',\n POST: 'text-primary',\n PUT: 'text-warning-foreground',\n PATCH: 'text-warning-foreground',\n DELETE: 'text-destructive',\n}\n\nfunction formatTimestamp(timestamp: string): string {\n const date = new Date(timestamp)\n return date.toLocaleTimeString('en-US', {\n hour: 'numeric',\n minute: '2-digit',\n second: '2-digit',\n hour12: true,\n })\n}\n\nfunction formatLatency(ms: number): string {\n if (ms >= 1000) {\n return `${(ms / 1000).toFixed(2)}s`\n }\n return `${ms}ms`\n}\n\nfunction formatCost(cost: number): string {\n if (cost === 0) return '—'\n return `$${cost.toFixed(3)}`\n}\n\nexport function RequestsPage() {\n const [statusFilter, setStatusFilter] = useState<StatusFilter>('all')\n const [selectedRequest, setSelectedRequest] = useState<MockRequest | null>(null)\n const [sheetOpen, setSheetOpen] = useState(false)\n\n const filteredRequests = mockRequests.filter((request) => {\n if (statusFilter === 'all') return true\n if (statusFilter === 'success') return request.statusCode >= 200 && request.statusCode < 300\n if (statusFilter === 'client_error') return request.statusCode >= 400 && request.statusCode < 500\n if (statusFilter === 'server_error') return request.statusCode >= 500\n return true\n })\n\n const handleRowClick = (request: MockRequest) => {\n setSelectedRequest(request)\n setSheetOpen(true)\n }\n\n return (\n <>\n <div className='flex flex-1 flex-col gap-4 px-4 sm:px-16 py-4'>\n <div className='flex items-center justify-between'>\n <div>\n <h1 className='text-2xl font-bold'>Requests</h1>\n <p className='text-muted-foreground'>Monitor and debug your API request logs.</p>\n </div>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant='outline' className='w-[160px] justify-between'>\n {statusFilterOptions.find((o) => o.value === statusFilter)?.label}\n <ChevronDown className='h-4 w-4 opacity-50' />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align='end' className='w-[160px]'>\n {statusFilterOptions.map((option) => (\n <DropdownMenuItem key={option.value} onClick={() => setStatusFilter(option.value)}>\n {option.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n\n {/* Requests Table */}\n <div className='rounded-md border'>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead className='pl-4'>Timestamp</TableHead>\n <TableHead>Method</TableHead>\n <TableHead>Endpoint</TableHead>\n <TableHead>Status</TableHead>\n <TableHead>Latency</TableHead>\n <TableHead>Cost</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {filteredRequests.map((request) => (\n <TableRow key={request.id} className='cursor-pointer hover:bg-muted/50' onClick={() => handleRowClick(request)}>\n <TableCell className='py-3 pl-4 text-muted-foreground'>{formatTimestamp(request.timestamp)}</TableCell>\n <TableCell className='py-3'>\n <span className={`font-mono text-sm font-medium ${methodColors[request.method] || ''}`}>{request.method}</span>\n </TableCell>\n <TableCell className='py-3 font-mono text-sm'>{request.endpoint}</TableCell>\n <TableCell className='py-3'>\n <StatusBadge status={request.statusCode} />\n </TableCell>\n <TableCell className='py-3 text-muted-foreground'>{formatLatency(request.latency)}</TableCell>\n <TableCell className='py-3 text-muted-foreground'>{formatCost(request.cost)}</TableCell>\n </TableRow>\n ))}\n {filteredRequests.length === 0 && (\n <TableRow>\n <TableCell colSpan={6} className='py-16'>\n <div className='flex flex-col items-center justify-center gap-4 text-center'>\n <div className='rounded-full bg-muted p-4'>\n <Activity className='h-8 w-8 text-muted-foreground' />\n </div>\n <div>\n <p className='font-medium'>No requests found</p>\n <p className='text-sm text-muted-foreground mt-1'>No requests match the current filter.</p>\n </div>\n </div>\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n </div>\n\n {/* Request Detail Sheet */}\n <Sheet open={sheetOpen} onOpenChange={setSheetOpen}>\n <SheetContent className='w-full sm:max-w-lg overflow-y-auto'>\n {selectedRequest && (\n <>\n <SheetHeader>\n <SheetTitle className='flex items-center gap-2'>\n <span className={`font-mono ${methodColors[selectedRequest.method] || ''}`}>{selectedRequest.method}</span>\n <span className='font-mono text-muted-foreground font-normal'>{selectedRequest.endpoint}</span>\n </SheetTitle>\n <SheetDescription className='flex items-center gap-2 text-sm'>\n <StatusBadge status={selectedRequest.statusCode} />\n <span className='text-muted-foreground'>•</span>\n <span>{formatLatency(selectedRequest.latency)}</span>\n {selectedRequest.cost > 0 && (\n <>\n <span className='text-muted-foreground'>•</span>\n <span>{formatCost(selectedRequest.cost)}</span>\n </>\n )}\n <span className='text-muted-foreground'>•</span>\n <span>{formatTimestamp(selectedRequest.timestamp)}</span>\n </SheetDescription>\n </SheetHeader>\n\n <div className='mt-6 space-y-6 px-4'>\n <div>\n <h4 className='text-sm font-semibold mb-2'>Request</h4>\n <JsonViewer data={selectedRequest.requestPayload} />\n </div>\n\n <div>\n <h4 className='text-sm font-semibold mb-2'>Response</h4>\n <JsonViewer data={selectedRequest.responsePayload} />\n </div>\n </div>\n </>\n )}\n </SheetContent>\n </Sheet>\n </>\n )\n}\n","import { cn } from '@mdxui/primitives/lib/utils'\nimport { Check, Copy } from 'lucide-react'\nimport { useThemeStore } from '@mdxui/themes'\nimport { useEffect, useState } from 'react'\nimport { codeToHtml } from 'shiki'\n\ninterface JsonViewerProps {\n data: unknown\n className?: string\n}\n\nexport function JsonViewer({ data, className }: JsonViewerProps) {\n const [html, setHtml] = useState<string>('')\n const [copied, setCopied] = useState(false)\n const resolvedTheme = useThemeStore((s) => s.resolvedMode)\n const jsonString = JSON.stringify(data, null, 2)\n\n useEffect(() => {\n const theme = resolvedTheme === 'dark' ? 'github-dark' : 'github-light'\n codeToHtml(jsonString, {\n lang: 'json',\n theme,\n }).then(setHtml)\n }, [jsonString, resolvedTheme])\n\n const handleCopy = async () => {\n await navigator.clipboard.writeText(jsonString)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n }\n\n return (\n <div className={cn('relative rounded-md border bg-muted', className)}>\n <button\n type='button'\n className='absolute top-2 right-2 text-muted-foreground hover:text-foreground transition-colors'\n onClick={handleCopy}>\n {copied ? <Check className='h-3.5 w-3.5' /> : <Copy className='h-3.5 w-3.5' />}\n </button>\n <div\n className='p-4 overflow-auto text-sm [&_pre]:bg-transparent! [&_code]:bg-transparent! [&_pre]:m-0'\n // biome-ignore lint/security/noDangerouslySetInnerHtml: we need to set the html string\n dangerouslySetInnerHTML={{ __html: html }}\n />\n </div>\n )\n}\n","import { WebLink } from '@mdxui/navigation/web'\nimport { useSidebar } from '@mdxui/primitives/sidebar'\nimport { X } from 'lucide-react'\nimport { useState } from 'react'\n\nexport interface SidebarAdProps {\n headline: string\n description?: string\n ctaText: string\n ctaHref?: string\n onCtaClick?: () => void\n dismissible?: boolean\n onDismiss?: () => void\n badge?: string\n}\n\nexport function SidebarAd({ headline, description, ctaText, ctaHref, onCtaClick, dismissible = true, onDismiss, badge }: SidebarAdProps) {\n const [isDismissed, setIsDismissed] = useState(false)\n const { state } = useSidebar()\n\n if (isDismissed) return null\n\n // Hide when sidebar is collapsed\n if (state === 'collapsed') return null\n\n const handleDismiss = () => {\n setIsDismissed(true)\n onDismiss?.()\n }\n\n const handleCtaClick = () => {\n if (onCtaClick) {\n onCtaClick()\n }\n }\n\n const ctaContent = (\n <button\n type='button'\n onClick={handleCtaClick}\n className='mt-1 w-full rounded-md py-2 px-3 text-xs font-medium bg-primary text-primary-foreground hover:opacity-90 transition-opacity cursor-pointer'>\n {ctaText}\n </button>\n )\n\n return (\n <div className='mx-2 mb-2 relative rounded-md border border-border bg-card p-4 shadow-sm'>\n {dismissible && (\n <button\n type='button'\n onClick={handleDismiss}\n className='absolute top-2.5 right-2.5 text-muted-foreground hover:text-foreground transition-colors'\n aria-label='Dismiss'>\n <X className='h-3.5 w-3.5' />\n </button>\n )}\n\n <div className='flex flex-col gap-3'>\n {badge && (\n <span className='inline-flex w-fit items-center rounded-md px-2 py-0.5 text-[10px] font-medium uppercase tracking-wide bg-primary text-primary-foreground'>\n {badge}\n </span>\n )}\n\n <div className='pr-4'>\n <p className='text-sm font-medium text-foreground leading-tight'>{headline}</p>\n {description && <p className='mt-1.5 text-xs text-muted-foreground leading-relaxed'>{description}</p>}\n </div>\n\n {ctaHref ? (\n <WebLink to={ctaHref} className='block' target='_blank' rel='noopener noreferrer'>\n {ctaContent}\n </WebLink>\n ) : (\n ctaContent\n )}\n </div>\n </div>\n )\n}\n","import { cn } from '@mdxui/primitives/lib/utils';\n\ntype StatusType = 'success' | 'warning' | 'error';\n\ninterface StatusBadgeProps {\n status: number | StatusType;\n className?: string;\n showText?: boolean;\n}\n\nfunction getStatusFromCode(code: number): StatusType {\n if (code >= 200 && code < 300) return 'success';\n if (code >= 400 && code < 500) return 'warning';\n return 'error';\n}\n\nconst statusConfig: Record<StatusType, { bg: string; text: string; dot: string }> = {\n success: {\n bg: 'bg-success/10',\n text: 'text-success',\n dot: 'bg-success',\n },\n warning: {\n bg: 'bg-warning/10',\n text: 'text-warning',\n dot: 'bg-warning',\n },\n error: {\n bg: 'bg-destructive/10',\n text: 'text-destructive',\n dot: 'bg-destructive',\n },\n};\n\nexport function StatusBadge({ status, className, showText = true }: StatusBadgeProps) {\n const statusType = typeof status === 'number' ? getStatusFromCode(status) : status;\n const config = statusConfig[statusType];\n const displayText = typeof status === 'number' ? status.toString() : statusType;\n\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full px-2 py-0.5 text-xs font-medium',\n config.bg,\n config.text,\n className\n )}\n >\n <span className={cn('h-1.5 w-1.5 rounded-full', config.dot)} />\n {showText && <span>{displayText}</span>}\n </span>\n );\n}\n\nexport function StatusDot({ status, className }: { status: number | StatusType; className?: string }) {\n const statusType = typeof status === 'number' ? getStatusFromCode(status) : status;\n const config = statusConfig[statusType];\n\n return <span className={cn('h-2 w-2 rounded-full', config.dot, className)} />;\n}\n","// Mock data for the developer dashboard\n\n// Time period options for filtering\nexport type TimePeriod = \"today\" | \"7d\" | \"30d\" | \"60d\" | \"90d\" | \"all\";\n\nexport const timePeriodOptions: { value: TimePeriod; label: string }[] = [\n { value: \"today\", label: \"Today\" },\n { value: \"7d\", label: \"7 Days\" },\n { value: \"30d\", label: \"30 Days\" },\n { value: \"60d\", label: \"60 Days\" },\n { value: \"90d\", label: \"90 Days\" },\n { value: \"all\", label: \"All Time\" },\n];\n\n// Extended usage data for 90+ days (deterministic to avoid hydration mismatch)\nexport const mockUsageData = [\n // Older data (60-90 days ago)\n { date: \"2024-08-26\", requests: 1100 },\n { date: \"2024-08-27\", requests: 1050 },\n { date: \"2024-08-28\", requests: 1180 },\n { date: \"2024-08-29\", requests: 1220 },\n { date: \"2024-08-30\", requests: 980 },\n { date: \"2024-08-31\", requests: 890 },\n { date: \"2024-09-01\", requests: 920 },\n { date: \"2024-09-02\", requests: 1050 },\n { date: \"2024-09-03\", requests: 1150 },\n { date: \"2024-09-04\", requests: 1280 },\n { date: \"2024-09-05\", requests: 1320 },\n { date: \"2024-09-06\", requests: 1180 },\n { date: \"2024-09-07\", requests: 1020 },\n { date: \"2024-09-08\", requests: 950 },\n { date: \"2024-09-09\", requests: 1100 },\n { date: \"2024-09-10\", requests: 1250 },\n { date: \"2024-09-11\", requests: 1380 },\n { date: \"2024-09-12\", requests: 1420 },\n { date: \"2024-09-13\", requests: 1290 },\n { date: \"2024-09-14\", requests: 1050 },\n { date: \"2024-09-15\", requests: 980 },\n { date: \"2024-09-16\", requests: 1120 },\n { date: \"2024-09-17\", requests: 1280 },\n { date: \"2024-09-18\", requests: 1450 },\n { date: \"2024-09-19\", requests: 1520 },\n { date: \"2024-09-20\", requests: 1380 },\n { date: \"2024-09-21\", requests: 1150 },\n { date: \"2024-09-22\", requests: 1080 },\n { date: \"2024-09-23\", requests: 1220 },\n { date: \"2024-09-24\", requests: 1350 },\n // 30-60 days ago\n { date: \"2024-09-25\", requests: 1480 },\n { date: \"2024-09-26\", requests: 1550 },\n { date: \"2024-09-27\", requests: 1420 },\n { date: \"2024-09-28\", requests: 1180 },\n { date: \"2024-09-29\", requests: 1100 },\n { date: \"2024-09-30\", requests: 1250 },\n { date: \"2024-10-01\", requests: 1380 },\n { date: \"2024-10-02\", requests: 1520 },\n { date: \"2024-10-03\", requests: 1650 },\n { date: \"2024-10-04\", requests: 1480 },\n { date: \"2024-10-05\", requests: 1220 },\n { date: \"2024-10-06\", requests: 1150 },\n { date: \"2024-10-07\", requests: 1320 },\n { date: \"2024-10-08\", requests: 1450 },\n { date: \"2024-10-09\", requests: 1580 },\n { date: \"2024-10-10\", requests: 1720 },\n { date: \"2024-10-11\", requests: 1550 },\n { date: \"2024-10-12\", requests: 1280 },\n { date: \"2024-10-13\", requests: 1180 },\n { date: \"2024-10-14\", requests: 1350 },\n { date: \"2024-10-15\", requests: 1480 },\n { date: \"2024-10-16\", requests: 1620 },\n { date: \"2024-10-17\", requests: 1750 },\n { date: \"2024-10-18\", requests: 1580 },\n { date: \"2024-10-19\", requests: 1320 },\n { date: \"2024-10-20\", requests: 1220 },\n { date: \"2024-10-21\", requests: 1380 },\n { date: \"2024-10-22\", requests: 1520 },\n { date: \"2024-10-23\", requests: 1680 },\n { date: \"2024-10-24\", requests: 1820 },\n // Original 30 days data\n { date: \"2024-10-25\", requests: 1250 },\n { date: \"2024-10-26\", requests: 1340 },\n { date: \"2024-10-27\", requests: 980 },\n { date: \"2024-10-28\", requests: 1520 },\n { date: \"2024-10-29\", requests: 1680 },\n { date: \"2024-10-30\", requests: 1420 },\n { date: \"2024-10-31\", requests: 1890 },\n { date: \"2024-11-01\", requests: 2100 },\n { date: \"2024-11-02\", requests: 1750 },\n { date: \"2024-11-03\", requests: 1320 },\n { date: \"2024-11-04\", requests: 1480 },\n { date: \"2024-11-05\", requests: 1650 },\n { date: \"2024-11-06\", requests: 1920 },\n { date: \"2024-11-07\", requests: 2050 },\n { date: \"2024-11-08\", requests: 1780 },\n { date: \"2024-11-09\", requests: 1450 },\n { date: \"2024-11-10\", requests: 1280 },\n { date: \"2024-11-11\", requests: 1620 },\n { date: \"2024-11-12\", requests: 1850 },\n { date: \"2024-11-13\", requests: 2200 },\n { date: \"2024-11-14\", requests: 2350 },\n { date: \"2024-11-15\", requests: 1980 },\n { date: \"2024-11-16\", requests: 1550 },\n { date: \"2024-11-17\", requests: 1380 },\n { date: \"2024-11-18\", requests: 1720 },\n { date: \"2024-11-19\", requests: 1950 },\n { date: \"2024-11-20\", requests: 2180 },\n { date: \"2024-11-21\", requests: 2420 },\n { date: \"2024-11-22\", requests: 2080 },\n { date: \"2024-11-23\", requests: 1650 },\n { date: \"2024-11-24\", requests: 1820 },\n];\n\n// Helper to filter usage data by time period\nexport function getUsageDataByPeriod(period: TimePeriod) {\n const data = [...mockUsageData];\n\n switch (period) {\n case \"today\":\n return data.filter(d => d.date === \"2024-11-24\");\n case \"7d\":\n return data.slice(-7);\n case \"30d\":\n return data.slice(-30);\n case \"60d\":\n return data.slice(-60);\n case \"90d\":\n return data.slice(-90);\n case \"all\":\n default:\n return data;\n }\n}\n\n// Helper to get stats for a time period\nexport function getStatsByPeriod(period: TimePeriod) {\n const usageData = getUsageDataByPeriod(period);\n const totalRequests = usageData.reduce((sum, day) => sum + day.requests, 0);\n\n // Scale costs and errors based on period\n const periodMultiplier = {\n today: 1 / 30,\n \"7d\": 7 / 30,\n \"30d\": 1,\n \"60d\": 2,\n \"90d\": 3,\n all: mockUsageData.length / 30,\n };\n\n const multiplier = periodMultiplier[period];\n\n return {\n totalRequests,\n totalCost: mockBillingData.totalSpend * multiplier,\n errorCount: Math.round(23 * multiplier),\n };\n}\n\nexport const mockApiKeys = [\n {\n id: \"1\",\n name: \"Production Key\",\n key: \"sk_live_abc123def456ghi789jkl012\",\n created: \"2024-10-15\",\n lastUsed: \"2024-11-24\",\n status: \"active\" as const,\n },\n {\n id: \"2\",\n name: \"Development Key\",\n key: \"sk_test_xyz789abc123def456ghi012\",\n created: \"2024-11-01\",\n lastUsed: \"2024-11-23\",\n status: \"active\" as const,\n },\n {\n id: \"3\",\n name: \"CI/CD Pipeline\",\n key: \"sk_live_mno345pqr678stu901vwx234\",\n created: \"2024-11-10\",\n lastUsed: null,\n status: \"never_used\" as const,\n },\n];\n\nexport const mockBillingData = {\n plan: \"Pro\",\n planPrice: 49.0,\n planFeatures: [\n \"100,000 API requests/month\",\n \"50 GB storage\",\n \"Priority support\",\n \"Advanced analytics\",\n ],\n status: \"active\" as const,\n renewalDate: \"2024-12-01\",\n totalSpend: 127.5,\n usageBreakdown: [\n { resource: \"API Requests\", usage: 45230, limit: 100000, unit: \"requests\", cost: 45.23 },\n { resource: \"Data Transfer\", usage: 12.5, limit: 100, unit: \"GB\", cost: 25.0 },\n { resource: \"Storage\", usage: 50, limit: 50, unit: \"GB\", cost: 10.0 },\n { resource: \"Compute Hours\", usage: 156, limit: 500, unit: \"hrs\", cost: 47.27 },\n ],\n invoices: [\n { id: \"inv_001\", invoiceNumber: \"INV-2024-001\", date: \"2024-11-01\", amount: 99.0, status: \"paid\" as const },\n { id: \"inv_002\", invoiceNumber: \"INV-2024-002\", date: \"2024-10-01\", amount: 89.5, status: \"paid\" as const },\n { id: \"inv_003\", invoiceNumber: \"INV-2024-003\", date: \"2024-09-01\", amount: 112.0, status: \"paid\" as const },\n ],\n paymentMethod: {\n type: \"card\" as const,\n brand: \"Visa\",\n last4: \"4242\",\n expiryMonth: 12,\n expiryYear: 2026,\n },\n billingAlerts: {\n enabled: true,\n threshold: 80,\n },\n};\n\n// Stats derived from usage data\nexport const mockStats = {\n totalRequests: mockUsageData.reduce((sum, day) => sum + day.requests, 0),\n totalCost: mockBillingData.totalSpend,\n errorCount: 23,\n};\n\n// ============================================================================\n// REQUESTS MOCK DATA\n// ============================================================================\n\nexport type RequestMethod = \"GET\" | \"POST\" | \"PUT\" | \"DELETE\" | \"PATCH\";\n\nexport interface MockRequest {\n id: string;\n timestamp: string;\n method: RequestMethod;\n endpoint: string;\n statusCode: number;\n latency: number;\n cost: number;\n requestPayload: Record<string, unknown>;\n responsePayload: Record<string, unknown>;\n}\n\nexport const mockRequests: MockRequest[] = [\n {\n id: \"req_001\",\n timestamp: \"2024-11-24T14:34:12Z\",\n method: \"GET\",\n endpoint: \"/v1/lookup\",\n statusCode: 200,\n latency: 124,\n cost: 0.002,\n requestPayload: { vin: \"1HGCM82633A004352\" },\n responsePayload: { make: \"Honda\", model: \"Accord\", year: 2003, trim: \"EX\" },\n },\n {\n id: \"req_002\",\n timestamp: \"2024-11-24T14:33:58Z\",\n method: \"POST\",\n endpoint: \"/v1/decode\",\n statusCode: 500,\n latency: 892,\n cost: 0.005,\n requestPayload: { vin: \"INVALID_VIN_123\" },\n responsePayload: { error: \"Internal server error\", code: \"DECODE_FAILED\" },\n },\n {\n id: \"req_003\",\n timestamp: \"2024-11-24T14:33:41Z\",\n method: \"GET\",\n endpoint: \"/v1/lookup\",\n statusCode: 200,\n latency: 98,\n cost: 0.002,\n requestPayload: { vin: \"5YJSA1E26HF000001\" },\n responsePayload: { make: \"Tesla\", model: \"Model S\", year: 2017, trim: \"75D\" },\n },\n {\n id: \"req_004\",\n timestamp: \"2024-11-24T14:32:15Z\",\n method: \"POST\",\n endpoint: \"/v1/batch\",\n statusCode: 200,\n latency: 1250,\n cost: 0.025,\n requestPayload: { vins: [\"1HGCM82633A004352\", \"5YJSA1E26HF000001\", \"WVWZZZ3CZWE000001\"] },\n responsePayload: { results: [{ vin: \"1HGCM82633A004352\", status: \"success\" }, { vin: \"5YJSA1E26HF000001\", status: \"success\" }, { vin: \"WVWZZZ3CZWE000001\", status: \"success\" }] },\n },\n {\n id: \"req_005\",\n timestamp: \"2024-11-24T14:31:02Z\",\n method: \"GET\",\n endpoint: \"/v1/lookup\",\n statusCode: 404,\n latency: 45,\n cost: 0.001,\n requestPayload: { vin: \"NOTFOUND12345678\" },\n responsePayload: { error: \"VIN not found\", code: \"NOT_FOUND\" },\n },\n {\n id: \"req_006\",\n timestamp: \"2024-11-24T14:29:48Z\",\n method: \"PUT\",\n endpoint: \"/v1/records/rec_123\",\n statusCode: 200,\n latency: 156,\n cost: 0.003,\n requestPayload: { notes: \"Customer requested update\", verified: true },\n responsePayload: { id: \"rec_123\", updated: true, timestamp: \"2024-11-24T14:29:48Z\" },\n },\n {\n id: \"req_007\",\n timestamp: \"2024-11-24T14:28:33Z\",\n method: \"DELETE\",\n endpoint: \"/v1/records/rec_456\",\n statusCode: 204,\n latency: 89,\n cost: 0.001,\n requestPayload: {},\n responsePayload: {},\n },\n {\n id: \"req_008\",\n timestamp: \"2024-11-24T14:27:19Z\",\n method: \"GET\",\n endpoint: \"/v1/lookup\",\n statusCode: 429,\n latency: 12,\n cost: 0.0,\n requestPayload: { vin: \"1HGCM82633A004352\" },\n responsePayload: { error: \"Rate limit exceeded\", code: \"RATE_LIMITED\", retryAfter: 60 },\n },\n {\n id: \"req_009\",\n timestamp: \"2024-11-24T14:26:05Z\",\n method: \"POST\",\n endpoint: \"/v1/decode\",\n statusCode: 200,\n latency: 234,\n cost: 0.005,\n requestPayload: { vin: \"WVWZZZ3CZWE000001\", includeHistory: true },\n responsePayload: { make: \"Volkswagen\", model: \"Golf\", year: 2014, history: { accidents: 0, owners: 2 } },\n },\n {\n id: \"req_010\",\n timestamp: \"2024-11-24T14:24:51Z\",\n method: \"GET\",\n endpoint: \"/v1/health\",\n statusCode: 200,\n latency: 8,\n cost: 0.0,\n requestPayload: {},\n responsePayload: { status: \"healthy\", version: \"2.1.0\" },\n },\n {\n id: \"req_011\",\n timestamp: \"2024-11-24T14:23:38Z\",\n method: \"POST\",\n endpoint: \"/v1/decode\",\n statusCode: 400,\n latency: 34,\n cost: 0.0,\n requestPayload: { vin: \"SHORT\" },\n responsePayload: { error: \"Invalid VIN format\", code: \"INVALID_FORMAT\" },\n },\n {\n id: \"req_012\",\n timestamp: \"2024-11-24T14:22:24Z\",\n method: \"GET\",\n endpoint: \"/v1/lookup\",\n statusCode: 200,\n latency: 112,\n cost: 0.002,\n requestPayload: { vin: \"JM1BK32F781000001\" },\n responsePayload: { make: \"Mazda\", model: \"3\", year: 2008, trim: \"Sport\" },\n },\n];\n\n// Helper to filter requests\nexport function getRequestsByStatus(status: \"all\" | \"success\" | \"error\") {\n if (status === \"all\") return mockRequests;\n if (status === \"success\") return mockRequests.filter(r => r.statusCode >= 200 && r.statusCode < 300);\n return mockRequests.filter(r => r.statusCode >= 400);\n}\n\n// ============================================================================\n// WEBHOOKS MOCK DATA\n// ============================================================================\n\nexport interface WebhookEndpoint {\n id: string;\n target_url: string;\n events: string[];\n active: boolean;\n secret: string;\n description?: string;\n status: \"Active\" | \"Failed\";\n deliveryCount: number;\n failureCount: number;\n lastDeliveredAt: string | null;\n lastStatusCode: number | null;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface WebhookEvent {\n id: string;\n name: string;\n description: string;\n category: string;\n payloadSchema: Record<string, unknown>;\n}\n\nexport interface WebhookLog {\n id: string;\n requestId: string;\n timestamp: string;\n eventName: string;\n endpointId: string;\n endpointUrl: string;\n statusCode: number;\n latency: number;\n requestPayload: Record<string, unknown>;\n responseBody: string | null;\n}\n\nexport const mockWebhookEndpoints: WebhookEndpoint[] = [\n {\n id: \"ep_001\",\n target_url: \"https://api.acme.co/webhooks\",\n events: [\"record.created\", \"record.updated\", \"record.deleted\", \"batch.completed\"],\n active: true,\n secret: \"whsec_abc123def456ghi789\",\n description: \"Acme CRM integration\",\n status: \"Active\",\n deliveryCount: 1247,\n failureCount: 0,\n lastDeliveredAt: \"2024-11-24T14:32:00Z\",\n lastStatusCode: 200,\n createdAt: \"2024-10-01T10:00:00Z\",\n updatedAt: \"2024-11-24T14:32:00Z\",\n },\n {\n id: \"ep_002\",\n target_url: \"https://hooks.slack.com/services/T00/B00/abc123\",\n events: [\"batch.completed\", \"batch.failed\"],\n active: true,\n secret: \"whsec_xyz789mno456pqr123\",\n description: \"Slack batch notifications\",\n status: \"Active\",\n deliveryCount: 342,\n failureCount: 2,\n lastDeliveredAt: \"2024-11-24T13:15:00Z\",\n lastStatusCode: 200,\n createdAt: \"2024-10-15T14:30:00Z\",\n updatedAt: \"2024-11-24T13:15:00Z\",\n },\n {\n id: \"ep_003\",\n target_url: \"https://webhook.site/test-endpoint\",\n events: [\"record.created\"],\n active: false,\n secret: \"whsec_test123456789\",\n status: \"Active\",\n deliveryCount: 0,\n failureCount: 0,\n lastDeliveredAt: null,\n lastStatusCode: null,\n createdAt: \"2024-11-01T09:00:00Z\",\n updatedAt: \"2024-11-01T09:00:00Z\",\n },\n];\n\nexport const mockWebhookEvents: WebhookEvent[] = [\n {\n id: \"evt_001\",\n name: \"record.created\",\n description: \"Fired when a new record is created in the database\",\n category: \"Records\",\n payloadSchema: {\n event: \"record.created\",\n timestamp: \"2024-11-24T14:00:00Z\",\n data: {\n id: \"rec_abc123\",\n vin: \"1HGCM82633A004352\",\n make: \"Honda\",\n model: \"Accord\",\n createdAt: \"2024-11-24T14:00:00Z\",\n },\n },\n },\n {\n id: \"evt_002\",\n name: \"record.updated\",\n description: \"Fired when an existing record is modified\",\n category: \"Records\",\n payloadSchema: {\n event: \"record.updated\",\n timestamp: \"2024-11-24T14:00:00Z\",\n data: {\n id: \"rec_abc123\",\n changes: {\n notes: { old: null, new: \"Verified by customer\" },\n verified: { old: false, new: true },\n },\n updatedAt: \"2024-11-24T14:00:00Z\",\n },\n },\n },\n {\n id: \"evt_003\",\n name: \"record.deleted\",\n description: \"Fired when a record is permanently deleted\",\n category: \"Records\",\n payloadSchema: {\n event: \"record.deleted\",\n timestamp: \"2024-11-24T14:00:00Z\",\n data: {\n id: \"rec_abc123\",\n deletedAt: \"2024-11-24T14:00:00Z\",\n },\n },\n },\n {\n id: \"evt_004\",\n name: \"batch.completed\",\n description: \"Fired when a batch processing job completes successfully\",\n category: \"Batch\",\n payloadSchema: {\n event: \"batch.completed\",\n timestamp: \"2024-11-24T14:00:00Z\",\n data: {\n batchId: \"batch_xyz789\",\n totalRecords: 150,\n successCount: 148,\n failureCount: 2,\n duration: 45000,\n },\n },\n },\n {\n id: \"evt_005\",\n name: \"batch.failed\",\n description: \"Fired when a batch processing job fails\",\n category: \"Batch\",\n payloadSchema: {\n event: \"batch.failed\",\n timestamp: \"2024-11-24T14:00:00Z\",\n data: {\n batchId: \"batch_xyz789\",\n error: \"Processing timeout exceeded\",\n processedCount: 45,\n totalCount: 150,\n },\n },\n },\n {\n id: \"evt_006\",\n name: \"api_key.created\",\n description: \"Fired when a new API key is generated\",\n category: \"Security\",\n payloadSchema: {\n event: \"api_key.created\",\n timestamp: \"2024-11-24T14:00:00Z\",\n data: {\n keyId: \"key_abc123\",\n name: \"Production Key\",\n createdBy: \"user_xyz789\",\n },\n },\n },\n {\n id: \"evt_007\",\n name: \"api_key.revoked\",\n description: \"Fired when an API key is revoked\",\n category: \"Security\",\n payloadSchema: {\n event: \"api_key.revoked\",\n timestamp: \"2024-11-24T14:00:00Z\",\n data: {\n keyId: \"key_abc123\",\n revokedBy: \"user_xyz789\",\n reason: \"Compromised credentials\",\n },\n },\n },\n];\n\nexport const mockWebhookLogs: WebhookLog[] = [\n {\n id: \"log_001\",\n requestId: \"req_a1b2c3\",\n timestamp: new Date(Date.now() - 2 * 60 * 1000).toISOString(),\n eventName: \"record.created\",\n endpointId: \"ep_001\",\n endpointUrl: \"https://api.acme.co/webhooks\",\n statusCode: 200,\n latency: 124,\n requestPayload: { event: \"record.created\", data: { id: \"rec_123\", vin: \"1HGCM82633A004352\" } },\n responseBody: '{\"received\": true}',\n },\n {\n id: \"log_002\",\n requestId: \"req_d4e5f6\",\n timestamp: new Date(Date.now() - 5 * 60 * 1000).toISOString(),\n eventName: \"batch.completed\",\n endpointId: \"ep_002\",\n endpointUrl: \"https://hooks.slack.com/services/T00/B00/abc123\",\n statusCode: 200,\n latency: 89,\n requestPayload: { event: \"batch.completed\", data: { batchId: \"batch_456\", totalRecords: 50 } },\n responseBody: \"ok\",\n },\n {\n id: \"log_003\",\n requestId: \"req_g7h8i9\",\n timestamp: new Date(Date.now() - 12 * 60 * 1000).toISOString(),\n eventName: \"record.updated\",\n endpointId: \"ep_001\",\n endpointUrl: \"https://api.acme.co/webhooks\",\n statusCode: 500,\n latency: 2100,\n requestPayload: { event: \"record.updated\", data: { id: \"rec_789\", changes: { verified: true } } },\n responseBody: '{\"error\": \"Internal server error\"}',\n },\n {\n id: \"log_004\",\n requestId: \"req_j0k1l2\",\n timestamp: new Date(Date.now() - 45 * 60 * 1000).toISOString(),\n eventName: \"record.created\",\n endpointId: \"ep_001\",\n endpointUrl: \"https://api.acme.co/webhooks\",\n statusCode: 200,\n latency: 156,\n requestPayload: { event: \"record.created\", data: { id: \"rec_456\", vin: \"5YJSA1E26HF000001\" } },\n responseBody: '{\"received\": true}',\n },\n {\n id: \"log_005\",\n requestId: \"req_m3n4o5\",\n timestamp: new Date(Date.now() - 2 * 60 * 60 * 1000).toISOString(),\n eventName: \"batch.failed\",\n endpointId: \"ep_002\",\n endpointUrl: \"https://hooks.slack.com/services/T00/B00/abc123\",\n statusCode: 200,\n latency: 112,\n requestPayload: { event: \"batch.failed\", data: { batchId: \"batch_123\", error: \"Timeout\" } },\n responseBody: \"ok\",\n },\n {\n id: \"log_006\",\n requestId: \"req_p6q7r8\",\n timestamp: new Date(Date.now() - 4 * 60 * 60 * 1000).toISOString(),\n eventName: \"record.deleted\",\n endpointId: \"ep_001\",\n endpointUrl: \"https://api.acme.co/webhooks\",\n statusCode: 408,\n latency: 30000,\n requestPayload: { event: \"record.deleted\", data: { id: \"rec_old\" } },\n responseBody: null,\n },\n];\n\nexport const mockWebhookActivity = {\n delivered: 1247,\n failed: 12,\n pending: 3,\n successRate: 99.1,\n endpointsWithIssues: [\n { target_url: \"https://api.acme.co/webhooks\", failures: 8 },\n { target_url: \"https://hooks.slack.com/services/T00/B00/abc123\", failures: 4 },\n ],\n};\n","import { Button } from '@mdxui/primitives/button'\nimport { Plus } from 'lucide-react'\nimport { useState } from 'react'\nimport { toast } from 'sonner'\nimport { VaultInputModal } from '../components/vault/vault-input-modal'\nimport { VaultList } from '../components/vault/vault-list'\nimport {\n logos,\n mockVaultItems,\n type VaultItem,\n} from '../lib/vault-mock'\n\n// Simulates an external request for credentials (e.g., from an agent)\n// In production, this would come from an API or event\nconst pendingCredentialRequest = {\n id: 'stripe',\n name: 'Stripe',\n logoUrl: logos.stripe,\n fields: [\n { key: 'secret_key', label: 'Secret Key', type: 'password' as const, required: true, placeholder: 'sk_live_...' },\n { key: 'publishable_key', label: 'Publishable Key', type: 'text' as const, required: true, placeholder: 'pk_live_...' },\n ],\n}\n\nexport function VaultPage() {\n const [items, setItems] = useState<VaultItem[]>(mockVaultItems)\n const [addModalOpen, setAddModalOpen] = useState(false)\n const [pendingIntegration, setPendingIntegration] = useState<typeof pendingCredentialRequest | null>(null)\n\n const handleOpenAddModal = () => {\n // In production, this would be triggered by an external credential request\n // For demo, we simulate a request for Stripe credentials\n setPendingIntegration(pendingCredentialRequest)\n setAddModalOpen(true)\n }\n\n const handleAdd = async (_credentials: Record<string, string>) => {\n if (!pendingIntegration) return\n\n // In a real app, this would call an API\n const newItem: VaultItem = {\n id: Date.now().toString(),\n name: pendingIntegration.name,\n integrationId: pendingIntegration.id,\n logoUrl: pendingIntegration.logoUrl,\n createdAt: new Date(),\n updatedAt: new Date(),\n }\n\n setItems((prev) => [...prev, newItem])\n toast.success(`${pendingIntegration.name} credentials added successfully`)\n }\n\n const handleCloseAddModal = () => {\n setAddModalOpen(false)\n setPendingIntegration(null)\n }\n\n const handleRotate = async (id: string, _credentials: Record<string, string>) => {\n const item = items.find((i) => i.id === id)\n // In a real app, this would call an API\n setItems((prev) => prev.map((i) => (i.id === id ? { ...i, updatedAt: new Date() } : i)))\n toast.success(`${item?.name || 'Credentials'} rotated successfully`)\n }\n\n const handleDelete = async (id: string) => {\n const item = items.find((i) => i.id === id)\n // In a real app, this would call an API\n setItems((prev) => prev.filter((i) => i.id !== id))\n toast.success(`${item?.name || 'Credentials'} deleted successfully`)\n }\n\n return (\n <div className=\"flex flex-1 flex-col gap-4 px-4 sm:px-16 py-4\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-bold\">Vault</h1>\n <p className=\"text-muted-foreground\">Securely stored credentials for your agents.</p>\n </div>\n {items.length > 0 && (\n <Button onClick={handleOpenAddModal}>\n <Plus className=\"h-4 w-4\" />\n Add Credential\n </Button>\n )}\n </div>\n\n <VaultList\n items={items}\n onRotate={handleRotate}\n onDelete={handleDelete}\n onOpenAddModal={handleOpenAddModal}\n />\n\n <VaultInputModal\n isOpen={addModalOpen}\n onClose={handleCloseAddModal}\n mode=\"create\"\n integration={pendingIntegration || undefined}\n onSave={handleAdd}\n />\n </div>\n )\n}\n","import { Button } from '@mdxui/primitives/button'\nimport {\n Dialog,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@mdxui/primitives/dialog'\nimport { Input } from '@mdxui/primitives/input'\nimport { Label } from '@mdxui/primitives/label'\nimport { Key } from 'lucide-react'\nimport { useState } from 'react'\nimport type { VaultField } from '../../lib/vault-mock'\n\ninterface VaultInputModalProps {\n isOpen: boolean\n onClose: () => void\n mode: 'create' | 'rotate'\n integration?: {\n id: string\n name: string\n logoUrl?: string\n fields: VaultField[]\n }\n onSave: (credentials: Record<string, string>) => Promise<void>\n}\n\nexport function VaultInputModal({\n isOpen,\n onClose,\n mode,\n integration,\n onSave,\n}: VaultInputModalProps) {\n const [values, setValues] = useState<Record<string, string>>({})\n const [loading, setLoading] = useState(false)\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n setLoading(true)\n try {\n await onSave(values)\n setValues({})\n onClose()\n } catch (error) {\n console.error('Failed to save credentials:', error)\n } finally {\n setLoading(false)\n }\n }\n\n const handleClose = () => {\n setValues({})\n onClose()\n }\n\n if (!integration) return null\n\n const isValid = integration.fields.filter((f) => f.required).every((f) => values[f.key]?.trim())\n\n return (\n <Dialog open={isOpen} onOpenChange={handleClose}>\n <DialogContent>\n <DialogHeader>\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-md bg-white overflow-hidden p-1 border border-border\">\n {integration.logoUrl ? (\n <img\n src={integration.logoUrl}\n alt={integration.name}\n width={32}\n height={32}\n className=\"h-full w-full object-contain rounded-sm\"\n />\n ) : (\n <Key className=\"h-5 w-5 text-muted-foreground\" />\n )}\n </div>\n <DialogTitle>\n {mode === 'create' ? 'Add' : 'Rotate'} {integration.name} Credentials\n </DialogTitle>\n </div>\n </DialogHeader>\n <form onSubmit={handleSubmit}>\n <div className=\"grid gap-4 py-4\">\n {integration.fields.map((field) => (\n <div key={field.key} className=\"grid gap-2\">\n <Label htmlFor={field.key}>\n {field.label}\n {field.required && <span className=\"text-destructive\">*</span>}\n </Label>\n <Input\n id={field.key}\n type={field.type}\n placeholder={field.placeholder}\n value={values[field.key] || ''}\n onChange={(e) =>\n setValues((prev) => ({\n ...prev,\n [field.key]: e.target.value,\n }))\n }\n required={field.required}\n />\n </div>\n ))}\n </div>\n <DialogFooter>\n <Button type=\"button\" variant=\"outline\" onClick={handleClose}>\n Cancel\n </Button>\n <Button type=\"submit\" disabled={loading || !isValid}>\n {loading ? 'Saving...' : 'Save'}\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n","import { useState } from 'react'\nimport { integrationFields, type VaultItem } from '../../lib/vault-mock'\nimport { VaultDeleteDialog } from './vault-delete-dialog'\nimport { VaultEmptyState } from './vault-empty-state'\nimport { VaultInputModal } from './vault-input-modal'\nimport { VaultItemCard } from './vault-item-card'\n\ninterface VaultListProps {\n items: VaultItem[]\n onRotate: (id: string, credentials: Record<string, string>) => Promise<void>\n onDelete: (id: string) => Promise<void>\n onOpenAddModal: () => void\n}\n\nexport function VaultList({ items, onRotate, onDelete, onOpenAddModal }: VaultListProps) {\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false)\n const [inputModalOpen, setInputModalOpen] = useState(false)\n const [selectedItem, setSelectedItem] = useState<VaultItem | null>(null)\n const [modalMode, setModalMode] = useState<'create' | 'rotate'>('create')\n\n const handleRotate = (id: string) => {\n const item = items.find((i) => i.id === id)\n if (!item) return\n\n setSelectedItem(item)\n setModalMode('rotate')\n setInputModalOpen(true)\n }\n\n const handleDeleteClick = (id: string) => {\n const item = items.find((i) => i.id === id)\n if (!item) return\n\n setSelectedItem(item)\n setDeleteDialogOpen(true)\n }\n\n const handleConfirmDelete = async () => {\n if (!selectedItem) return\n\n await onDelete(selectedItem.id)\n setDeleteDialogOpen(false)\n setSelectedItem(null)\n }\n\n const handleSave = async (credentials: Record<string, string>) => {\n if (modalMode === 'rotate' && selectedItem) {\n await onRotate(selectedItem.id, credentials)\n }\n setInputModalOpen(false)\n setSelectedItem(null)\n }\n\n const getIntegrationForModal = () => {\n if (!selectedItem) return undefined\n\n const fields = integrationFields[selectedItem.integrationId] || integrationFields.default\n return {\n id: selectedItem.integrationId,\n name: selectedItem.name,\n logoUrl: selectedItem.logoUrl,\n fields,\n }\n }\n\n if (items.length === 0) {\n return <VaultEmptyState onAddCredential={onOpenAddModal} />\n }\n\n return (\n <>\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {items.map((item) => (\n <VaultItemCard\n key={item.id}\n id={item.id}\n name={item.name}\n logoUrl={item.logoUrl}\n createdAt={item.createdAt}\n updatedAt={item.updatedAt}\n onRotate={handleRotate}\n onDelete={handleDeleteClick}\n />\n ))}\n </div>\n\n <VaultDeleteDialog\n isOpen={deleteDialogOpen}\n onClose={() => {\n setDeleteDialogOpen(false)\n setSelectedItem(null)\n }}\n itemName={selectedItem?.name || ''}\n onConfirm={handleConfirmDelete}\n />\n\n <VaultInputModal\n isOpen={inputModalOpen}\n onClose={() => {\n setInputModalOpen(false)\n setSelectedItem(null)\n }}\n mode={modalMode}\n integration={getIntegrationForModal()}\n onSave={handleSave}\n />\n </>\n )\n}\n","export interface VaultItem {\n id: string\n name: string\n integrationId: string\n logoUrl?: string\n createdAt: Date\n updatedAt: Date\n}\n\nexport interface VaultField {\n key: string\n label: string\n type: 'text' | 'password'\n required: boolean\n placeholder?: string\n}\n\n// Zapier CDN logo URLs\nexport const logos = {\n openai:\n 'https://zapier-images.imgix.net/storage/services/0db0a72498194850b1be8614efc82875.png?auto=format&fit=crop&ixlib=react-9.10.0&q=50&w=60&h=60&dpr=2',\n anthropic:\n 'https://zapier-images.imgix.net/storage/services/a2d6219ce3ad44f0daa2bd0097384aec.png?auto=format&fit=crop&ixlib=react-9.10.0&q=50&w=60&h=60&dpr=2',\n github:\n 'https://zapier-images.imgix.net/storage/services/c63f7c57dc0afb733535a5adccce4d01.png?auto=format&fit=crop&ixlib=react-9.10.0&q=50&w=60&h=60&dpr=2',\n slack:\n 'https://zapier-images.imgix.net/storage/services/6cf3f5a461feadfba7abc93f4c395b33.png?auto=format&fit=crop&ixlib=react-9.10.0&q=50&w=60&h=60&dpr=2',\n aws: 'https://zapier-images.imgix.net/storage/services/7633e0c2a87f5c36ebe387e5e8065c92.png?auto=format&fit=crop&ixlib=react-9.10.0&q=50&w=60&h=60&dpr=2',\n stripe:\n 'https://zapier-images.imgix.net/storage/services/58576265fb574acf48e65da92b12d764.png?auto=format&fit=crop&ixlib=react-9.10.0&q=50&w=60&h=60&dpr=2',\n}\n\n// Mock vault items\nexport const mockVaultItems: VaultItem[] = [\n {\n id: '1',\n name: 'OpenAI',\n integrationId: 'openai',\n logoUrl: logos.openai,\n createdAt: new Date('2024-12-01'),\n updatedAt: new Date('2024-12-08'),\n },\n {\n id: '2',\n name: 'Anthropic',\n integrationId: 'anthropic',\n logoUrl: logos.anthropic,\n createdAt: new Date('2024-12-05'),\n updatedAt: new Date('2024-12-05'),\n },\n {\n id: '3',\n name: 'GitHub',\n integrationId: 'github',\n logoUrl: logos.github,\n createdAt: new Date('2024-11-28'),\n updatedAt: new Date('2024-12-03'),\n },\n {\n id: '4',\n name: 'Slack',\n integrationId: 'slack',\n logoUrl: logos.slack,\n createdAt: new Date('2024-12-02'),\n updatedAt: new Date('2024-12-02'),\n },\n {\n id: '5',\n name: 'AWS',\n integrationId: 'aws',\n logoUrl: logos.aws,\n createdAt: new Date('2024-11-25'),\n updatedAt: new Date('2024-12-07'),\n },\n]\n\n// Field configurations per integration\nexport const integrationFields: Record<string, VaultField[]> = {\n openai: [{ key: 'api_key', label: 'API Key', type: 'password', required: true, placeholder: 'sk-...' }],\n anthropic: [{ key: 'api_key', label: 'API Key', type: 'password', required: true, placeholder: 'sk-ant-...' }],\n twitter: [\n { key: 'username', label: 'Username', type: 'text', required: true },\n { key: 'password', label: 'Password', type: 'password', required: true },\n ],\n github: [{ key: 'personal_access_token', label: 'Personal Access Token', type: 'password', required: true, placeholder: 'ghp_...' }],\n slack: [\n { key: 'bot_token', label: 'Bot Token', type: 'password', required: true, placeholder: 'xoxb-...' },\n { key: 'signing_secret', label: 'Signing Secret', type: 'password', required: true },\n ],\n aws: [\n { key: 'access_key_id', label: 'Access Key ID', type: 'text', required: true, placeholder: 'AKIA...' },\n { key: 'secret_access_key', label: 'Secret Access Key', type: 'password', required: true },\n ],\n default: [{ key: 'api_key', label: 'API Key', type: 'password', required: true }],\n}\n\n// Available integrations for the \"Add Credential\" flow\nexport const availableIntegrations = [\n { id: 'openai', name: 'OpenAI', logoUrl: logos.openai },\n { id: 'anthropic', name: 'Anthropic', logoUrl: logos.anthropic },\n { id: 'github', name: 'GitHub', logoUrl: logos.github },\n { id: 'slack', name: 'Slack', logoUrl: logos.slack },\n { id: 'aws', name: 'AWS', logoUrl: logos.aws },\n { id: 'stripe', name: 'Stripe', logoUrl: logos.stripe },\n]\n","import { Button } from '@mdxui/primitives/button'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@mdxui/primitives/dialog'\n\ninterface VaultDeleteDialogProps {\n isOpen: boolean\n onClose: () => void\n itemName: string\n onConfirm: () => void\n}\n\nexport function VaultDeleteDialog({ isOpen, onClose, itemName, onConfirm }: VaultDeleteDialogProps) {\n return (\n <Dialog open={isOpen} onOpenChange={onClose}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Delete Credentials</DialogTitle>\n <DialogDescription>\n Are you sure you want to delete credentials for {itemName}? This action cannot be undone.\n </DialogDescription>\n </DialogHeader>\n <DialogFooter>\n <Button variant=\"outline\" onClick={onClose}>\n Cancel\n </Button>\n <Button variant=\"destructive\" onClick={onConfirm}>\n Delete\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n )\n}\n","import { Button } from '@mdxui/primitives/button'\nimport { Lock } from 'lucide-react'\n\ninterface VaultEmptyStateProps {\n onAddCredential: () => void\n}\n\nexport function VaultEmptyState({ onAddCredential }: VaultEmptyStateProps) {\n return (\n <div className=\"flex flex-col items-center justify-center rounded-md border border-dashed py-24 px-4 text-center\">\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-muted mb-4\">\n <Lock className=\"h-6 w-6 text-muted-foreground\" />\n </div>\n <h3 className=\"text-lg font-semibold mb-2\">No saved credentials</h3>\n <p className=\"text-sm text-muted-foreground mb-6 max-w-md\">\n Add API keys and account credentials for your agents to use securely.\n </p>\n <Button onClick={onAddCredential}>Add Credential</Button>\n </div>\n )\n}\n","import { Button } from '@mdxui/primitives/button'\nimport { Card } from '@mdxui/primitives/card'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@mdxui/primitives/dropdown-menu'\nimport { Key, MoreVertical } from 'lucide-react'\n\ninterface VaultItemCardProps {\n id: string\n name: string\n logoUrl?: string\n createdAt: Date\n updatedAt: Date\n onRotate: (id: string) => void\n onDelete: (id: string) => void\n}\n\nfunction formatDate(date: Date): string {\n return date.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n })\n}\n\nexport function VaultItemCard({\n id,\n name,\n logoUrl,\n createdAt,\n updatedAt,\n onRotate,\n onDelete,\n}: VaultItemCardProps) {\n const wasRotated = updatedAt.getTime() !== createdAt.getTime()\n\n return (\n <Card noPadding className=\"p-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-md bg-white overflow-hidden p-1 border border-border\">\n {logoUrl ? (\n <img\n src={logoUrl}\n alt={name}\n width={32}\n height={32}\n className=\"h-full w-full object-contain rounded-sm\"\n />\n ) : (\n <Key className=\"h-5 w-5 text-muted-foreground\" />\n )}\n </div>\n <div>\n <h4 className=\"text-sm font-medium\">{name}</h4>\n <p className=\"text-xs text-muted-foreground\">\n {wasRotated ? `Rotated: ${formatDate(updatedAt)}` : `Created: ${formatDate(createdAt)}`}\n </p>\n </div>\n </div>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon-sm\">\n <MoreVertical className=\"h-4 w-4\" />\n <span className=\"sr-only\">Open menu</span>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem onClick={() => onRotate(id)}>Rotate</DropdownMenuItem>\n <DropdownMenuItem\n className=\"text-destructive focus:text-destructive\"\n onClick={() => onDelete(id)}\n >\n Delete\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </Card>\n )\n}\n","import { useAuth } from '@mdxui/auth'\nimport { Avatar, AvatarFallback, AvatarImage } from '@mdxui/primitives/avatar'\nimport { cn } from '@mdxui/primitives/lib/utils'\nimport { useThemeStore } from '@mdxui/themes'\nimport {\n ANIMATION_CLASSES,\n OnboardingCard,\n OnboardingFooter,\n OnboardingProgress,\n SingleSelectField,\n} from '@mdxui/widgets/onboarding'\nimport { InstallSnippet } from '@mdxui/primitives/install-snippet'\nimport type { PackageManager } from '@mdxui/primitives/install-snippet'\nimport { Toaster } from '@mdxui/primitives/sonner'\nimport { ArrowUpRight, Check, Copy } from 'lucide-react'\nimport type { ReactNode } from 'react'\nimport { useCallback, useEffect, useReducer, useState } from 'react'\nimport { codeToHtml } from 'shiki'\nimport { toast } from 'sonner'\nimport { HeadlesslyLogo } from '../components/ui/headlessly-logo'\nimport { useDashboard } from '../context/dashboard-context'\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\ntype ConnectionMethod = 'cli' | 'sdk-rest' | 'mcp-docs'\n\ntype StepId = 'pick-tool' | 'pick-plan'\n\ninterface OnboardingState {\n currentStep: StepId\n connectionMethod: ConnectionMethod | null\n}\n\ntype OnboardingAction =\n | { type: 'SET_CONNECTION_METHOD'; method: ConnectionMethod }\n | { type: 'NEXT' }\n | { type: 'BACK' }\n\ninterface OnboardingUser {\n firstName?: string | null\n lastName?: string | null\n email?: string | null\n profilePictureUrl?: string | null\n}\n\ninterface ConnectionOptionConfig {\n value: string\n label: string\n}\n\ninterface CliConfig {\n /** Package to install via npx/bunx (e.g. \"@headlessly/cli\") */\n package: string\n /** Package manager command (default: \"npx\") */\n command?: PackageManager\n /** CLI commands to show after install (e.g. \"headlessly login\\nheadlessly use crm\") */\n commands: string\n /** Description shown below the commands */\n description?: string\n}\n\ninterface SdkConfig {\n /** Package to install (e.g. \"@headlessly/crm\") */\n package: string\n /** Package manager command (default: \"npm install\") */\n command?: PackageManager\n /** Description shown below the install snippet */\n description?: string\n}\n\ninterface McpConfig {\n /** Description text */\n description?: string\n /** URL for the MCP setup docs */\n docsUrl: string\n /** Label for the docs link (default: \"View MCP Setup\") */\n docsLabel?: string\n}\n\ninterface OnboardingFlowProps {\n /** User info for header */\n user?: OnboardingUser\n /** Custom logo component for the header. Defaults to HeadlesslyLogo. */\n logo?: ReactNode\n /** Connection method options (default: CLI, SDK/REST, MCP) */\n connectionOptions?: ConnectionOptionConfig[]\n /** CLI connection config */\n cli?: CliConfig\n /** SDK/REST connection config */\n sdk?: SdkConfig\n /** MCP/Editor connection config */\n mcp?: McpConfig\n /** Custom content for the pricing step. Renders a placeholder if omitted. */\n pricingContent?: ReactNode\n /** Step 1 heading */\n connectHeading?: string\n /** Step 1 description */\n connectDescription?: string\n /** Step 2 heading */\n planHeading?: string\n /** Step 2 description */\n planDescription?: string\n /** localStorage key for persisting state (default: \"onboarding\") */\n storageKey?: string\n /** Initial state override (for stories) */\n initialState?: Partial<OnboardingState>\n /** Custom class name */\n className?: string\n}\n\n// =============================================================================\n// DEFAULTS\n// =============================================================================\n\nconst DEFAULT_CONNECTION_OPTIONS: ConnectionOptionConfig[] = [\n { value: 'cli', label: 'CLI (Agent recommended)' },\n { value: 'sdk-rest', label: 'SDK / REST API' },\n { value: 'mcp-docs', label: 'MCP / Editor Config' },\n]\n\nconst DEFAULT_CLI: CliConfig = {\n package: '@headlessly/cli',\n command: 'npx',\n commands: 'headlessly login\\nheadlessly use crm',\n description: 'This opens your browser to authenticate. Nothing to copy or paste.',\n}\n\nconst DEFAULT_SDK: SdkConfig = {\n package: '@headlessly/crm',\n command: 'npm install',\n description: \"You'll generate an API key in your dashboard.\",\n}\n\nconst DEFAULT_MCP: McpConfig = {\n description: 'MCP configuration varies by tool. Our docs have step-by-step guides for each editor and agent platform.',\n docsUrl: 'https://docs.headless.ly/mcp',\n docsLabel: 'View MCP Setup',\n}\n\nconst STEP_SEQUENCE: StepId[] = ['pick-tool', 'pick-plan']\n\nconst STEP_LABELS: Record<StepId, string> = {\n 'pick-tool': 'Connect',\n 'pick-plan': 'Plan',\n}\n\nconst DEFAULT_STATE: OnboardingState = {\n currentStep: 'pick-tool',\n connectionMethod: 'cli',\n}\n\n// =============================================================================\n// STEP NAVIGATION\n// =============================================================================\n\nfunction getNextStep(currentStep: StepId): StepId | null {\n const idx = STEP_SEQUENCE.indexOf(currentStep)\n return idx < STEP_SEQUENCE.length - 1 ? STEP_SEQUENCE[idx + 1] : null\n}\n\nfunction getPrevStep(currentStep: StepId): StepId | null {\n const idx = STEP_SEQUENCE.indexOf(currentStep)\n return idx > 0 ? STEP_SEQUENCE[idx - 1] : null\n}\n\n// =============================================================================\n// REDUCER\n// =============================================================================\n\nfunction reducer(state: OnboardingState, action: OnboardingAction): OnboardingState {\n switch (action.type) {\n case 'SET_CONNECTION_METHOD':\n return { ...state, connectionMethod: action.method }\n case 'NEXT': {\n const next = getNextStep(state.currentStep)\n return next ? { ...state, currentStep: next } : state\n }\n case 'BACK': {\n const prev = getPrevStep(state.currentStep)\n return prev ? { ...state, currentStep: prev } : state\n }\n default:\n return state\n }\n}\n\n// =============================================================================\n// PERSISTENCE\n// =============================================================================\n\nfunction loadState(key: string): Partial<OnboardingState> | null {\n try {\n const raw = localStorage.getItem(key)\n return raw ? JSON.parse(raw) : null\n } catch {\n return null\n }\n}\n\nfunction saveState(key: string, state: OnboardingState) {\n try {\n localStorage.setItem(key, JSON.stringify(state))\n } catch {\n // Silently fail\n }\n}\n\n// =============================================================================\n// CODE SNIPPET\n// =============================================================================\n\nfunction useIsDark() {\n const storeMode = useThemeStore((s) => s.resolvedMode)\n const [domDark, setDomDark] = useState(() => document.documentElement.classList.contains('dark'))\n\n useEffect(() => {\n const observer = new MutationObserver(() => {\n setDomDark(document.documentElement.classList.contains('dark'))\n })\n observer.observe(document.documentElement, { attributes: true, attributeFilter: ['class'] })\n return () => observer.disconnect()\n }, [])\n\n return storeMode === 'dark' || domDark\n}\n\nfunction CodeSnippet({\n code,\n language = 'bash',\n showCopyButton = true,\n}: {\n code: string\n language?: string\n showCopyButton?: boolean\n}) {\n const isDark = useIsDark()\n const [html, setHtml] = useState('')\n const [copied, setCopied] = useState(false)\n\n useEffect(() => {\n const theme = isDark ? 'github-dark' : 'github-light'\n codeToHtml(code, { lang: language, theme })\n .then((result) => {\n setHtml(result.replace(/background-color:[^;\"]+;?/g, ''))\n })\n .catch(() => {\n setHtml(`<pre><code>${code.replace(/</g, '<').replace(/>/g, '>')}</code></pre>`)\n })\n }, [code, language, isDark])\n\n const handleCopy = useCallback(async () => {\n await navigator.clipboard.writeText(code)\n setCopied(true)\n toast.success('Copied to clipboard')\n setTimeout(() => setCopied(false), 2000)\n }, [code])\n\n return (\n <div className={ANIMATION_CLASSES.fadeInUp}>\n <div className='group relative'>\n <div className='overflow-hidden rounded-[var(--radius)] border border-border bg-muted/50'>\n {html ? (\n <div\n className='overflow-x-auto p-4 text-sm [&_code]:text-sm'\n dangerouslySetInnerHTML={{ __html: html }}\n />\n ) : (\n <pre className='overflow-x-auto p-4 text-sm'>\n <code className='text-foreground'>{code}</code>\n </pre>\n )}\n </div>\n {showCopyButton && (\n <button\n type='button'\n className='absolute right-2 top-2 rounded-[var(--radius-md)] p-2 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground'\n onClick={handleCopy}\n aria-label={copied ? 'Copied!' : 'Copy'}>\n {copied ? <Check className='h-4 w-4 text-green-500' /> : <Copy className='h-4 w-4' />}\n </button>\n )}\n </div>\n </div>\n )\n}\n\n// =============================================================================\n// STEP COMPONENTS\n// =============================================================================\n\nfunction StepPickTool({\n state,\n dispatch,\n connectionOptions,\n cli,\n sdk,\n mcp,\n heading,\n description,\n}: {\n state: OnboardingState\n dispatch: React.Dispatch<OnboardingAction>\n connectionOptions: ConnectionOptionConfig[]\n cli: CliConfig\n sdk: SdkConfig\n mcp: McpConfig\n heading: string\n description: string\n}) {\n return (\n <div>\n <h1 className='text-center text-2xl font-semibold tracking-tight'>{heading}</h1>\n <p className='mt-2 text-center text-muted-foreground'>{description}</p>\n\n <div className='mt-8'>\n <SingleSelectField\n options={connectionOptions}\n value={state.connectionMethod ?? ''}\n onChange={(val: string) => dispatch({ type: 'SET_CONNECTION_METHOD', method: val as ConnectionMethod })}\n ariaLabel='Connection method'\n />\n </div>\n\n {state.connectionMethod === 'cli' && (\n <div className='mt-6 space-y-4'>\n <InstallSnippet package={cli.package} command={cli.command ?? 'npx'} variant='muted' showToast={false} onCopy={() => toast.success('Copied to clipboard')} />\n <CodeSnippet code={cli.commands} />\n {cli.description && (\n <p className='text-sm text-muted-foreground'>{cli.description}</p>\n )}\n </div>\n )}\n\n {state.connectionMethod === 'sdk-rest' && (\n <div className='mt-6 space-y-4'>\n <InstallSnippet package={sdk.package} command={sdk.command ?? 'npm install'} variant='muted' showToast={false} onCopy={() => toast.success('Copied to clipboard')} />\n {sdk.description && (\n <p className='text-sm text-muted-foreground'>{sdk.description}</p>\n )}\n </div>\n )}\n\n {state.connectionMethod === 'mcp-docs' && (\n <div className='mt-6 space-y-4'>\n <OnboardingCard className='p-5'>\n {mcp.description && (\n <p className='text-sm text-muted-foreground'>{mcp.description}</p>\n )}\n <a\n href={mcp.docsUrl}\n target='_blank'\n rel='noopener noreferrer'\n className='mt-3 inline-flex items-center gap-1.5 text-sm font-medium text-primary hover:underline'>\n {mcp.docsLabel ?? 'View MCP Setup'}\n <ArrowUpRight className='h-3.5 w-3.5' />\n </a>\n </OnboardingCard>\n </div>\n )}\n\n <OnboardingFooter\n submitText='Continue'\n isDisabled={!state.connectionMethod}\n onSubmit={() => dispatch({ type: 'NEXT' })}\n />\n </div>\n )\n}\n\nfunction StepPickPlan({\n dispatch,\n heading,\n description,\n pricingContent,\n}: {\n dispatch: React.Dispatch<OnboardingAction>\n heading: string\n description: string\n pricingContent?: ReactNode\n}) {\n return (\n <div>\n <h1 className='text-2xl font-semibold tracking-tight'>{heading}</h1>\n <p className='mt-2 text-muted-foreground'>{description}</p>\n\n <div className='mt-8'>\n {pricingContent ?? (\n <div className='flex items-center justify-center rounded-[var(--radius)] border border-dashed border-border bg-muted/30 p-12'>\n <p className='text-sm text-muted-foreground'>Pricing component placeholder</p>\n </div>\n )}\n </div>\n\n <div className='mt-6 flex justify-start'>\n <button\n type='button'\n className='cursor-pointer text-sm text-muted-foreground hover:text-foreground'\n onClick={() => dispatch({ type: 'BACK' })}\n >\n ← Back\n </button>\n </div>\n </div>\n )\n}\n\n// =============================================================================\n// MAIN FLOW COMPONENT\n// =============================================================================\n\nexport function OnboardingFlow({\n user,\n logo,\n connectionOptions = DEFAULT_CONNECTION_OPTIONS,\n cli = DEFAULT_CLI,\n sdk = DEFAULT_SDK,\n mcp = DEFAULT_MCP,\n pricingContent,\n connectHeading = 'How will you connect?',\n connectDescription = \"Pick your integration method and we'll give you the exact setup.\",\n planHeading = 'Choose your plan',\n planDescription = 'Deploy autonomous services at any scale. No seats. No surprises.',\n storageKey = 'onboarding',\n initialState,\n className,\n}: OnboardingFlowProps) {\n const resolvedInitial: OnboardingState = {\n ...DEFAULT_STATE,\n ...(!initialState ? loadState(storageKey) : null),\n ...initialState,\n }\n\n const [state, dispatch] = useReducer(reducer, resolvedInitial)\n\n useEffect(() => {\n saveState(storageKey, state)\n }, [storageKey, state])\n\n const currentStepIndex = STEP_SEQUENCE.indexOf(state.currentStep)\n const progressSteps = STEP_SEQUENCE.map((s) => ({ name: STEP_LABELS[s], href: s }))\n\n return (\n <div className={cn('flex min-h-screen flex-col bg-background', className)}>\n <header className='fixed top-0 right-0 left-0 z-50 border-b bg-background'>\n <div className='container mx-auto flex h-16 items-center justify-between px-4'>\n {logo ?? <HeadlesslyLogo />}\n <OnboardingProgress steps={progressSteps} currentStepIndex={currentStepIndex} />\n {user ? (\n <div className='flex items-center gap-2'>\n <Avatar className='h-8 w-8'>\n <AvatarImage src={user.profilePictureUrl ?? undefined} alt={user.firstName ?? 'User'} />\n <AvatarFallback>\n {(user.firstName?.[0] ?? '') + (user.lastName?.[0] ?? '')}\n </AvatarFallback>\n </Avatar>\n {user.firstName && <span className='text-sm text-muted-foreground'>{user.firstName}</span>}\n </div>\n ) : (\n <div />\n )}\n </div>\n </header>\n\n <main className='flex-1 pt-16'>\n <div className={cn('container mx-auto px-4 py-12', state.currentStep === 'pick-plan' ? 'max-w-5xl' : 'max-w-lg')}>\n {state.currentStep === 'pick-tool' && (\n <StepPickTool\n state={state}\n dispatch={dispatch}\n connectionOptions={connectionOptions}\n cli={cli}\n sdk={sdk}\n mcp={mcp}\n heading={connectHeading}\n description={connectDescription}\n />\n )}\n {state.currentStep === 'pick-plan' && (\n <StepPickPlan\n dispatch={dispatch}\n heading={planHeading}\n description={planDescription}\n pricingContent={pricingContent}\n />\n )}\n </div>\n </main>\n <Toaster />\n </div>\n )\n}\n\n// =============================================================================\n// PAGE WRAPPER (uses useAuth)\n// =============================================================================\n\nexport function OnboardingPage() {\n const { user } = useAuth()\n const { config: _config } = useDashboard()\n\n return (\n <OnboardingFlow\n user={\n user\n ? {\n firstName: user.firstName,\n lastName: user.lastName,\n email: user.email,\n profilePictureUrl: user.profilePictureUrl,\n }\n : undefined\n }\n />\n )\n}\n","export function HeadlesslyLogo({ className }: { className?: string }) {\n return (\n <div className='flex items-center gap-1.5 h-9'>\n <span className='inline-flex rounded bg-accent/50 p-1.5'>\n <svg\n width='429'\n height='389'\n viewBox='0 0 429 389'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n className={className ?? 'h-4 w-auto'}\n aria-hidden='true'\n >\n <rect width='58.0285' height='378.74' fill='currentColor' />\n <rect x='156.163' y='330.276' width='58.0285' height='156.163' transform='rotate(90 156.163 330.276)' fill='currentColor' />\n <rect x='156.163' width='58.0285' height='156.161' transform='rotate(90 156.163 0)' fill='currentColor' />\n <rect width='58.0285' height='378.74' transform='matrix(-1 0 0 1 429 0)' fill='currentColor' />\n <rect width='58.0285' height='156.163' transform='matrix(0 1 1 0 272.837 330.276)' fill='currentColor' />\n <rect width='58.0285' height='156.163' transform='matrix(0 1 1 0 272.837 0)' fill='currentColor' />\n </svg>\n </span>\n <span className='text-sm font-semibold text-foreground'>Headlessly</span>\n </div>\n )\n}\n","import { Badge } from '@mdxui/primitives/badge'\nimport { Button } from '@mdxui/primitives/button'\nimport { Card, CardContent } from '@mdxui/primitives/card'\nimport { Checkbox } from '@mdxui/primitives/checkbox'\nimport { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from '@mdxui/primitives/dialog'\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger } from '@mdxui/primitives/dropdown-menu'\nimport { Input } from '@mdxui/primitives/input'\nimport { Label } from '@mdxui/primitives/label'\nimport { Switch } from '@mdxui/primitives/switch'\nimport { Check, ChevronDown, Circle, Copy, Link2, MoreHorizontal, Pencil, Plus, RefreshCw, Search, Trash2 } from 'lucide-react'\nimport { useMemo, useState } from 'react'\nimport { toast } from 'sonner'\nimport { mockWebhookActivity, mockWebhookEndpoints, mockWebhookEvents, type WebhookEndpoint, type WebhookEvent } from '../../lib/mock-data'\n\nexport type { WebhookEndpoint }\n\nexport interface WebhookActivity {\n delivered: number\n failed: number\n pending: number\n successRate: number\n endpointsWithIssues: { target_url: string; failures: number }[]\n}\n\ntype TimePeriod = '24h' | '7d' | '30d' | 'all'\n\nconst periodOptions: { value: TimePeriod; label: string }[] = [\n { value: '24h', label: '24H' },\n { value: '7d', label: '7D' },\n { value: '30d', label: '30D' },\n { value: 'all', label: 'All' },\n]\n\nconst periodMultipliers: Record<TimePeriod, number> = {\n '24h': 1,\n '7d': 7,\n '30d': 30,\n 'all': 365,\n}\n\nexport interface WebhooksPageProps {\n endpoints?: WebhookEndpoint[]\n availableEvents?: WebhookEvent[]\n activity?: WebhookActivity\n onCreateEndpoint?: (data: { target_url: string; events: string[]; active: boolean }) => Promise<{ id: string; secret: string }>\n onUpdateEndpoint?: (id: string, data: { target_url: string; events: string[]; active: boolean }) => Promise<void>\n onDeleteEndpoint?: (id: string) => Promise<void>\n className?: string\n}\n\nfunction formatRelativeTime(timestamp: string | null): string {\n if (!timestamp) return 'Never'\n const date = new Date(timestamp)\n const now = new Date()\n const diffInMs = now.getTime() - date.getTime()\n const diffInMinutes = Math.floor(diffInMs / (1000 * 60))\n\n if (diffInMinutes < 1) return 'Just now'\n if (diffInMinutes < 60) return `${diffInMinutes} min ago`\n const diffInHours = Math.floor(diffInMinutes / 60)\n if (diffInHours < 24) return `${diffInHours} hr ago`\n const diffInDays = Math.floor(diffInHours / 24)\n return `${diffInDays} days ago`\n}\n\nexport function WebhooksEndpointsPage({\n endpoints: initialEndpoints,\n availableEvents = mockWebhookEvents,\n activity: initialActivity,\n onCreateEndpoint,\n onUpdateEndpoint,\n onDeleteEndpoint,\n className,\n}: WebhooksPageProps = {}) {\n const allEventNames = useMemo(() => availableEvents.map((e) => e.name), [availableEvents])\n\n const eventsByCategory = useMemo(() => availableEvents.reduce((acc, event) => {\n if (!acc[event.category]) {\n acc[event.category] = []\n }\n acc[event.category].push(event)\n return acc\n }, {} as Record<string, WebhookEvent[]>), [availableEvents])\n const [endpoints, setEndpoints] = useState<WebhookEndpoint[]>(initialEndpoints ?? mockWebhookEndpoints)\n const [period, setPeriod] = useState<TimePeriod>('7d')\n const [createDialogOpen, setCreateDialogOpen] = useState(false)\n const [editDialogOpen, setEditDialogOpen] = useState(false)\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false)\n const [selectedEndpoint, setSelectedEndpoint] = useState<WebhookEndpoint | null>(null)\n const [copiedSecret, setCopiedSecret] = useState<string | null>(null)\n\n // Form state\n const [formUrl, setFormUrl] = useState('')\n const [formEvents, setFormEvents] = useState<string[]>([])\n const [formEnabled, setFormEnabled] = useState(true)\n\n const activity = initialActivity ?? mockWebhookActivity\n const multiplier = periodMultipliers[period]\n\n // Build a lookup from activity.endpointsWithIssues by URL for failure counts\n const issuesByUrl = useMemo(() => {\n const map = new Map<string, number>()\n for (const ep of activity.endpointsWithIssues) {\n map.set(ep.target_url, ep.failures)\n }\n return map\n }, [activity.endpointsWithIssues])\n\n const getFailureCount = (endpoint: WebhookEndpoint): number => {\n return issuesByUrl.get(endpoint.target_url) ?? endpoint.failureCount\n }\n\n const sortedEndpoints = useMemo(() => {\n return [...endpoints].sort((a, b) => {\n const aHasIssues = getFailureCount(a) > 0 || !a.active ? 1 : 0\n const bHasIssues = getFailureCount(b) > 0 || !b.active ? 1 : 0\n return bHasIssues - aHasIssues\n })\n }, [endpoints, issuesByUrl])\n\n const resetForm = () => {\n setFormUrl('')\n setFormEvents([...allEventNames])\n setFormEnabled(true)\n }\n\n const handleCreate = async () => {\n if (onCreateEndpoint) {\n try {\n const result = await onCreateEndpoint({ target_url: formUrl, events: formEvents, active: formEnabled })\n const newEndpoint: WebhookEndpoint = {\n id: result.id,\n target_url: formUrl,\n events: formEvents,\n active: formEnabled,\n secret: result.secret,\n status: 'Active',\n deliveryCount: 0,\n failureCount: 0,\n lastDeliveredAt: null,\n lastStatusCode: null,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n }\n setEndpoints([...endpoints, newEndpoint])\n } catch {\n toast.error('Failed to create endpoint')\n return\n }\n } else {\n const newEndpoint: WebhookEndpoint = {\n id: `ep_${Date.now()}`,\n target_url: formUrl,\n events: formEvents,\n active: formEnabled,\n secret: `whsec_${Math.random().toString(36).substring(2, 15)}`,\n status: 'Active',\n deliveryCount: 0,\n failureCount: 0,\n lastDeliveredAt: null,\n lastStatusCode: null,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n }\n setEndpoints([...endpoints, newEndpoint])\n }\n setCreateDialogOpen(false)\n resetForm()\n toast.success('Endpoint created', {\n description: 'Your webhook endpoint has been created successfully.',\n })\n }\n\n const handleEdit = async () => {\n if (!selectedEndpoint) return\n\n if (onUpdateEndpoint) {\n try {\n await onUpdateEndpoint(selectedEndpoint.id, { target_url: formUrl, events: formEvents, active: formEnabled })\n } catch {\n toast.error('Failed to update endpoint')\n return\n }\n }\n\n setEndpoints(\n endpoints.map((ep) =>\n ep.id === selectedEndpoint.id\n ? { ...ep, target_url: formUrl, events: formEvents, active: formEnabled, updatedAt: new Date().toISOString() }\n : ep,\n ),\n )\n setEditDialogOpen(false)\n setSelectedEndpoint(null)\n resetForm()\n toast.success('Endpoint updated', {\n description: 'Your webhook endpoint has been updated successfully.',\n })\n }\n\n const handleDelete = async () => {\n if (!selectedEndpoint) return\n\n if (onDeleteEndpoint) {\n try {\n await onDeleteEndpoint(selectedEndpoint.id)\n } catch {\n toast.error('Failed to delete endpoint')\n return\n }\n }\n\n setEndpoints(endpoints.filter((ep) => ep.id !== selectedEndpoint.id))\n setDeleteDialogOpen(false)\n setSelectedEndpoint(null)\n toast.success('Endpoint deleted', {\n description: 'Your webhook endpoint has been deleted.',\n })\n }\n\n const openEditDialog = (endpoint: WebhookEndpoint) => {\n setSelectedEndpoint(endpoint)\n setFormUrl(endpoint.target_url)\n setFormEvents(endpoint.events)\n setFormEnabled(endpoint.active)\n setEditDialogOpen(true)\n }\n\n const openDeleteDialog = (endpoint: WebhookEndpoint) => {\n setSelectedEndpoint(endpoint)\n setDeleteDialogOpen(true)\n }\n\n const handleCopySecret = async (endpoint: WebhookEndpoint) => {\n await navigator.clipboard.writeText(endpoint.secret)\n setCopiedSecret(endpoint.id)\n setTimeout(() => setCopiedSecret(null), 2000)\n toast.success('Secret copied to clipboard')\n }\n\n const urlValidation = (() => {\n if (!formUrl) return null\n try {\n const url = new URL(formUrl)\n if (url.protocol !== 'https:') return 'URL must use HTTPS'\n return null\n } catch {\n return 'Enter a valid URL'\n }\n })()\n\n const isFormValid = !!formUrl && !urlValidation && formEvents.length > 0\n\n const toggleEvent = (eventName: string) => {\n if (formEvents.includes(eventName)) {\n setFormEvents(formEvents.filter((e) => e !== eventName))\n } else {\n setFormEvents([...formEvents, eventName])\n }\n }\n\n const allEventsSelected = allEventNames.every((e) => formEvents.includes(e))\n\n /** Shared event picker used in both Create and Edit dialogs */\n function EventPicker({ idPrefix }: { idPrefix: string }) {\n const [eventSearch, setEventSearch] = useState('')\n const query = eventSearch.toLowerCase()\n\n const filteredByCategory = useMemo(() => {\n if (!query) return eventsByCategory\n const filtered: Record<string, typeof eventsByCategory[string]> = {}\n for (const [category, events] of Object.entries(eventsByCategory)) {\n const matching = events.filter(\n (e) => e.name.toLowerCase().includes(query) || category.toLowerCase().includes(query),\n )\n if (matching.length > 0) filtered[category] = matching\n }\n return filtered\n }, [query])\n\n return (\n <div className='space-y-3'>\n <div className='flex items-center justify-between'>\n <Label>Events to subscribe</Label>\n {allEventsSelected ? (\n <button className='text-xs text-muted-foreground hover:text-foreground cursor-pointer transition-colors' onClick={() => setFormEvents([])}>\n Clear\n </button>\n ) : (\n <button className='text-xs text-muted-foreground hover:text-foreground cursor-pointer transition-colors' onClick={() => setFormEvents([...allEventNames])}>\n Select All\n </button>\n )}\n </div>\n <div className='rounded-lg border'>\n {/* Search input — flush with border, no padding */}\n <div className='relative border-b'>\n <Search className='absolute left-3 top-1/2 -translate-y-1/2 size-3.5 text-muted-foreground pointer-events-none' />\n <input\n placeholder='Search events...'\n value={eventSearch}\n onChange={(e) => setEventSearch(e.target.value)}\n className='w-full h-9 pl-9 pr-3 text-sm bg-transparent outline-none placeholder:text-muted-foreground'\n />\n </div>\n {/* Scrollable event list */}\n <div className='h-[320px] overflow-y-auto divide-y'>\n {Object.keys(filteredByCategory).length === 0 ? (\n <div className='p-3 text-sm text-muted-foreground text-center'>No events match your search</div>\n ) : (\n Object.entries(filteredByCategory).map(([category, events]) => {\n const categoryEvents = events.map((e) => e.name)\n const allSelected = categoryEvents.every((e) => formEvents.includes(e))\n const someSelected = categoryEvents.some((e) => formEvents.includes(e))\n\n const toggleCategory = () => {\n if (allSelected) {\n setFormEvents(formEvents.filter((e) => !categoryEvents.includes(e)))\n } else {\n setFormEvents([...new Set([...formEvents, ...categoryEvents])])\n }\n }\n\n return (\n <div key={category} className='p-3 space-y-2'>\n <div className='flex items-center gap-2'>\n <Checkbox\n id={`${idPrefix}-category-${category}`}\n checked={allSelected}\n onCheckedChange={toggleCategory}\n className={someSelected && !allSelected ? 'opacity-50' : ''}\n />\n <Label htmlFor={`${idPrefix}-category-${category}`} className='text-sm font-medium cursor-pointer'>\n {category}\n </Label>\n </div>\n <div className='ml-6 space-y-1.5'>\n {events.map((event) => (\n <div key={event.name} className='flex items-center gap-2'>\n <Checkbox\n id={`${idPrefix}-${event.name}`}\n checked={formEvents.includes(event.name)}\n onCheckedChange={() => toggleEvent(event.name)}\n />\n <Label htmlFor={`${idPrefix}-${event.name}`} className='text-sm font-normal text-muted-foreground cursor-pointer'>\n {event.name}\n </Label>\n </div>\n ))}\n </div>\n </div>\n )\n })\n )}\n </div>\n </div>\n <p className='text-xs text-muted-foreground'>\n {formEvents.length} event{formEvents.length !== 1 ? 's' : ''} selected\n </p>\n </div>\n )\n }\n\n return (\n <>\n <div className={`mx-auto w-full max-w-7xl flex-1 px-4 py-4 space-y-4 ${className ?? ''}`}>\n {/* Header */}\n <div className='flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between'>\n <div className='pb-2 sm:pb-6'>\n <h1 className='text-2xl font-semibold tracking-tight'>Webhooks</h1>\n <p className='text-muted-foreground'>Manage and monitor your webhook endpoints.</p>\n </div>\n <div className='flex items-center gap-2 shrink-0'>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant='outline' className='w-fit justify-between gap-1'>\n {periodOptions.find((o) => o.value === period)?.label}\n <ChevronDown className='h-4 w-4 opacity-50' />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align='end'>\n {periodOptions.map((option) => (\n <DropdownMenuItem key={option.value} onClick={() => setPeriod(option.value)}>\n {option.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n <Dialog open={createDialogOpen} onOpenChange={setCreateDialogOpen}>\n <DialogTrigger asChild>\n <Button onClick={resetForm}>\n <Plus className='h-4 w-4' />\n Add Endpoint\n </Button>\n </DialogTrigger>\n <DialogContent className='sm:max-w-xl'>\n <DialogHeader>\n <DialogTitle>Add Webhook Endpoint</DialogTitle>\n <DialogDescription>Configure a new endpoint to receive webhook events.</DialogDescription>\n </DialogHeader>\n <div className='space-y-6'>\n {/* URL and Status */}\n <div className='space-y-4'>\n <div className='space-y-2'>\n <Label htmlFor='url'>Endpoint URL</Label>\n <Input\n id='url'\n placeholder='https://api.example.com/webhooks'\n value={formUrl}\n onChange={(e) => setFormUrl(e.target.value)}\n />\n {urlValidation && <p className='text-xs text-destructive'>{urlValidation}</p>}\n </div>\n <div className='flex items-center justify-between rounded-lg border p-3'>\n <div className='space-y-0.5'>\n <Label htmlFor='enabled' className='text-sm font-medium'>\n Active\n </Label>\n <p className='text-xs text-muted-foreground'>Enable this endpoint to receive events</p>\n </div>\n <Switch id='enabled' checked={formEnabled} onCheckedChange={setFormEnabled} />\n </div>\n </div>\n\n {/* Events */}\n <EventPicker idPrefix='create' />\n </div>\n <DialogFooter>\n <Button variant='outline' onClick={() => setCreateDialogOpen(false)}>\n Cancel\n </Button>\n <Button onClick={handleCreate} disabled={!isFormValid}>\n Create Endpoint\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </div>\n </div>\n\n {/* Summary Line */}\n {endpoints.length > 0 && (\n <p className='text-sm text-muted-foreground'>\n {endpoints.length} endpoint{endpoints.length !== 1 ? 's' : ''}{' '}\n <span className='text-border'>|</span> {activity.successRate}% delivery rate{' '}\n <span className='text-border'>|</span> {periodOptions.find((o) => o.value === period)?.label}\n </p>\n )}\n\n {/* Endpoints List */}\n <div className='space-y-3'>\n {sortedEndpoints.map((endpoint) => {\n const baseFailures = getFailureCount(endpoint)\n const scaledFailures = Math.round(baseFailures * multiplier)\n const hasIssues = scaledFailures > 0\n\n return (\n <Card key={endpoint.id}>\n <CardContent className='p-4 py-0'>\n <div className='flex items-start justify-between gap-4'>\n <div className='min-w-0 flex-1 space-y-1'>\n {/* Line 1: Status + URL */}\n <div className='flex items-center gap-2'>\n <Circle\n className={`h-2 w-2 shrink-0 ${\n hasIssues\n ? 'fill-warning text-warning'\n : !endpoint.active\n ? 'fill-muted-foreground text-muted-foreground'\n : 'fill-success text-success'\n }`}\n />\n <span className='font-mono text-sm truncate'>{endpoint.target_url}</span>\n {!endpoint.active && (\n <Badge variant='secondary' className='shrink-0'>\n Disabled\n </Badge>\n )}\n </div>\n {/* Line 2: Metadata */}\n <div className='flex items-center gap-1 text-sm text-muted-foreground ml-4 flex-wrap'>\n <span>\n {endpoint.events.length} event{endpoint.events.length !== 1 ? 's' : ''}\n </span>\n <span>·</span>\n <span>{endpoint.deliveryCount} delivered</span>\n <span>·</span>\n <span>Last delivery {formatRelativeTime(endpoint.lastDeliveredAt).toLowerCase()}</span>\n {endpoint.lastStatusCode != null && (\n <>\n <span>·</span>\n <span className='font-mono text-xs'>{endpoint.lastStatusCode}</span>\n </>\n )}\n {hasIssues && (\n <>\n <span>·</span>\n <span className='text-destructive text-sm'>\n {scaledFailures} failure{scaledFailures !== 1 ? 's' : ''}\n </span>\n <span>·</span>\n <a\n href={`/webhooks/logs?endpoint=${endpoint.id}&status=failed`}\n className='text-sm text-muted-foreground hover:text-foreground transition-colors'\n >\n View logs\n </a>\n </>\n )}\n </div>\n </div>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant='ghost' size='icon' className='h-8 w-8 shrink-0'>\n <MoreHorizontal className='h-4 w-4' />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align='end'>\n <DropdownMenuItem onClick={() => openEditDialog(endpoint)}>\n <Pencil className='h-4 w-4' />\n Edit\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => handleCopySecret(endpoint)}>\n {copiedSecret === endpoint.id ? <Check className='h-4 w-4' /> : <Copy className='h-4 w-4' />}\n Copy Secret\n </DropdownMenuItem>\n <DropdownMenuItem>\n <RefreshCw className='h-4 w-4' />\n Regenerate Secret\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem className='text-destructive focus:text-destructive' onClick={() => openDeleteDialog(endpoint)}>\n <Trash2 className='h-4 w-4' />\n Delete\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </CardContent>\n </Card>\n )\n })}\n {endpoints.length === 0 && (\n <Card className='border-dashed border bg-transparent shadow-none'>\n <CardContent className='py-16'>\n <div className='flex flex-col items-center justify-center gap-4 text-center'>\n <div className='rounded-full bg-muted p-4'>\n <Link2 className='h-8 w-8 text-muted-foreground' />\n </div>\n <div>\n <p className='font-medium'>No endpoints configured</p>\n <p className='text-sm text-muted-foreground mt-1'>Add your first endpoint to start receiving webhook events.</p>\n </div>\n <Button onClick={() => setCreateDialogOpen(true)} className='mt-2'>\n Add Your First Endpoint\n </Button>\n </div>\n </CardContent>\n </Card>\n )}\n </div>\n </div>\n\n {/* Edit Dialog */}\n <Dialog open={editDialogOpen} onOpenChange={setEditDialogOpen}>\n <DialogContent className='sm:max-w-xl'>\n <DialogHeader>\n <DialogTitle>Edit Endpoint</DialogTitle>\n <DialogDescription>Update your webhook endpoint configuration.</DialogDescription>\n </DialogHeader>\n <div className='space-y-6'>\n {/* URL and Status */}\n <div className='space-y-4'>\n <div className='space-y-2'>\n <Label htmlFor='edit-url'>Endpoint URL</Label>\n <Input\n id='edit-url'\n placeholder='https://api.example.com/webhooks'\n value={formUrl}\n onChange={(e) => setFormUrl(e.target.value)}\n />\n {urlValidation && <p className='text-xs text-destructive'>{urlValidation}</p>}\n </div>\n <div className='flex items-center justify-between rounded-lg border p-3'>\n <div className='space-y-0.5'>\n <Label htmlFor='edit-enabled' className='text-sm font-medium'>\n Active\n </Label>\n <p className='text-xs text-muted-foreground'>Enable this endpoint to receive events</p>\n </div>\n <Switch id='edit-enabled' checked={formEnabled} onCheckedChange={setFormEnabled} />\n </div>\n </div>\n\n {/* Events */}\n <EventPicker idPrefix='edit' />\n </div>\n <DialogFooter>\n <Button variant='outline' onClick={() => setEditDialogOpen(false)}>\n Cancel\n </Button>\n <Button onClick={handleEdit} disabled={!isFormValid}>\n Save Changes\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n\n {/* Delete Dialog */}\n <Dialog open={deleteDialogOpen} onOpenChange={setDeleteDialogOpen}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Delete Endpoint</DialogTitle>\n <DialogDescription>Are you sure you want to delete this endpoint? This action cannot be undone.</DialogDescription>\n </DialogHeader>\n {selectedEndpoint && (\n <div className='rounded-md bg-muted p-3'>\n <p className='font-mono text-sm truncate'>{selectedEndpoint.target_url}</p>\n </div>\n )}\n <DialogFooter>\n <Button variant='outline' onClick={() => setDeleteDialogOpen(false)}>\n Cancel\n </Button>\n <Button variant='destructive' onClick={handleDelete}>\n Delete\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </>\n )\n}\n","import { Card, CardContent } from '@mdxui/primitives/card'\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@mdxui/primitives/collapsible'\nimport { Input } from '@mdxui/primitives/input'\nimport { BookOpen, ChevronRight, Search } from 'lucide-react'\nimport { useState } from 'react'\nimport { JsonViewer } from '../../components/ui'\nimport { mockWebhookEvents, type WebhookEvent } from '../../lib/mock-data'\n\nexport type { WebhookEvent }\n\nexport interface WebhooksEventCatalogPageProps {\n events?: WebhookEvent[]\n className?: string\n}\n\nexport function WebhooksEventCatalogPage({ events = mockWebhookEvents }: WebhooksEventCatalogPageProps) {\n const [searchQuery, setSearchQuery] = useState('')\n const [expandedEvents, setExpandedEvents] = useState<Set<string>>(new Set())\n\n const filteredEvents = events.filter(\n (event) =>\n event.name.toLowerCase().includes(searchQuery.toLowerCase()) ||\n event.description.toLowerCase().includes(searchQuery.toLowerCase()) ||\n event.category.toLowerCase().includes(searchQuery.toLowerCase()),\n )\n\n // Group events by category\n const groupedEvents = filteredEvents.reduce<Record<string, WebhookEvent[]>>((acc, event) => {\n if (!acc[event.category]) {\n acc[event.category] = []\n }\n acc[event.category].push(event)\n return acc\n }, {})\n\n const toggleEvent = (eventId: string) => {\n const newExpanded = new Set(expandedEvents)\n if (newExpanded.has(eventId)) {\n newExpanded.delete(eventId)\n } else {\n newExpanded.add(eventId)\n }\n setExpandedEvents(newExpanded)\n }\n\n return (\n <div className='flex flex-col h-full'>\n {/* Fixed header */}\n <div className='shrink-0 mx-auto w-full max-w-7xl px-4 pt-4 pb-2'>\n <div className='flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between'>\n <div>\n <h1 className='text-2xl font-semibold tracking-tight'>Event Catalog</h1>\n <p className='text-muted-foreground'>Browse and search available webhook events.</p>\n </div>\n <div className='relative shrink-0'>\n <Search className='absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground' />\n <Input\n placeholder='Search events...'\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className='pl-9 w-full sm:w-[300px]'\n />\n </div>\n </div>\n </div>\n\n {/* Scrollable content */}\n <div className='flex-1 overflow-y-auto'>\n <div className='mx-auto w-full max-w-7xl px-4 py-4 space-y-6'>\n {Object.entries(groupedEvents).map(([category, events]) => (\n <div key={category}>\n <h2 className='text-sm font-semibold text-muted-foreground mb-3 pt-2'>{category}</h2>\n <div className='space-y-2'>\n {events.map((event) => (\n <Card key={event.id} noPadding>\n <Collapsible open={expandedEvents.has(event.id)} onOpenChange={() => toggleEvent(event.id)}>\n <CollapsibleTrigger asChild>\n <CardContent className='p-4 cursor-pointer hover:bg-muted/50 transition-colors'>\n <div className='flex items-center gap-3'>\n <ChevronRight\n className={`h-4 w-4 text-muted-foreground transition-transform ${\n expandedEvents.has(event.id) ? 'rotate-90' : ''\n }`}\n />\n <div className='flex-1 min-w-0'>\n <p className='font-mono text-sm font-medium'>{event.name}</p>\n <p className='text-sm text-muted-foreground truncate'>{event.description}</p>\n </div>\n </div>\n </CardContent>\n </CollapsibleTrigger>\n <CollapsibleContent>\n <div className='px-4 pb-4 ml-7 mr-7'>\n <JsonViewer data={event.payloadSchema} />\n </div>\n </CollapsibleContent>\n </Collapsible>\n </Card>\n ))}\n </div>\n </div>\n ))}\n {Object.keys(groupedEvents).length === 0 && (\n <Card>\n <CardContent className='py-16'>\n <div className='flex flex-col items-center justify-center gap-4 text-center'>\n <div className='rounded-full bg-muted p-4'>\n <BookOpen className='h-8 w-8 text-muted-foreground' />\n </div>\n <div>\n <p className='font-medium'>No events found</p>\n <p className='text-sm text-muted-foreground mt-1'>Try adjusting your search query.</p>\n </div>\n </div>\n </CardContent>\n </Card>\n )}\n </div>\n </div>\n </div>\n )\n}\n","import { Button } from '@mdxui/primitives/button'\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@mdxui/primitives/dropdown-menu'\nimport { cn } from '@mdxui/primitives/lib/utils'\nimport { ScrollArea } from '@mdxui/primitives/scroll-area'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@mdxui/primitives/table'\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@mdxui/primitives/tooltip'\nimport { Check, ChevronDown, Copy, RefreshCw, ScrollText, X } from 'lucide-react'\nimport { useState } from 'react'\nimport { toast } from 'sonner'\nimport { StatusBadge, StatusDot } from '../../components/ui'\nimport { mockWebhookLogs, type WebhookLog } from '../../lib/mock-data'\n\ntype StatusFilter = 'all' | 'success' | 'failed'\n\nconst statusFilterOptions: { value: StatusFilter; label: string }[] = [\n { value: 'all', label: 'All Status' },\n { value: 'success', label: 'Success' },\n { value: 'failed', label: 'Failed' },\n]\n\nfunction formatRelativeTime(isoTimestamp: string): string {\n const now = Date.now()\n const then = new Date(isoTimestamp).getTime()\n if (isNaN(then)) return isoTimestamp\n\n const diffMs = now - then\n if (diffMs < 0) return 'just now'\n\n const seconds = Math.floor(diffMs / 1000)\n if (seconds < 60) return `${seconds}s ago`\n\n const minutes = Math.floor(seconds / 60)\n if (minutes < 60) return `${minutes}m ago`\n\n const hours = Math.floor(minutes / 60)\n if (hours < 24) return `${hours}h ago`\n\n const days = Math.floor(hours / 24)\n return `${days}d ago`\n}\n\nfunction formatFullTimestamp(isoTimestamp: string): string {\n const d = new Date(isoTimestamp)\n if (isNaN(d.getTime())) return isoTimestamp\n return new Intl.DateTimeFormat(undefined, {\n dateStyle: 'medium',\n timeStyle: 'medium',\n }).format(d)\n}\n\nfunction formatLatency(ms: number): string {\n if (ms >= 1000) {\n return `${(ms / 1000).toFixed(2)}s`\n }\n return `${ms}ms`\n}\n\n/** Lightweight JSON syntax highlighter — matches EventsLogDetail pattern */\nfunction highlightJson(json: string): React.ReactNode[] {\n const nodes: React.ReactNode[] = []\n const tokenRe = /(\"(?:[^\"\\\\]|\\\\.)*\")\\s*(:)|(\"(?:[^\"\\\\]|\\\\.)*\")|(-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)\\b|(true|false|null)\\b|([{}[\\],])/g\n let lastIndex = 0\n let match: RegExpExecArray | null\n\n while ((match = tokenRe.exec(json)) !== null) {\n if (match.index > lastIndex) {\n nodes.push(json.slice(lastIndex, match.index))\n }\n\n if (match[1] != null) {\n nodes.push(<span key={`k${match.index}`} className=\"text-primary\">{match[1]}</span>)\n nodes.push(<span key={`c${match.index}`} className=\"text-muted-foreground\">{':'}</span>)\n } else if (match[3] != null) {\n nodes.push(<span key={`s${match.index}`} className=\"text-chart-3\">{match[3]}</span>)\n } else if (match[4] != null) {\n nodes.push(<span key={`n${match.index}`} className=\"text-chart-1\">{match[4]}</span>)\n } else if (match[5] != null) {\n nodes.push(<span key={`b${match.index}`} className=\"text-chart-2\">{match[5]}</span>)\n } else if (match[6] != null) {\n nodes.push(<span key={`p${match.index}`} className=\"text-muted-foreground\">{match[6]}</span>)\n }\n\n lastIndex = tokenRe.lastIndex\n }\n\n if (lastIndex < json.length) {\n nodes.push(json.slice(lastIndex))\n }\n\n return nodes\n}\n\nfunction JsonBlock({ data, label }: { data: unknown; label: string }) {\n const [copied, setCopied] = useState(false)\n const text = typeof data === 'string' ? data : JSON.stringify(data, null, 2)\n\n const handleCopy = () => {\n navigator.clipboard.writeText(text).then(() => {\n setCopied(true)\n setTimeout(() => setCopied(false), 1500)\n })\n }\n\n return (\n <div>\n <span className=\"text-xs font-medium text-muted-foreground uppercase tracking-wider block mb-1\">{label}</span>\n <div className=\"relative rounded-[var(--radius-md)] border border-border bg-muted/50 overflow-hidden\">\n <button\n onClick={handleCopy}\n className=\"absolute top-1.5 right-1.5 p-1 text-muted-foreground/50 hover:text-foreground cursor-pointer transition-colors\"\n >\n {copied ? <Check className=\"size-3.5\" /> : <Copy className=\"size-3.5\" />}\n </button>\n <pre className=\"p-3 pr-9 text-xs font-mono whitespace-pre-wrap break-all max-h-[500px] overflow-y-auto\">\n {highlightJson(text)}\n </pre>\n </div>\n </div>\n )\n}\n\nfunction CopyableDetail({ label, value }: { label: string; value: string }) {\n const [copied, setCopied] = useState(false)\n\n const handleCopy = () => {\n navigator.clipboard.writeText(value).then(() => {\n setCopied(true)\n setTimeout(() => setCopied(false), 1500)\n })\n }\n\n return (\n <div className=\"px-3 py-2 flex items-start justify-between gap-2\">\n <div className=\"min-w-0\">\n <span className=\"text-xs font-medium text-muted-foreground block mb-0.5\">{label}</span>\n <span className=\"text-xs font-mono text-foreground break-all\">{value}</span>\n </div>\n <button\n onClick={handleCopy}\n className=\"shrink-0 mt-4 p-0.5 text-muted-foreground/50 hover:text-foreground cursor-pointer transition-colors\"\n >\n {copied ? <Check className=\"size-3\" /> : <Copy className=\"size-3\" />}\n </button>\n </div>\n )\n}\n\nexport function WebhooksLogsPage() {\n const [statusFilter, setStatusFilter] = useState<StatusFilter>('all')\n const [selectedLog, setSelectedLog] = useState<WebhookLog | null>(null)\n const [panelOpen, setPanelOpen] = useState(false)\n\n const filteredLogs = mockWebhookLogs.filter((log) => {\n if (statusFilter === 'all') return true\n if (statusFilter === 'success') return log.statusCode >= 200 && log.statusCode < 300\n return log.statusCode >= 400\n })\n\n const handleRowClick = (log: WebhookLog) => {\n setSelectedLog(log)\n setPanelOpen(true)\n }\n\n const handleClose = () => {\n setPanelOpen(false)\n }\n\n const handleRetry = () => {\n toast.success('Webhook retry triggered', {\n description: 'The webhook delivery will be retried shortly.',\n })\n setPanelOpen(false)\n }\n\n return (\n <div className='@container relative flex flex-col min-h-screen h-full overflow-hidden'>\n <div className='mx-auto w-full max-w-7xl flex-1 px-4 py-4 space-y-4 overflow-auto'>\n <div className='flex items-center justify-between'>\n <div className='pb-6'>\n <h1 className='text-2xl font-semibold tracking-tight'>Webhook Logs</h1>\n <p className='text-muted-foreground'>View webhook delivery history and debug issues.</p>\n </div>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant='outline' className='w-[140px] justify-between'>\n {statusFilterOptions.find((o) => o.value === statusFilter)?.label}\n <ChevronDown className='h-4 w-4 opacity-50' />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align='end' className='w-[140px]'>\n {statusFilterOptions.map((option) => (\n <DropdownMenuItem key={option.value} onClick={() => setStatusFilter(option.value)}>\n {option.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n\n {/* Logs Table */}\n <TooltipProvider delayDuration={300}>\n <div className='@container w-full min-w-0'>\n <Table className=\"min-w-[600px]\">\n <TableHeader>\n <TableRow className=\"hover:bg-transparent\">\n <TableHead className='w-[4%] pl-4'></TableHead>\n <TableHead className=\"w-[10%]\">Time</TableHead>\n <TableHead className=\"w-[20%]\">Event</TableHead>\n <TableHead className=\"w-[20%]\">Endpoint</TableHead>\n <TableHead className=\"w-[14%] hidden @[800px]:table-cell\">Request ID</TableHead>\n <TableHead className=\"w-[10%]\">Status</TableHead>\n <TableHead className=\"w-[10%] hidden @[700px]:table-cell\">Latency</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {filteredLogs.map((log) => (\n <TableRow\n key={log.id}\n tabIndex={0}\n aria-selected={selectedLog?.id === log.id && panelOpen}\n className={cn(\n 'cursor-pointer text-muted-foreground hover:text-foreground/80 transition-colors',\n selectedLog?.id === log.id && panelOpen\n ? 'bg-muted/50'\n : 'hover:bg-muted/50',\n )}\n onClick={() => handleRowClick(log)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleRowClick(log)\n }\n }}\n >\n <TableCell className='pl-4'>\n <StatusDot status={log.statusCode} />\n </TableCell>\n <TableCell>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className='text-xs font-mono whitespace-nowrap'>\n {formatRelativeTime(log.timestamp)}\n </span>\n </TooltipTrigger>\n <TooltipContent side=\"top\">\n {formatFullTimestamp(log.timestamp)}\n </TooltipContent>\n </Tooltip>\n </TableCell>\n <TableCell className='text-sm text-foreground'>\n <span className=\"font-mono truncate block\" title={log.eventName}>{log.eventName}</span>\n </TableCell>\n <TableCell>\n <span className='text-xs font-mono truncate block' title={log.endpointUrl}>\n {new URL(log.endpointUrl).hostname}\n </span>\n </TableCell>\n <TableCell className='hidden @[800px]:table-cell max-w-[140px]'>\n <span className='text-xs font-mono truncate block' title={log.requestId}>\n {log.requestId}\n </span>\n </TableCell>\n <TableCell>\n <StatusBadge status={log.statusCode} />\n </TableCell>\n <TableCell className='hidden @[700px]:table-cell'>\n <span className=\"text-xs font-mono\">{formatLatency(log.latency)}</span>\n </TableCell>\n </TableRow>\n ))}\n {filteredLogs.length === 0 && (\n <TableRow>\n <TableCell colSpan={7} className='py-16'>\n <div className='flex flex-col items-center justify-center gap-4 text-center'>\n <div className='rounded-full bg-muted p-4'>\n <ScrollText className='h-8 w-8 text-muted-foreground' />\n </div>\n <div>\n <p className='font-medium'>No logs found</p>\n <p className='text-sm text-muted-foreground mt-1'>No webhook deliveries match the current filter.</p>\n </div>\n </div>\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n </TooltipProvider>\n </div>\n\n {/* Backdrop */}\n <div\n className={`absolute inset-0 z-50 bg-background/30 transition-opacity duration-200 ${\n panelOpen && selectedLog ? 'opacity-100' : 'opacity-0 pointer-events-none'\n }`}\n onClick={handleClose}\n />\n\n {/* Floating detail panel */}\n <div\n role=\"dialog\"\n aria-label=\"Webhook log details\"\n className={`absolute z-[51] rounded-[var(--radius)] border border-border bg-background overflow-hidden flex flex-col transition-transform duration-200 ease-out inset-x-4 bottom-4 h-[90%] @[600px]:inset-y-4 @[600px]:left-auto @[600px]:right-4 @[600px]:h-auto @[600px]:w-[500px] @[600px]:max-w-[calc(80%-24px)] ${\n panelOpen && selectedLog\n ? 'shadow-lg translate-y-0 @[600px]:translate-x-0'\n : 'shadow-none translate-y-[calc(100%+16px)] @[600px]:translate-y-0 @[600px]:translate-x-[calc(100%+16px)]'\n }`}\n >\n {selectedLog && (\n <>\n {/* Header */}\n <div className=\"flex items-start justify-between gap-3 px-3 py-3 @[400px]:px-4 border-b border-border bg-background/80 backdrop-blur-sm shrink-0\">\n <div className=\"flex flex-col gap-1.5 min-w-0\">\n <h3 className=\"text-base font-semibold text-foreground font-mono truncate\" title={selectedLog.eventName}>\n {selectedLog.eventName}\n </h3>\n <div className=\"flex items-center gap-2 flex-wrap\">\n <StatusBadge status={selectedLog.statusCode} />\n <span className=\"text-xs text-muted-foreground\">·</span>\n <span className=\"text-xs text-muted-foreground\">{formatLatency(selectedLog.latency)}</span>\n <span className=\"text-xs text-muted-foreground\">·</span>\n <time className=\"text-xs text-muted-foreground\" title={selectedLog.timestamp}>\n {formatFullTimestamp(selectedLog.timestamp)}\n </time>\n </div>\n </div>\n <Button variant=\"ghost\" size=\"icon\" onClick={handleClose} className=\"shrink-0 h-7 w-7\">\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n\n {/* Scrollable content */}\n <ScrollArea className=\"flex-1 min-h-0 min-w-0\">\n <div className=\"p-3 @[400px]:p-4 space-y-4 @[400px]:space-y-5 overflow-x-hidden\">\n {/* Request Payload */}\n <JsonBlock data={selectedLog.requestPayload} label=\"Request Payload\" />\n\n {/* Response */}\n {selectedLog.responseBody ? (\n <JsonBlock data={selectedLog.responseBody} label=\"Response\" />\n ) : (\n <div>\n <span className=\"text-xs font-medium text-muted-foreground uppercase tracking-wider block mb-1\">Response</span>\n <p className='text-sm text-muted-foreground'>No response received</p>\n </div>\n )}\n\n {/* Details */}\n <div>\n <span className=\"text-xs font-medium text-muted-foreground uppercase tracking-wider block mb-1\">Details</span>\n <div className=\"rounded-[var(--radius-md)] border border-border bg-muted/50 divide-y divide-border\">\n <div className=\"px-3 py-2\">\n <span className=\"text-xs font-medium text-muted-foreground block mb-0.5\">Endpoint</span>\n <a href={selectedLog.endpointUrl} target=\"_blank\" rel=\"noopener noreferrer\" className=\"text-xs font-mono text-primary hover:underline break-all\">{selectedLog.endpointUrl}</a>\n </div>\n <div className=\"px-3 py-2\">\n <span className=\"text-xs font-medium text-muted-foreground block mb-0.5\">Status Code</span>\n <span className=\"text-xs font-mono text-foreground\">{selectedLog.statusCode}</span>\n </div>\n <div className=\"px-3 py-2\">\n <span className=\"text-xs font-medium text-muted-foreground block mb-0.5\">Latency</span>\n <span className=\"text-xs font-mono text-foreground\">{formatLatency(selectedLog.latency)}</span>\n </div>\n <CopyableDetail label=\"Request ID\" value={selectedLog.requestId} />\n <CopyableDetail label=\"Delivery ID\" value={selectedLog.id} />\n </div>\n </div>\n </div>\n </ScrollArea>\n\n {/* Footer — retry for failed deliveries */}\n {selectedLog.statusCode >= 400 && (\n <div className=\"shrink-0 px-4 py-3 bg-background/80 backdrop-blur-sm\">\n <Button variant=\"outline\" size=\"sm\" onClick={handleRetry} className=\"w-full gap-1.5 text-sm cursor-pointer\">\n <RefreshCw className=\"h-2.5 w-2.5\" />\n Retry Delivery\n </Button>\n </div>\n )}\n </>\n )}\n </div>\n </div>\n )\n}\n","// routes/hooks.ts\nimport { useCollections } from '@mdxui/admin/data-browser'\nimport { useAuth } from '@mdxui/auth'\nimport { useEffect, useState } from 'react'\nimport type { NavSubItem } from './types'\n\n/**\n * Hook that fetches CRM collections and returns them as nav sub-items\n * for the Database route. Waits for auth token before fetching.\n */\nexport function useCollectionSubItems(): { items: NavSubItem[]; className?: string } {\n const { user, getAccessToken } = useAuth()\n const [token, setToken] = useState<string>()\n\n useEffect(() => {\n if (user) getAccessToken().then((t) => setToken(t))\n }, [user, getAccessToken])\n\n const { collectionsByGroup } = useCollections(token)\n const crmCollections = collectionsByGroup['CRM'] ?? []\n\n return {\n items: crmCollections.map((c) => ({\n title: c.name,\n url: `/database/${c.slug}`,\n })),\n className: crmCollections.length > 0 ? 'max-h-[200px] overflow-y-auto' : undefined,\n }\n}\n","// routes/definitions.ts\nimport {\n BillingPage,\n DataBrowserPage,\n EventsLogPage,\n // IntegrationsPage,\n KeysPage,\n OverviewPage,\n SettingsAccountPage,\n SettingsUsersPage,\n // VaultPage,\n WebhooksEndpointsPage,\n WebhooksEventCatalogPage,\n WebhooksLogsPage,\n} from '../pages'\nimport { useCollectionSubItems } from './hooks'\nimport type { RouteDefinition } from './types'\n\n/**\n * Central route definitions registry.\n *\n * Single source of truth for all built-in dashboard routes.\n * Both the TanStack Router config and sidebar navigation are\n * derived from this array — no duplication.\n *\n * To add a new page:\n * 1. Create the page component in pages/\n * 2. Export it from pages/index.ts\n * 3. Add a RouteDefinition entry here\n * 4. Add the key to DashboardRoutes in types/config.ts\n */\nexport const routeDefinitions: RouteDefinition[] = [\n // ── Main group ────────────────────────────────────────────\n {\n key: 'overview',\n path: '/',\n label: 'Overview',\n icon: 'BarChart3',\n component: OverviewPage,\n index: true,\n },\n {\n key: 'events',\n path: 'events',\n label: 'Events',\n icon: 'Activity',\n component: EventsLogPage,\n },\n {\n key: 'database',\n path: 'database',\n label: 'Database',\n icon: 'Database',\n component: DataBrowserPage,\n useSubItems: useCollectionSubItems,\n additionalRoutes: [{ path: 'database/$slug', component: DataBrowserPage }],\n },\n {\n key: 'webhooks',\n path: 'webhooks',\n label: 'Webhooks',\n icon: 'Webhook',\n component: WebhooksEndpointsPage,\n redirectToFirstChild: true,\n children: [\n { path: 'endpoints', label: 'Endpoints', component: WebhooksEndpointsPage },\n { path: 'logs', label: 'Logs', component: WebhooksLogsPage },\n { path: 'event-catalog', label: 'Event Catalog', component: WebhooksEventCatalogPage },\n ],\n },\n // {\n // key: 'integrations',\n // path: 'integrations',\n // label: 'Integrations',\n // icon: 'Plug',\n // component: IntegrationsPage,\n // },\n // {\n // key: 'vault',\n // path: 'vault',\n // label: 'Vault',\n // icon: 'Lock',\n // component: VaultPage,\n // },\n {\n key: 'keys',\n path: 'keys',\n label: 'API Keys',\n icon: 'Key',\n component: KeysPage,\n },\n // ── Admin group ───────────────────────────────────────────\n {\n key: 'settings',\n path: 'settings',\n label: 'Settings',\n icon: 'Settings',\n group: 'admin',\n component: SettingsAccountPage,\n additionalRoutes: [\n { path: 'settings/account', component: SettingsAccountPage },\n { path: 'settings/billing', component: BillingPage },\n { path: 'settings/users', component: SettingsUsersPage },\n ],\n },\n]\n","import { WebLink, useWebLocation } from '@mdxui/navigation/web'\nimport { SidebarNav, type SidebarNavItem } from '@mdxui/primitives/sidebar-nav'\nimport type { LucideIcon } from 'lucide-react'\n\nexport interface NavItem {\n title: string\n url: string\n icon?: LucideIcon\n isActive?: boolean\n items?: NavItem[]\n subItemsClassName?: string\n}\n\ninterface NavMainProps {\n items: NavItem[]\n}\n\n/** TanStack Router Link component adapter for SidebarNav */\nfunction RouterLink({ href, children, className, ...rest }: { href: string; children: React.ReactNode; className?: string; [key: string]: unknown }) {\n return (\n <WebLink to={href} className={className} {...rest}>\n {children}\n </WebLink>\n )\n}\n\nexport function NavMain({ items }: NavMainProps) {\n const { pathname } = useWebLocation()\n\n // Map NavItem[] to SidebarNavItem[] (they're compatible)\n const navItems: SidebarNavItem[] = items\n\n return (\n <SidebarNav\n items={navItems}\n currentPath={pathname}\n label=\"Dashboard\"\n LinkComponent={RouterLink}\n />\n )\n}\n","import { useWebNavigate } from '@mdxui/navigation/web'\nimport { SidebarUser, type SidebarUserData, type SidebarUserMenuItem } from '@mdxui/primitives/sidebar-user'\nimport { useThemeStore } from '@mdxui/themes'\nimport { BadgeCheck, CreditCard } from 'lucide-react'\nimport { useMemo } from 'react'\n\ninterface NavUser {\n id: string\n name: string\n email: string\n avatar?: string\n}\n\ninterface NavUserProps {\n user: NavUser\n onSignOut: () => void | Promise<void>\n}\n\nexport function NavUser({ user, onSignOut }: NavUserProps) {\n const resolvedTheme = useThemeStore((s) => s.resolvedMode)\n const setMode = useThemeStore((s) => s.setMode)\n const navigate = useWebNavigate()\n\n const userData: SidebarUserData = {\n name: user.name,\n email: user.email,\n avatar: user.avatar,\n }\n\n const menuItems: SidebarUserMenuItem[] = useMemo(\n () => [\n { label: 'Account', icon: <BadgeCheck />, onClick: () => navigate('/settings/account') },\n { label: 'Billing', icon: <CreditCard />, onClick: () => navigate('/settings/billing') },\n ],\n [navigate],\n )\n\n return (\n <SidebarUser\n user={userData}\n onSignOut={onSignOut}\n theme={resolvedTheme === 'dark' ? 'dark' : 'light'}\n onThemeToggle={() => setMode(resolvedTheme === 'dark' ? 'light' : 'dark')}\n menuItems={menuItems}\n />\n )\n}\n","import { useAuth } from '@mdxui/auth'\nimport { Button } from '@mdxui/primitives/button'\nimport { ArrowRight, BarChart3, Key, Shield, Users } from 'lucide-react'\nimport { useDashboard } from '../../context/dashboard-context'\n\ninterface FeatureCardProps {\n icon: React.ReactNode\n title: string\n description: string\n}\n\nfunction FeatureCard({ icon, title, description }: FeatureCardProps) {\n return (\n <div className=\"flex flex-col items-center text-center p-6 rounded-lg border bg-card\">\n <div className=\"p-3 rounded-full bg-primary/10 text-primary mb-4\">\n {icon}\n </div>\n <h3 className=\"font-semibold mb-2\">{title}</h3>\n <p className=\"text-sm text-muted-foreground\">{description}</p>\n </div>\n )\n}\n\nexport function LandingPage() {\n const { signIn } = useAuth()\n const { config } = useDashboard()\n const brandName = config.branding?.name ?? 'Dashboard'\n\n return (\n <div className=\"min-h-screen bg-background flex flex-col\">\n {/* Header */}\n <header className=\"border-b\">\n <div className=\"container mx-auto px-4 h-16 flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n {config.branding?.logo}\n <span className=\"font-semibold text-lg\">{brandName}</span>\n </div>\n <Button onClick={() => signIn()}>\n Sign In\n <ArrowRight className=\"ml-2 h-4 w-4\" />\n </Button>\n </div>\n </header>\n\n {/* Hero */}\n <main className=\"flex-1\">\n <section className=\"container mx-auto px-4 py-24 text-center\">\n <h1 className=\"text-4xl sm:text-5xl font-bold tracking-tight mb-6\">\n Welcome to {brandName}\n </h1>\n <p className=\"text-xl text-muted-foreground max-w-2xl mx-auto mb-8\">\n Manage your API keys, monitor usage, and collaborate with your team—all in one place.\n </p>\n <Button size=\"lg\" onClick={() => signIn()}>\n Get Started\n <ArrowRight className=\"ml-2 h-4 w-4\" />\n </Button>\n </section>\n\n {/* Features */}\n <section className=\"container mx-auto px-4 py-16\">\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6\">\n <FeatureCard\n icon={<Key className=\"h-6 w-6\" />}\n title=\"API Key Management\"\n description=\"Create, rotate, and revoke API keys with fine-grained permissions.\"\n />\n <FeatureCard\n icon={<BarChart3 className=\"h-6 w-6\" />}\n title=\"Usage Analytics\"\n description=\"Monitor API requests, track usage patterns, and optimize performance.\"\n />\n <FeatureCard\n icon={<Users className=\"h-6 w-6\" />}\n title=\"Team Collaboration\"\n description=\"Invite team members, manage roles, and control access levels.\"\n />\n <FeatureCard\n icon={<Shield className=\"h-6 w-6\" />}\n title=\"Security First\"\n description=\"Enterprise-grade security with audit logs and compliance controls.\"\n />\n </div>\n </section>\n </main>\n\n {/* Footer */}\n <footer className=\"border-t py-8\">\n <div className=\"container mx-auto px-4 text-center text-sm text-muted-foreground\">\n <p>© {new Date().getFullYear()} {brandName}. All rights reserved.</p>\n </div>\n </footer>\n </div>\n )\n}\n","import * as React from 'react'\nimport { Avatar, AvatarFallback, AvatarImage } from '@mdxui/primitives/avatar'\nimport { Button } from '@mdxui/primitives/button'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@mdxui/primitives/card'\nimport { Input } from '@mdxui/primitives/input'\nimport { Label } from '@mdxui/primitives/label'\nimport { User, Mail, Upload } from 'lucide-react'\n\ninterface UserProfileProps {\n user?: {\n name?: string\n email?: string\n avatar?: string\n firstName?: string\n lastName?: string\n }\n onUpdate?: (data: any) => void\n readonly?: boolean\n}\n\n/**\n * UserProfile - Profile management component\n *\n * Provides a form interface for users to manage their personal information\n * including avatar, name, and email.\n *\n * @example\n * ```tsx\n * <UserProfile\n * user={{ name: 'John Doe', email: 'john@example.com.ai' }}\n * onUpdate={(data) => console.log(data)}\n * />\n * ```\n */\nexport function UserProfile({ user, onUpdate, readonly = false }: UserProfileProps) {\n const [formData, setFormData] = React.useState({\n firstName: user?.firstName || user?.name?.split(' ')[0] || '',\n lastName: user?.lastName || user?.name?.split(' ').slice(1).join(' ') || '',\n email: user?.email || '',\n avatar: user?.avatar || '',\n })\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault()\n onUpdate?.(formData)\n }\n\n const handleChange = (field: string, value: string) => {\n setFormData((prev) => ({ ...prev, [field]: value }))\n }\n\n const getInitials = () => {\n const first = formData.firstName[0] || ''\n const last = formData.lastName[0] || ''\n return (first + last).toUpperCase() || 'U'\n }\n\n return (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <User className=\"h-5 w-5\" />\n Personal Information\n </CardTitle>\n <CardDescription>Update your personal details and profile picture</CardDescription>\n </CardHeader>\n <CardContent>\n <form onSubmit={handleSubmit} className=\"space-y-6\">\n {/* Avatar Section */}\n <div className=\"flex items-center gap-6\">\n <Avatar className=\"h-20 w-20\">\n <AvatarImage src={formData.avatar} alt={`${formData.firstName} ${formData.lastName}`} />\n <AvatarFallback className=\"text-lg\">{getInitials()}</AvatarFallback>\n </Avatar>\n <div className=\"flex flex-col gap-2\">\n <Button type=\"button\" variant=\"outline\" size=\"sm\" disabled={readonly}>\n <Upload className=\"mr-2 h-4 w-4\" />\n Change Avatar\n </Button>\n <p className=\"text-xs text-muted-foreground\">\n JPG, PNG or GIF. Max size 2MB.\n </p>\n </div>\n </div>\n\n {/* Name Fields */}\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"firstName\">First Name</Label>\n <Input\n id=\"firstName\"\n value={formData.firstName}\n onChange={(e) => handleChange('firstName', e.target.value)}\n placeholder=\"John\"\n disabled={readonly}\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"lastName\">Last Name</Label>\n <Input\n id=\"lastName\"\n value={formData.lastName}\n onChange={(e) => handleChange('lastName', e.target.value)}\n placeholder=\"Doe\"\n disabled={readonly}\n />\n </div>\n </div>\n\n {/* Email Field */}\n <div className=\"space-y-2\">\n <Label htmlFor=\"email\" className=\"flex items-center gap-2\">\n <Mail className=\"h-4 w-4\" />\n Email Address\n </Label>\n <Input\n id=\"email\"\n type=\"email\"\n value={formData.email}\n onChange={(e) => handleChange('email', e.target.value)}\n placeholder=\"john@example.com.ai\"\n disabled\n />\n <p className=\"text-xs text-muted-foreground\">\n Email cannot be changed. Contact support for assistance.\n </p>\n </div>\n\n {/* Actions */}\n {!readonly && (\n <div className=\"flex justify-end gap-2\">\n <Button type=\"button\" variant=\"outline\">\n Cancel\n </Button>\n <Button type=\"submit\">Save Changes</Button>\n </div>\n )}\n </form>\n </CardContent>\n </Card>\n )\n}\n","import * as React from 'react'\nimport type { APIKeysProps } from 'mdxui'\nimport { Button } from '@mdxui/primitives/button'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@mdxui/primitives/card'\nimport { Badge } from '@mdxui/primitives/badge'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@mdxui/primitives/table'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from '@mdxui/primitives/dialog'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@mdxui/primitives/dropdown-menu'\nimport { Input } from '@mdxui/primitives/input'\nimport { Label } from '@mdxui/primitives/label'\nimport { Copy, Eye, EyeOff, Key, MoreHorizontal, Plus, Trash2 } from 'lucide-react'\nimport { toast } from 'sonner'\n\ninterface APIKey {\n id: string\n name: string\n key: string\n prefix: string\n created: Date\n lastUsed?: Date\n status: 'active' | 'inactive'\n}\n\n/**\n * APIKeyManager - API key CRUD interface\n *\n * Provides a complete interface for managing API keys including creation,\n * viewing, copying, and deletion. Auto-wires to the apiKeys collection.\n *\n * @example\n * ```tsx\n * <APIKeyManager\n * project=\"proj_123\"\n * allowCreate={true}\n * allowDelete={true}\n * showLastUsed={true}\n * />\n * ```\n */\nexport function APIKeyManager({\n project,\n allowCreate = true,\n allowDelete = true,\n showLastUsed = true,\n keys: initialKeys,\n}: APIKeysProps) {\n const [keys, setKeys] = React.useState<APIKey[]>(\n initialKeys || [\n {\n id: '1',\n name: 'Production API Key',\n key: 'sk_live_1234567890abcdef',\n prefix: 'sk_live_',\n created: new Date('2024-01-15'),\n lastUsed: new Date('2024-12-19'),\n status: 'active',\n },\n {\n id: '2',\n name: 'Development API Key',\n key: 'sk_test_abcdef1234567890',\n prefix: 'sk_test_',\n created: new Date('2024-02-20'),\n lastUsed: new Date('2024-12-18'),\n status: 'active',\n },\n ]\n )\n\n const [isCreateDialogOpen, setIsCreateDialogOpen] = React.useState(false)\n const [newKeyName, setNewKeyName] = React.useState('')\n const [visibleKeys, setVisibleKeys] = React.useState<Set<string>>(new Set())\n const [createdKey, setCreatedKey] = React.useState<string | null>(null)\n\n const toggleKeyVisibility = (keyId: string) => {\n setVisibleKeys((prev) => {\n const next = new Set(prev)\n if (next.has(keyId)) {\n next.delete(keyId)\n } else {\n next.add(keyId)\n }\n return next\n })\n }\n\n const copyToClipboard = async (text: string, label: string) => {\n try {\n await navigator.clipboard.writeText(text)\n toast.success(`${label} copied to clipboard`)\n } catch (err) {\n toast.error('Failed to copy to clipboard')\n }\n }\n\n const handleCreateKey = () => {\n if (!newKeyName.trim()) {\n toast.error('Please enter a key name')\n return\n }\n\n const newKey: APIKey = {\n id: String(keys.length + 1),\n name: newKeyName,\n key: `sk_live_${Math.random().toString(36).substring(2, 24)}`,\n prefix: 'sk_live_',\n created: new Date(),\n status: 'active',\n }\n\n setKeys([...keys, newKey])\n setCreatedKey(newKey.key)\n setNewKeyName('')\n toast.success('API key created successfully')\n }\n\n const handleDeleteKey = (keyId: string) => {\n setKeys(keys.filter((k) => k.id !== keyId))\n toast.success('API key deleted')\n }\n\n const formatDate = (date: Date) => {\n return new Intl.DateTimeFormat('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n }).format(date)\n }\n\n const maskKey = (_key: string, prefix: string) => {\n return `${prefix}${'•'.repeat(20)}`\n }\n\n return (\n <div className=\"space-y-4\">\n <Card>\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <div>\n <CardTitle className=\"flex items-center gap-2\">\n <Key className=\"h-5 w-5\" />\n API Keys\n </CardTitle>\n <CardDescription>\n Manage API keys for project: <span className=\"font-mono\">{project}</span>\n </CardDescription>\n </div>\n {allowCreate && (\n <Dialog open={isCreateDialogOpen} onOpenChange={setIsCreateDialogOpen}>\n <DialogTrigger asChild>\n <Button>\n <Plus className=\"mr-2 h-4 w-4\" />\n Create Key\n </Button>\n </DialogTrigger>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Create New API Key</DialogTitle>\n <DialogDescription>\n Create a new API key for your project. Make sure to copy it now as you won't be able to see it again.\n </DialogDescription>\n </DialogHeader>\n <div className=\"space-y-4 py-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"keyName\">Key Name</Label>\n <Input\n id=\"keyName\"\n value={newKeyName}\n onChange={(e) => setNewKeyName(e.target.value)}\n placeholder=\"e.g., Production API Key\"\n />\n </div>\n {createdKey && (\n <div className=\"space-y-2\">\n <Label>Your New API Key</Label>\n <div className=\"flex items-center gap-2\">\n <Input value={createdKey} readOnly className=\"font-mono text-sm\" />\n <Button\n type=\"button\"\n size=\"icon\"\n variant=\"outline\"\n onClick={() => copyToClipboard(createdKey, 'API key')}\n >\n <Copy className=\"h-4 w-4\" />\n </Button>\n </div>\n <p className=\"text-sm text-muted-foreground\">\n Make sure to copy this key now. You won't be able to see it again!\n </p>\n </div>\n )}\n </div>\n <DialogFooter>\n {!createdKey ? (\n <>\n <Button variant=\"outline\" onClick={() => setIsCreateDialogOpen(false)}>\n Cancel\n </Button>\n <Button onClick={handleCreateKey}>Create Key</Button>\n </>\n ) : (\n <Button\n onClick={() => {\n setCreatedKey(null)\n setIsCreateDialogOpen(false)\n }}\n >\n Done\n </Button>\n )}\n </DialogFooter>\n </DialogContent>\n </Dialog>\n )}\n </div>\n </CardHeader>\n <CardContent>\n {keys.length === 0 ? (\n <div className=\"text-center py-12\">\n <Key className=\"h-12 w-12 mx-auto text-muted-foreground mb-4\" />\n <h3 className=\"text-lg font-semibold mb-2\">No API Keys</h3>\n <p className=\"text-sm text-muted-foreground mb-4\">\n Create your first API key to start making requests\n </p>\n {allowCreate && (\n <Button onClick={() => setIsCreateDialogOpen(true)}>\n <Plus className=\"mr-2 h-4 w-4\" />\n Create Key\n </Button>\n )}\n </div>\n ) : (\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Name</TableHead>\n <TableHead>Key</TableHead>\n <TableHead>Status</TableHead>\n <TableHead>Created</TableHead>\n {showLastUsed && <TableHead>Last Used</TableHead>}\n <TableHead className=\"w-[50px]\" />\n </TableRow>\n </TableHeader>\n <TableBody>\n {keys.map((apiKey) => (\n <TableRow key={apiKey.id}>\n <TableCell className=\"font-medium\">{apiKey.name}</TableCell>\n <TableCell>\n <div className=\"flex items-center gap-2\">\n <code className=\"text-sm font-mono\">\n {visibleKeys.has(apiKey.id) ? apiKey.key : maskKey(apiKey.key, apiKey.prefix)}\n </code>\n <Button\n size=\"icon\"\n variant=\"ghost\"\n onClick={() => toggleKeyVisibility(apiKey.id)}\n >\n {visibleKeys.has(apiKey.id) ? (\n <EyeOff className=\"h-4 w-4\" />\n ) : (\n <Eye className=\"h-4 w-4\" />\n )}\n </Button>\n <Button\n size=\"icon\"\n variant=\"ghost\"\n onClick={() => copyToClipboard(apiKey.key, 'API key')}\n >\n <Copy className=\"h-4 w-4\" />\n </Button>\n </div>\n </TableCell>\n <TableCell>\n <Badge variant={apiKey.status === 'active' ? 'default' : 'secondary'}>\n {apiKey.status}\n </Badge>\n </TableCell>\n <TableCell className=\"text-sm text-muted-foreground\">\n {formatDate(apiKey.created)}\n </TableCell>\n {showLastUsed && (\n <TableCell className=\"text-sm text-muted-foreground\">\n {apiKey.lastUsed ? formatDate(apiKey.lastUsed) : 'Never'}\n </TableCell>\n )}\n <TableCell>\n {allowDelete && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\">\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem\n variant=\"destructive\"\n onClick={() => handleDeleteKey(apiKey.id)}\n >\n <Trash2 className=\"mr-2 h-4 w-4\" />\n Delete\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n )}\n </CardContent>\n </Card>\n </div>\n )\n}\n","import * as React from 'react'\nimport type { TeamProps } from 'mdxui'\nimport { Avatar, AvatarFallback, AvatarImage } from '@mdxui/primitives/avatar'\nimport { Button } from '@mdxui/primitives/button'\nimport { Badge } from '@mdxui/primitives/badge'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@mdxui/primitives/card'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@mdxui/primitives/table'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from '@mdxui/primitives/dialog'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@mdxui/primitives/dropdown-menu'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@mdxui/primitives/select'\nimport { Input } from '@mdxui/primitives/input'\nimport { Label } from '@mdxui/primitives/label'\nimport { MoreHorizontal, Plus, Mail, UserPlus, Trash2, Users } from 'lucide-react'\nimport { toast } from 'sonner'\n\ninterface TeamMember {\n id: string\n name: string\n email: string\n role: 'owner' | 'admin' | 'member' | 'viewer'\n avatar?: string\n status: 'active' | 'pending' | 'inactive'\n joinedAt: Date\n}\n\n/**\n * TeamManager - Team member management component\n *\n * Provides a complete interface for managing team members including invitations,\n * role changes, and member removal. Auto-wires to the members collection.\n *\n * @example\n * ```tsx\n * <TeamManager\n * workspace=\"ws_123\"\n * allowInvite={true}\n * allowRoleChange={true}\n * allowRemove={true}\n * />\n * ```\n */\nexport function TeamManager({\n workspace,\n allowInvite = true,\n allowRoleChange = true,\n allowRemove = true,\n members: initialMembers,\n}: TeamProps) {\n const [members, setMembers] = React.useState<TeamMember[]>(\n initialMembers || [\n {\n id: '1',\n name: 'John Doe',\n email: 'john@example.com.ai',\n role: 'owner',\n avatar: '',\n status: 'active',\n joinedAt: new Date('2024-01-01'),\n },\n {\n id: '2',\n name: 'Jane Smith',\n email: 'jane@example.com.ai',\n role: 'admin',\n avatar: '',\n status: 'active',\n joinedAt: new Date('2024-02-15'),\n },\n {\n id: '3',\n name: 'Bob Johnson',\n email: 'bob@example.com.ai',\n role: 'member',\n avatar: '',\n status: 'pending',\n joinedAt: new Date('2024-12-15'),\n },\n ]\n )\n\n const [isInviteDialogOpen, setIsInviteDialogOpen] = React.useState(false)\n const [inviteEmail, setInviteEmail] = React.useState('')\n const [inviteRole, setInviteRole] = React.useState<TeamMember['role']>('member')\n\n const handleInviteMember = () => {\n if (!inviteEmail.trim() || !inviteEmail.includes('@')) {\n toast.error('Please enter a valid email address')\n return\n }\n\n const newMember: TeamMember = {\n id: String(members.length + 1),\n name: inviteEmail.split('@')[0],\n email: inviteEmail,\n role: inviteRole,\n status: 'pending',\n joinedAt: new Date(),\n }\n\n setMembers([...members, newMember])\n setInviteEmail('')\n setInviteRole('member')\n setIsInviteDialogOpen(false)\n toast.success(`Invitation sent to ${inviteEmail}`)\n }\n\n const handleRoleChange = (memberId: string, newRole: TeamMember['role']) => {\n setMembers(\n members.map((m) =>\n m.id === memberId ? { ...m, role: newRole } : m\n )\n )\n toast.success('Member role updated')\n }\n\n const handleRemoveMember = (memberId: string) => {\n const member = members.find((m) => m.id === memberId)\n if (member?.role === 'owner') {\n toast.error('Cannot remove the workspace owner')\n return\n }\n setMembers(members.filter((m) => m.id !== memberId))\n toast.success('Member removed from workspace')\n }\n\n const getInitials = (name: string) => {\n return name\n .split(' ')\n .map((n) => n[0])\n .join('')\n .toUpperCase()\n }\n\n const getRoleBadgeVariant = (role: TeamMember['role']) => {\n switch (role) {\n case 'owner':\n return 'default'\n case 'admin':\n return 'secondary'\n default:\n return 'outline'\n }\n }\n\n const getStatusBadgeVariant = (status: TeamMember['status']) => {\n switch (status) {\n case 'active':\n return 'default'\n case 'pending':\n return 'secondary'\n default:\n return 'outline'\n }\n }\n\n const formatDate = (date: Date) => {\n return new Intl.DateTimeFormat('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n }).format(date)\n }\n\n return (\n <div className=\"space-y-4\">\n <Card>\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <div>\n <CardTitle className=\"flex items-center gap-2\">\n <Users className=\"h-5 w-5\" />\n Team Members\n </CardTitle>\n <CardDescription>\n Manage team members for workspace: <span className=\"font-mono\">{workspace}</span>\n </CardDescription>\n </div>\n {allowInvite && (\n <Dialog open={isInviteDialogOpen} onOpenChange={setIsInviteDialogOpen}>\n <DialogTrigger asChild>\n <Button>\n <Plus className=\"mr-2 h-4 w-4\" />\n Invite Member\n </Button>\n </DialogTrigger>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Invite Team Member</DialogTitle>\n <DialogDescription>\n Send an invitation to a new team member. They will receive an email with instructions to join.\n </DialogDescription>\n </DialogHeader>\n <div className=\"space-y-4 py-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"email\">Email Address</Label>\n <Input\n id=\"email\"\n type=\"email\"\n value={inviteEmail}\n onChange={(e) => setInviteEmail(e.target.value)}\n placeholder=\"colleague@example.com.ai\"\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"role\">Role</Label>\n <Select value={inviteRole} onValueChange={(value) => setInviteRole(value as TeamMember['role'])}>\n <SelectTrigger id=\"role\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"admin\">Admin</SelectItem>\n <SelectItem value=\"member\">Member</SelectItem>\n <SelectItem value=\"viewer\">Viewer</SelectItem>\n </SelectContent>\n </Select>\n <p className=\"text-xs text-muted-foreground\">\n Choose the appropriate role for this team member\n </p>\n </div>\n </div>\n <DialogFooter>\n <Button variant=\"outline\" onClick={() => setIsInviteDialogOpen(false)}>\n Cancel\n </Button>\n <Button onClick={handleInviteMember}>\n <Mail className=\"mr-2 h-4 w-4\" />\n Send Invitation\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n )}\n </div>\n </CardHeader>\n <CardContent>\n {members.length === 0 ? (\n <div className=\"text-center py-12\">\n <UserPlus className=\"h-12 w-12 mx-auto text-muted-foreground mb-4\" />\n <h3 className=\"text-lg font-semibold mb-2\">No Team Members</h3>\n <p className=\"text-sm text-muted-foreground mb-4\">\n Invite team members to collaborate on this workspace\n </p>\n {allowInvite && (\n <Button onClick={() => setIsInviteDialogOpen(true)}>\n <Plus className=\"mr-2 h-4 w-4\" />\n Invite Member\n </Button>\n )}\n </div>\n ) : (\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Member</TableHead>\n <TableHead>Role</TableHead>\n <TableHead>Status</TableHead>\n <TableHead>Joined</TableHead>\n <TableHead className=\"w-[50px]\" />\n </TableRow>\n </TableHeader>\n <TableBody>\n {members.map((member) => (\n <TableRow key={member.id}>\n <TableCell>\n <div className=\"flex items-center gap-3\">\n <Avatar className=\"h-8 w-8\">\n <AvatarImage src={member.avatar} alt={member.name} />\n <AvatarFallback>{getInitials(member.name)}</AvatarFallback>\n </Avatar>\n <div>\n <div className=\"font-medium\">{member.name}</div>\n <div className=\"text-sm text-muted-foreground\">{member.email}</div>\n </div>\n </div>\n </TableCell>\n <TableCell>\n {allowRoleChange && member.role !== 'owner' ? (\n <Select\n value={member.role}\n onValueChange={(value) =>\n handleRoleChange(member.id, value as TeamMember['role'])\n }\n >\n <SelectTrigger className=\"w-[120px]\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"admin\">Admin</SelectItem>\n <SelectItem value=\"member\">Member</SelectItem>\n <SelectItem value=\"viewer\">Viewer</SelectItem>\n </SelectContent>\n </Select>\n ) : (\n <Badge variant={getRoleBadgeVariant(member.role)}>\n {member.role}\n </Badge>\n )}\n </TableCell>\n <TableCell>\n <Badge variant={getStatusBadgeVariant(member.status)}>\n {member.status}\n </Badge>\n </TableCell>\n <TableCell className=\"text-sm text-muted-foreground\">\n {formatDate(member.joinedAt)}\n </TableCell>\n <TableCell>\n {allowRemove && member.role !== 'owner' && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\">\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuLabel>Actions</DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n variant=\"destructive\"\n onClick={() => handleRemoveMember(member.id)}\n >\n <Trash2 className=\"mr-2 h-4 w-4\" />\n Remove\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n )}\n </CardContent>\n </Card>\n </div>\n )\n}\n","import * as React from 'react'\nimport type { BillingProps } from 'mdxui'\nimport { Button } from '@mdxui/primitives/button'\nimport { Badge } from '@mdxui/primitives/badge'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@mdxui/primitives/card'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@mdxui/primitives/table'\nimport { Separator } from '@mdxui/primitives/separator'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from '@mdxui/primitives/dialog'\nimport { Input } from '@mdxui/primitives/input'\nimport { Label } from '@mdxui/primitives/label'\nimport {\n CreditCard,\n Download,\n Calendar,\n DollarSign,\n Plus,\n Trash2,\n CheckCircle2,\n} from 'lucide-react'\nimport { toast } from 'sonner'\n\ninterface Subscription {\n id: string\n plan: string\n status: 'active' | 'canceled' | 'past_due'\n amount: number\n currency: string\n interval: 'month' | 'year'\n currentPeriodStart: Date\n currentPeriodEnd: Date\n cancelAtPeriodEnd: boolean\n}\n\ninterface Invoice {\n id: string\n date: Date\n amount: number\n currency: string\n status: 'paid' | 'pending' | 'failed'\n pdfUrl?: string\n}\n\ninterface PaymentMethod {\n id: string\n type: 'card' | 'bank_account'\n last4: string\n brand?: string\n expiryMonth?: number\n expiryYear?: number\n isDefault: boolean\n}\n\n/**\n * Billing - Subscription and billing management component\n *\n * Provides a complete interface for managing subscriptions, viewing invoices,\n * and managing payment methods. Auto-wires to the subscriptions collection.\n *\n * @example\n * ```tsx\n * <Billing\n * customer=\"cus_123\"\n * showInvoices={true}\n * showPaymentMethods={true}\n * showUsage={true}\n * />\n * ```\n */\nexport function Billing({\n customer,\n showInvoices = true,\n showPaymentMethods = true,\n showUsage = true,\n subscription: initialSubscription,\n}: BillingProps) {\n const [subscription] = React.useState<Subscription>(\n initialSubscription || {\n id: 'sub_123',\n plan: 'Pro',\n status: 'active',\n amount: 29.99,\n currency: 'USD',\n interval: 'month',\n currentPeriodStart: new Date('2024-12-01'),\n currentPeriodEnd: new Date('2025-01-01'),\n cancelAtPeriodEnd: false,\n }\n )\n\n const [invoices] = React.useState<Invoice[]>([\n {\n id: 'in_001',\n date: new Date('2024-12-01'),\n amount: 29.99,\n currency: 'USD',\n status: 'paid',\n pdfUrl: '#',\n },\n {\n id: 'in_002',\n date: new Date('2024-11-01'),\n amount: 29.99,\n currency: 'USD',\n status: 'paid',\n pdfUrl: '#',\n },\n {\n id: 'in_003',\n date: new Date('2024-10-01'),\n amount: 29.99,\n currency: 'USD',\n status: 'paid',\n pdfUrl: '#',\n },\n ])\n\n const [paymentMethods, setPaymentMethods] = React.useState<PaymentMethod[]>([\n {\n id: 'pm_001',\n type: 'card',\n last4: '4242',\n brand: 'Visa',\n expiryMonth: 12,\n expiryYear: 2025,\n isDefault: true,\n },\n {\n id: 'pm_002',\n type: 'card',\n last4: '5555',\n brand: 'Mastercard',\n expiryMonth: 6,\n expiryYear: 2026,\n isDefault: false,\n },\n ])\n\n const [isAddPaymentMethodOpen, setIsAddPaymentMethodOpen] = React.useState(false)\n\n const formatCurrency = (amount: number, currency: string) => {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency,\n }).format(amount)\n }\n\n const formatDate = (date: Date) => {\n return new Intl.DateTimeFormat('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n }).format(date)\n }\n\n const getStatusBadgeVariant = (status: string) => {\n switch (status) {\n case 'active':\n case 'paid':\n return 'default'\n case 'canceled':\n case 'failed':\n return 'destructive'\n case 'past_due':\n case 'pending':\n return 'secondary'\n default:\n return 'outline'\n }\n }\n\n const handleRemovePaymentMethod = (methodId: string) => {\n const method = paymentMethods.find((pm) => pm.id === methodId)\n if (method?.isDefault) {\n toast.error('Cannot remove default payment method')\n return\n }\n setPaymentMethods(paymentMethods.filter((pm) => pm.id !== methodId))\n toast.success('Payment method removed')\n }\n\n const handleSetDefaultPaymentMethod = (methodId: string) => {\n setPaymentMethods(\n paymentMethods.map((pm) => ({\n ...pm,\n isDefault: pm.id === methodId,\n }))\n )\n toast.success('Default payment method updated')\n }\n\n return (\n <div className=\"space-y-6\">\n {/* Page Header */}\n <div>\n <h1 className=\"text-3xl font-bold tracking-tight\">Billing</h1>\n <p className=\"text-muted-foreground mt-2\">\n Manage your subscription and payment methods for customer:{' '}\n <span className=\"font-mono\">{customer}</span>\n </p>\n </div>\n <Separator />\n\n {/* Current Subscription */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <DollarSign className=\"h-5 w-5\" />\n Current Subscription\n </CardTitle>\n <CardDescription>Your current plan and billing cycle</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"flex items-start justify-between\">\n <div className=\"space-y-1\">\n <div className=\"flex items-center gap-2\">\n <h3 className=\"text-2xl font-bold\">{subscription.plan} Plan</h3>\n <Badge variant={getStatusBadgeVariant(subscription.status)}>\n {subscription.status}\n </Badge>\n </div>\n <p className=\"text-sm text-muted-foreground\">\n {formatCurrency(subscription.amount, subscription.currency)} per{' '}\n {subscription.interval}\n </p>\n </div>\n <Button variant=\"outline\">Change Plan</Button>\n </div>\n <Separator />\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <div className=\"space-y-1\">\n <p className=\"text-sm font-medium\">Current Period</p>\n <p className=\"text-sm text-muted-foreground\">\n {formatDate(subscription.currentPeriodStart)} -{' '}\n {formatDate(subscription.currentPeriodEnd)}\n </p>\n </div>\n <div className=\"space-y-1\">\n <p className=\"text-sm font-medium\">Next Billing Date</p>\n <p className=\"text-sm text-muted-foreground flex items-center gap-1\">\n <Calendar className=\"h-4 w-4\" />\n {formatDate(subscription.currentPeriodEnd)}\n </p>\n </div>\n </div>\n {!subscription.cancelAtPeriodEnd && (\n <Button variant=\"outline\" className=\"w-full sm:w-auto\">\n Cancel Subscription\n </Button>\n )}\n </CardContent>\n </Card>\n\n {/* Payment Methods */}\n {showPaymentMethods && (\n <Card>\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <div>\n <CardTitle className=\"flex items-center gap-2\">\n <CreditCard className=\"h-5 w-5\" />\n Payment Methods\n </CardTitle>\n <CardDescription>Manage your payment methods</CardDescription>\n </div>\n <Dialog open={isAddPaymentMethodOpen} onOpenChange={setIsAddPaymentMethodOpen}>\n <DialogTrigger asChild>\n <Button variant=\"outline\">\n <Plus className=\"mr-2 h-4 w-4\" />\n Add Method\n </Button>\n </DialogTrigger>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Add Payment Method</DialogTitle>\n <DialogDescription>\n Add a new credit card or bank account for billing\n </DialogDescription>\n </DialogHeader>\n <div className=\"space-y-4 py-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"cardNumber\">Card Number</Label>\n <Input id=\"cardNumber\" placeholder=\"1234 5678 9012 3456\" />\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"expiry\">Expiry</Label>\n <Input id=\"expiry\" placeholder=\"MM/YY\" />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"cvc\">CVC</Label>\n <Input id=\"cvc\" placeholder=\"123\" />\n </div>\n </div>\n </div>\n <DialogFooter>\n <Button variant=\"outline\" onClick={() => setIsAddPaymentMethodOpen(false)}>\n Cancel\n </Button>\n <Button onClick={() => setIsAddPaymentMethodOpen(false)}>\n Add Payment Method\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </div>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n {paymentMethods.map((method) => (\n <div\n key={method.id}\n className=\"flex items-center justify-between rounded-lg border p-4\"\n >\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-full bg-muted\">\n <CreditCard className=\"h-5 w-5\" />\n </div>\n <div>\n <div className=\"flex items-center gap-2\">\n <span className=\"font-medium\">\n {method.brand} •••• {method.last4}\n </span>\n {method.isDefault && (\n <Badge variant=\"outline\" className=\"text-xs\">\n Default\n </Badge>\n )}\n </div>\n <div className=\"text-sm text-muted-foreground\">\n Expires {method.expiryMonth}/{method.expiryYear}\n </div>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n {!method.isDefault && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleSetDefaultPaymentMethod(method.id)}\n >\n Set Default\n </Button>\n )}\n {!method.isDefault && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => handleRemovePaymentMethod(method.id)}\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n )}\n\n {/* Invoices */}\n {showInvoices && (\n <div className=\"space-y-3\">\n <div className=\"space-y-1 px-1\">\n <h3 className=\"text-base font-semibold tracking-tight\">Billing History</h3>\n <p className=\"text-sm text-muted-foreground\">View and download your invoices</p>\n </div>\n {invoices.length === 0 ? (\n <div className=\"flex h-[120px] items-center justify-center rounded-[var(--radius)] border-dashed border\">\n <p className=\"text-sm text-muted-foreground\">No invoices yet</p>\n </div>\n ) : (\n <div className=\"overflow-x-auto rounded-[var(--radius)] border border-border bg-card\">\n <Table className=\"min-w-[480px]\">\n <TableHeader>\n <TableRow className=\"hover:bg-transparent\">\n <TableHead>Date</TableHead>\n <TableHead className=\"text-right\">Amount</TableHead>\n <TableHead>Status</TableHead>\n <TableHead className=\"w-[50px]\" />\n </TableRow>\n </TableHeader>\n <TableBody>\n {invoices.map((invoice) => (\n <TableRow key={invoice.id}>\n <TableCell className=\"font-medium\">{formatDate(invoice.date)}</TableCell>\n <TableCell className=\"text-right font-mono\">{formatCurrency(invoice.amount, invoice.currency)}</TableCell>\n <TableCell>\n <Badge variant={getStatusBadgeVariant(invoice.status)}>\n {invoice.status === 'paid' && <CheckCircle2 className=\"mr-1 h-3 w-3\" />}\n {invoice.status}\n </Badge>\n </TableCell>\n <TableCell>\n <Button variant=\"ghost\" size=\"icon\">\n <Download className=\"h-4 w-4\" />\n </Button>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n )}\n </div>\n )}\n\n {/* Usage-Based Billing (if enabled) */}\n {showUsage && (\n <Card>\n <CardHeader>\n <CardTitle>Usage This Month</CardTitle>\n <CardDescription>Track your usage-based charges</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"font-medium\">API Requests</p>\n <p className=\"text-sm text-muted-foreground\">125,000 / 200,000</p>\n </div>\n <p className=\"text-sm font-medium\">$0.00</p>\n </div>\n <Separator />\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"font-medium\">Storage</p>\n <p className=\"text-sm text-muted-foreground\">2.5 GB / 10 GB</p>\n </div>\n <p className=\"text-sm font-medium\">$0.00</p>\n </div>\n <Separator />\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"font-medium\">Bandwidth</p>\n <p className=\"text-sm text-muted-foreground\">15 GB / 100 GB</p>\n </div>\n <p className=\"text-sm font-medium\">$0.00</p>\n </div>\n </div>\n </CardContent>\n </Card>\n )}\n </div>\n )\n}\n","import { useEffect, useRef, useState } from 'react'\nimport type { ReactNode } from 'react'\nimport { useBillingUsage, useCheckout } from '../hooks/use-billing'\n\n/** Valid paid plan slugs that can trigger checkout from URL intent */\nconst PAID_PLAN_SLUGS = new Set(['grow', 'scale'])\n\ninterface CheckoutIntentHandlerProps {\n children: ReactNode\n}\n\ntype IntentState = 'idle' | 'loading' | 'redirecting' | 'resolved'\n\n/**\n * Resolves URL-encoded checkout intent (?plan=grow) before children render.\n *\n * Sits between AuthGate and OnboardingGate. When ?plan= is present:\n * - Holds rendering until billing status loads\n * - If no subscription -> fires useCheckout and shows loading until Stripe redirect\n * - If already subscribed -> strips param and passes through\n * - If plan=free or invalid -> strips param and passes through\n *\n * Auth redirect preserves ?plan= via WorkOS state.returnTo.\n * On Stripe cancellation, user returns to /dashboard (no ?plan=), OnboardingGate shows wizard.\n */\nexport function CheckoutIntentHandler({ children }: CheckoutIntentHandlerProps) {\n const { data: usage, isLoading } = useBillingUsage()\n const checkout = useCheckout()\n const [intentState, setIntentState] = useState<IntentState>('idle')\n const firedRef = useRef(false)\n const strippedRef = useRef(false)\n\n // Read plan intent from URL (once, on mount)\n const [planParam] = useState(() => (typeof window !== 'undefined' ? new URLSearchParams(window.location.search).get('plan') : null))\n\n const hasPaidIntent = planParam !== null && PAID_PLAN_SLUGS.has(planParam)\n\n // Strip ?plan= param from URL (idempotent, effect-safe)\n useEffect(() => {\n if (!planParam || strippedRef.current) return\n if (!hasPaidIntent) {\n // Invalid or free plan -- strip immediately\n strippedRef.current = true\n stripPlanParam()\n setIntentState('resolved')\n return\n }\n setIntentState('loading')\n }, [planParam, hasPaidIntent])\n\n // Handle paid intent once billing data loads\n useEffect(() => {\n if (!hasPaidIntent || isLoading || !usage || firedRef.current) return\n\n const hasSubscription = usage.subscription?.stripeSubscriptionId && usage.subscription?.status !== 'canceled'\n if (hasSubscription) {\n // Already subscribed -- strip param, pass through\n strippedRef.current = true\n stripPlanParam()\n setIntentState('resolved')\n return\n }\n\n // No subscription -- fire checkout once\n firedRef.current = true\n strippedRef.current = true\n stripPlanParam()\n setIntentState('redirecting')\n checkout.mutate(planParam!)\n }, [hasPaidIntent, isLoading, usage, checkout, planParam])\n\n // No plan param -- pass through immediately\n if (!planParam) {\n return <>{children}</>\n }\n\n // Intent resolved (stripped invalid/free, or already subscribed) -- render children\n if (intentState === 'resolved') {\n return <>{children}</>\n }\n\n // Still loading or redirecting -- show spinner\n if (intentState === 'loading' || intentState === 'redirecting' || intentState === 'idle') {\n return <IntentLoadingState />\n }\n\n return <>{children}</>\n}\n\nfunction stripPlanParam() {\n if (typeof window === 'undefined') return\n const url = new URL(window.location.href)\n url.searchParams.delete('plan')\n window.history.replaceState({}, '', url.pathname + url.search)\n}\n\nfunction IntentLoadingState() {\n return (\n <div className='flex min-h-screen items-center justify-center bg-background'>\n <div className='flex flex-col items-center gap-4'>\n <div className='h-8 w-8 animate-spin rounded-full border-4 border-primary border-t-transparent' />\n <p className='text-sm text-muted-foreground'>Preparing checkout...</p>\n </div>\n </div>\n )\n}\n","import { useEffect, useRef } from 'react'\nimport type { ReactNode } from 'react'\nimport { useAuth } from '@mdxui/auth'\nimport { useBillingUsage, useCompleteOnboarding, useCheckout, useVerifyCheckout } from './hooks/use-billing'\n\nexport interface OnboardingGateCallbacks {\n onComplete: () => void\n onCheckout: (planName: string) => void\n organizationId: string\n user: { firstName?: string | null; lastName?: string | null; email?: string | null; profilePictureUrl?: string | null } | null\n}\n\nexport interface OnboardingGateProps {\n /** Rendered when org has completed onboarding */\n children: ReactNode\n /** Component to render during onboarding — receives callbacks as props */\n OnboardingComponent: React.ComponentType<OnboardingGateCallbacks>\n}\n\nexport function OnboardingGate({ children, OnboardingComponent }: OnboardingGateProps) {\n const { organizationId, user } = useAuth()\n const { data: usage, isLoading: usageLoading, isError, refetch } = useBillingUsage()\n const verifyCheckout = useVerifyCheckout()\n const completeOnboarding = useCompleteOnboarding()\n const checkout = useCheckout()\n const verifiedRef = useRef(false)\n\n // Stable reference to mutate function (avoids useEffect re-fires)\n const verifyMutate = verifyCheckout.mutate\n\n // Handle ?checkout=success&session_id=... on mount\n useEffect(() => {\n if (verifiedRef.current) return\n const params = new URLSearchParams(window.location.search)\n const sessionId = params.get('session_id')\n const status = params.get('checkout')\n\n if (status === 'success' && sessionId) {\n verifiedRef.current = true\n verifyMutate(sessionId, {\n onSettled: () => {\n window.history.replaceState({}, '', window.location.pathname)\n refetch()\n },\n })\n }\n }, [verifyMutate, refetch])\n\n const isLoading = usageLoading || verifyCheckout.isPending || !usage\n\n if (isLoading && !isError) {\n return (\n <DefaultLoadingComponent isPending={verifyCheckout.isPending} />\n )\n }\n\n if (isError) {\n return (\n <div className='flex min-h-screen flex-col items-center justify-center gap-4 bg-background'>\n <p className='text-sm text-muted-foreground'>Something went wrong loading your account.</p>\n <button\n type='button'\n className='rounded-[var(--radius)] bg-primary px-4 py-2 text-sm text-primary-foreground hover:bg-primary/90'\n onClick={() => refetch()}\n >\n Try again\n </button>\n </div>\n )\n }\n\n if (usage && !usage.hasCompletedOnboarding) {\n return (\n <OnboardingComponent\n onComplete={() => completeOnboarding.mutate()}\n onCheckout={(planName) => checkout.mutate(planName)}\n organizationId={organizationId || ''}\n user={user ?? null}\n />\n )\n }\n\n return <>{children}</>\n}\n\nfunction DefaultLoadingComponent({ isPending }: { isPending: boolean }) {\n return (\n <div className=\"min-h-screen bg-background flex items-center justify-center\">\n <div className=\"flex flex-col items-center gap-4\">\n <div className=\"h-8 w-8 animate-spin rounded-full border-4 border-primary border-t-transparent\" />\n <p className=\"text-sm text-muted-foreground\">{isPending ? 'Confirming your subscription...' : 'Loading...'}</p>\n </div>\n </div>\n )\n}\n","import { Toaster } from '@mdxui/primitives/sonner'\nimport type { ReactNode } from 'react'\nimport { DashboardProvider } from '../context/dashboard-context'\nimport type { DashboardConfig } from '../types/config'\nimport { IdentityProvider } from './identity-provider'\nimport { QueryProvider } from './query-provider'\n\ninterface AppProvidersProps {\n config: DashboardConfig\n children: ReactNode\n}\n\n/**\n * Composed provider that wraps the dashboard with all necessary context providers.\n *\n * Provider hierarchy:\n * - DashboardProvider - Dashboard config context + theme (via @mdxui/themes)\n * - IdentityProvider - WorkOS AuthKit + Widgets\n * - QueryProvider - TanStack Query + Auth sync\n */\nexport function AppProviders({ config, children }: AppProvidersProps) {\n return (\n <DashboardProvider config={config}>\n <IdentityProvider>\n <QueryProvider>\n {children}\n <Toaster />\n </QueryProvider>\n </IdentityProvider>\n </DashboardProvider>\n )\n}\n","import { IdentityProvider as AuthIdentityProvider, WidgetsProvider } from '@mdxui/auth'\nimport type { ReactNode } from 'react'\nimport { useDashboard } from '../context/dashboard-context'\n\ninterface IdentityProviderProps {\n children: ReactNode\n}\n\n/**\n * Identity provider that wraps the dashboard with authentication and identity widgets.\n * Powered by id.org.ai via @mdxui/auth\n *\n * Delegates to @mdxui/auth's IdentityProvider which handles:\n * - returnTo navigation via onRedirectCallback (deep-link preservation)\n * - URL param cleanup after auth redirect\n */\nexport function IdentityProvider({ children }: IdentityProviderProps) {\n const { config } = useDashboard()\n const { identity } = config\n\n // Build redirect URI - defaults to current origin + basePath\n const redirectUri =\n identity.redirectUri ??\n (typeof window !== 'undefined'\n ? `${window.location.origin}${config.basePath ?? '/'}`\n : undefined)\n\n return (\n <AuthIdentityProvider\n clientId={identity.clientId}\n apiHostname={identity.apiHostname}\n devMode={identity.devMode}\n redirectUri={redirectUri}\n >\n {children}\n </AuthIdentityProvider>\n )\n}\n\n// Re-export WidgetsProvider for cases where it's needed separately\nexport { WidgetsProvider }\n","/**\n * Query Provider\n *\n * Wraps the app with TanStack Query and syncs the auth token to the Payload client.\n */\n\nimport { setBearerToken } from '@mdxui/admin/lib/payload-client'\nimport { useAuth } from '@mdxui/auth'\nimport { QueryClientProvider } from '@tanstack/react-query'\nimport { ReactQueryDevtools } from '@tanstack/react-query-devtools'\nimport { type ReactNode, useEffect, useRef } from 'react'\nimport { queryClient } from '../lib/query-client'\n\ninterface QueryProviderProps {\n children: ReactNode\n}\n\n/**\n * Syncs the auth token from id.org.ai to the Payload client.\n * Also clears cached queries when the active organization changes (org switch).\n */\nfunction AuthSync({ children }: { children: ReactNode }) {\n const { user, getAccessToken, organizationId } = useAuth()\n const prevOrgId = useRef(organizationId)\n\n useEffect(() => {\n async function syncToken() {\n if (user) {\n try {\n const token = await getAccessToken()\n setBearerToken(token)\n } catch {\n setBearerToken(null)\n }\n } else {\n setBearerToken(null)\n // Clear all cached queries when user logs out\n queryClient.clear()\n }\n }\n\n syncToken()\n }, [user, getAccessToken])\n\n // Clear all cached queries when the active organization changes\n useEffect(() => {\n if (prevOrgId.current && organizationId && prevOrgId.current !== organizationId) {\n queryClient.clear()\n }\n prevOrgId.current = organizationId\n }, [organizationId])\n\n return <>{children}</>\n}\n\n/**\n * Provides TanStack Query context and syncs auth to the Payload client.\n */\nexport function QueryProvider({ children }: QueryProviderProps) {\n return (\n <QueryClientProvider client={queryClient}>\n <AuthSync>{children}</AuthSync>\n <ReactQueryDevtools initialIsOpen={false} />\n </QueryClientProvider>\n )\n}\n","/**\n * TanStack Query Client Configuration\n */\n\nimport { QueryClient } from '@tanstack/react-query'\n\n/**\n * Shared QueryClient instance for the dashboard.\n *\n * Configuration:\n * - staleTime: 30 seconds - data is considered fresh for 30s\n * - gcTime: 5 minutes - unused data is garbage collected after 5m\n * - retry: 1 - retry failed requests once\n * - refetchOnWindowFocus: false - don't refetch when window regains focus\n */\nexport const queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 30 * 1000, // 30 seconds\n gcTime: 5 * 60 * 1000, // 5 minutes\n retry: 1,\n refetchOnWindowFocus: false,\n },\n },\n})\n","import { AuthGate as AuthAuthGate } from '@mdxui/auth'\nimport type { ReactNode } from 'react'\nimport { LandingPage } from '../components/layout/landing-page'\nimport { useDashboard } from '../context/dashboard-context'\n\ninterface AuthGateProps {\n children: ReactNode\n}\n\n/**\n * AuthGate handles authentication state and shows appropriate UI:\n * - Loading state while checking auth\n * - Landing page or redirect when not authenticated\n * - Children (dashboard) when authenticated\n *\n * Uses @mdxui/auth's AuthGate with dashboard-specific configuration.\n */\nexport function AuthGate({ children }: AuthGateProps) {\n const { config } = useDashboard()\n const { identity } = config\n\n return (\n <AuthAuthGate\n required={identity.required ?? true}\n onUnauthenticated={identity.onUnauthenticated ?? 'landing'}\n redirectUrl={identity.unauthenticatedRedirectUrl}\n landingComponent={identity.landingComponent ?? <LandingPage />}\n >\n {children}\n </AuthAuthGate>\n )\n}\n","import type { ReactNode } from 'react'\nimport { useEffect, useMemo } from 'react'\nimport {\n createWebRouter,\n RouterProvider,\n useWebNavigate,\n useWebLocation,\n} from '@mdxui/navigation/web'\nimport type { AnyRouter } from '@tanstack/react-router'\nimport { DashboardLayout } from './components/layout'\nimport { useDashboard } from './context/dashboard-context'\nimport { buildRouteConfig, routeDefinitions } from './routes'\n\n/**\n * Detect if we're running inside Next.js\n */\nfunction isNextJs(): boolean {\n if (typeof window === 'undefined') return false\n return '__NEXT_DATA__' in window\n}\n\n/**\n * Get the initial path from the current browser URL, relative to basePath\n */\nfunction getInitialPathFromUrl(basePath: string): string {\n if (typeof window === 'undefined') return '/'\n const normalizedBase = basePath.endsWith('/') ? basePath.slice(0, -1) : basePath\n const currentPath = window.location.pathname\n if (currentPath.startsWith(normalizedBase)) {\n const relativePath = currentPath.slice(normalizedBase.length)\n return relativePath || '/'\n }\n return '/'\n}\n\n/**\n * Redirect component - navigates to a path on mount using TanStack Router\n */\nfunction Redirect({ to }: { to: string }) {\n const navigate = useWebNavigate()\n const { pathname } = useWebLocation()\n useEffect(() => {\n if (pathname !== to) {\n navigate(to, { replace: true })\n }\n }, [navigate, pathname, to])\n return null\n}\n\n/** Factory that creates redirect components for buildRouteConfig */\nfunction createRedirect(to: string): React.ComponentType<any> {\n return () => <Redirect to={to} />\n}\n\n/**\n * Hook to sync TanStack Router URL to browser URL for Next.js\n */\nfunction useUrlSync(router: AnyRouter, basePath: string, enabled: boolean) {\n useEffect(() => {\n if (!enabled) return\n const normalizedBase = basePath.endsWith('/') ? basePath.slice(0, -1) : basePath\n return router.subscribe('onResolved', ({ toLocation }) => {\n const path = toLocation.pathname === '/' ? '' : toLocation.pathname\n const search = toLocation.searchStr || ''\n const hash = toLocation.hash || ''\n const fullPath = `${normalizedBase}${path}${search}${hash}`\n if (window.location.pathname + window.location.search + window.location.hash !== fullPath) {\n window.history.replaceState(null, '', fullPath)\n }\n })\n }, [router, basePath, enabled])\n}\n\n/**\n * @deprecated Kept for backwards compatibility. DashboardRoutes handles routing internally.\n */\nexport function DashboardRouter({ children }: { basePath?: string; children: ReactNode }) {\n return <>{children}</>\n}\n\n/**\n * Dashboard routes component - creates and manages the TanStack Router instance.\n * Route tree is derived from the central route definitions registry.\n */\nexport function DashboardRoutes() {\n const { routes, customRoutes, basePath } = useDashboard()\n const useMemoryRouter = isNextJs()\n const initialPath = getInitialPathFromUrl(basePath)\n\n const routeConfig = useMemo(\n () => buildRouteConfig(routeDefinitions, routes, customRoutes, createRedirect),\n [routes, customRoutes],\n )\n\n const router = useMemo(() => {\n return createWebRouter(routeConfig, {\n rootComponent: DashboardLayout,\n basepath: useMemoryRouter ? undefined : basePath,\n history: useMemoryRouter ? 'memory' : 'browser',\n initialEntries: useMemoryRouter ? [initialPath] : undefined,\n })\n }, [routeConfig, basePath, useMemoryRouter, initialPath])\n\n useUrlSync(router, basePath, useMemoryRouter)\n\n return <RouterProvider router={router} />\n}\n","import type { DeveloperDashboardProps as MdxuiProps, CustomRoute as MdxuiCustomRoute } from 'mdxui'\nimport { getIconByName } from './lib/icons'\nimport { CheckoutIntentHandler } from './components/checkout-intent-handler'\nimport { OnboardingGate } from './onboarding-gate'\nimport { AppProviders, AuthGate } from './providers'\nimport { DashboardRoutes } from './router'\nimport type { CustomRoute, DashboardConfig } from './types/config'\n\n/**\n * Props for DeveloperDashboard - supports both mdxui interface and legacy config.\n *\n * Option 1: mdxui interface (recommended for new code)\n * ```tsx\n * <DeveloperDashboard\n * identity={{ clientId: 'xxx' }}\n * routes={{ webhooks: true }}\n * customRoutes={[{ path: '/analytics', label: 'Analytics', element: <Analytics /> }]}\n * />\n * ```\n *\n * Option 2: Legacy config object\n * ```tsx\n * <DeveloperDashboard config={{ identity: { clientId: 'xxx' }, routes: {...} }} />\n * ```\n */\nexport type DeveloperDashboardProps = (MdxuiProps & { onboardingComponent?: DashboardConfig['onboardingComponent']; planConfig?: DashboardConfig['planConfig'] }) | { config: DashboardConfig }\n\n/**\n * Converts mdxui props to internal DashboardConfig.\n * Handles legacy props (showAPIKeys, showWebhooks, etc.) for backwards compatibility.\n */\nfunction propsToConfig(props: MdxuiProps & { onboardingComponent?: DashboardConfig['onboardingComponent']; planConfig?: DashboardConfig['planConfig'] }): DashboardConfig {\n // Build routes config, merging legacy props with new routes object.\n // Defaults here must match defaultRoutes in types/config.ts.\n const routes = {\n overview: props.routes?.overview ?? true,\n events: props.routes?.events ?? props.showLogs ?? props.showUsage ?? true,\n keys: props.routes?.keys ?? props.showAPIKeys ?? true,\n settings: props.routes?.settings ?? true,\n webhooks: props.routes?.webhooks ?? props.showWebhooks ?? true,\n database: props.routes?.database ?? true,\n integrations: props.routes?.integrations ?? false,\n vault: props.routes?.vault ?? false,\n }\n\n // Convert mdxui CustomRoute (string icon names) to internal CustomRoute (LucideIcon components)\n const customRoutes: CustomRoute[] | undefined = props.customRoutes?.map((route: MdxuiCustomRoute) => ({\n path: route.path,\n label: route.label,\n icon: route.icon ? getIconByName(route.icon) : undefined,\n element: route.element,\n group: route.group,\n order: route.order,\n index: route.index,\n }))\n\n // Build identity config - use demo mode if not provided\n const identity = props.identity ?? {\n clientId: 'demo',\n useMockWidgets: true,\n required: false,\n onUnauthenticated: 'allow' as const,\n }\n\n return {\n basePath: props.basePath ?? '/',\n branding: props.branding,\n routes,\n customRoutes,\n theme: props.theme,\n identity,\n sidebarAd: props.sidebarAd,\n reportIssue: (props as Record<string, unknown>).reportIssue as DashboardConfig['reportIssue'],\n onboardingComponent: props.onboardingComponent,\n planConfig: props.planConfig,\n }\n}\n\n/**\n * Check if props are legacy config format\n */\nfunction isLegacyConfig(props: DeveloperDashboardProps): props is { config: DashboardConfig } {\n return 'config' in props && props.config !== undefined\n}\n\n/**\n * Main dashboard component that wraps everything with necessary providers\n * and renders the dashboard routes.\n *\n * Provider hierarchy (handled by AppProviders):\n * - DashboardProvider - Dashboard config context + theme\n * - IdentityProvider - WorkOS AuthKit + Widgets\n * - QueryProvider - TanStack Query + Auth sync\n *\n * @example Basic usage\n * ```tsx\n * <DeveloperDashboard\n * identity={{ clientId: 'xxx' }}\n * />\n * ```\n *\n * @example With custom routes\n * ```tsx\n * <DeveloperDashboard\n * identity={{ clientId: 'xxx' }}\n * routes={{ webhooks: true }}\n * customRoutes={[\n * { path: '/analytics', label: 'Analytics', icon: 'BarChart3', element: <AnalyticsPage /> },\n * ]}\n * />\n * ```\n *\n * @example Hide built-in routes\n * ```tsx\n * <DeveloperDashboard\n * identity={{ clientId: 'xxx' }}\n * routes={{ database: false }}\n * />\n * ```\n */\nexport function DeveloperDashboard(props: DeveloperDashboardProps) {\n // Support both mdxui props and legacy config format\n const config = isLegacyConfig(props) ? props.config : propsToConfig(props)\n\n return (\n <AppProviders config={config}>\n <AuthGate>\n <CheckoutIntentHandler>\n {config.onboardingComponent ? (\n <OnboardingGate OnboardingComponent={config.onboardingComponent}>\n <DashboardRoutes />\n </OnboardingGate>\n ) : (\n <DashboardRoutes />\n )}\n </CheckoutIntentHandler>\n </AuthGate>\n </AppProviders>\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cn } from \"@mdxui/primitives/lib/utils\"\n\nexport interface AuthLayoutProps extends React.ComponentProps<\"div\"> {\n children: React.ReactNode\n title?: string\n subtitle?: string\n logo?: React.ReactNode\n backgroundImage?: string\n showTestimonial?: boolean\n testimonial?: {\n quote: string\n author: string\n role: string\n avatar?: string\n }\n}\n\nfunction AuthLayout({\n className,\n children,\n title,\n subtitle,\n logo,\n backgroundImage,\n showTestimonial = false,\n testimonial,\n ...props\n}: AuthLayoutProps) {\n return (\n <div className={cn(\"min-h-screen w-full lg:grid lg:grid-cols-2\", className)} {...props}>\n {/* Left side - Form */}\n <div className=\"flex items-center justify-center py-12\">\n <div className=\"mx-auto w-full max-w-[400px] space-y-8 px-4\">\n {logo && <div className=\"flex justify-center\">{logo}</div>}\n\n {(title || subtitle) && (\n <div className=\"space-y-2 text-center\">\n {title && (\n <h1 className=\"text-3xl font-bold tracking-tight\">{title}</h1>\n )}\n {subtitle && (\n <p className=\"text-muted-foreground text-sm\">{subtitle}</p>\n )}\n </div>\n )}\n\n <div>{children}</div>\n </div>\n </div>\n\n {/* Right side - Visual/Testimonial */}\n <div\n className=\"bg-muted hidden lg:block\"\n style={\n backgroundImage\n ? {\n backgroundImage: `url(${backgroundImage})`,\n backgroundSize: \"cover\",\n backgroundPosition: \"center\",\n }\n : undefined\n }\n >\n {showTestimonial && testimonial && !backgroundImage && (\n <div className=\"flex h-full items-center justify-center p-12\">\n <div className=\"max-w-md space-y-6\">\n <blockquote className=\"space-y-4\">\n <p className=\"text-lg font-medium leading-relaxed\">\n \"{testimonial.quote}\"\n </p>\n <footer className=\"flex items-center gap-3\">\n {testimonial.avatar && (\n <img\n src={testimonial.avatar}\n alt={testimonial.author}\n className=\"size-10 rounded-full\"\n />\n )}\n <div>\n <div className=\"font-semibold\">{testimonial.author}</div>\n <div className=\"text-muted-foreground text-sm\">\n {testimonial.role}\n </div>\n </div>\n </footer>\n </blockquote>\n </div>\n </div>\n )}\n </div>\n </div>\n )\n}\n\nexport { AuthLayout }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { LoginForm } from \"@mdxui/primitives/auth/login-form\"\nimport { AuthLayout } from \"./auth-layout\"\n\nexport interface LoginPageProps {\n onSubmit?: (data: { email: string; password: string; rememberMe?: boolean }) => void | Promise<void>\n onOAuthClick?: (provider: \"google\" | \"github\" | \"microsoft\") => void | Promise<void>\n onMagicLinkClick?: (email: string) => void | Promise<void>\n onForgotPasswordClick?: () => void\n onSignupClick?: () => void\n isLoading?: boolean\n showOAuth?: boolean\n showMagicLink?: boolean\n oauthProviders?: Array<\"google\" | \"github\" | \"microsoft\">\n error?: string\n logo?: React.ReactNode\n title?: string\n subtitle?: string\n backgroundImage?: string\n showTestimonial?: boolean\n testimonial?: {\n quote: string\n author: string\n role: string\n avatar?: string\n }\n}\n\nfunction LoginPage({\n onSubmit,\n onOAuthClick,\n onMagicLinkClick,\n onForgotPasswordClick,\n onSignupClick,\n isLoading,\n showOAuth = true,\n showMagicLink = false,\n oauthProviders = [\"google\", \"github\"],\n error,\n logo,\n title = \"Welcome back\",\n subtitle = \"Sign in to your account to continue\",\n backgroundImage,\n showTestimonial = false,\n testimonial,\n}: LoginPageProps) {\n return (\n <AuthLayout\n logo={logo}\n title={title}\n subtitle={subtitle}\n backgroundImage={backgroundImage}\n showTestimonial={showTestimonial}\n testimonial={testimonial}\n >\n <LoginForm\n onSubmit={onSubmit}\n onOAuthClick={onOAuthClick}\n onMagicLinkClick={onMagicLinkClick}\n onForgotPasswordClick={onForgotPasswordClick}\n onSignupClick={onSignupClick}\n isLoading={isLoading}\n showOAuth={showOAuth}\n showMagicLink={showMagicLink}\n oauthProviders={oauthProviders}\n error={error}\n />\n </AuthLayout>\n )\n}\n\nexport { LoginPage }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { SignupForm } from \"@mdxui/primitives/auth/signup-form\"\nimport { AuthLayout } from \"./auth-layout\"\n\nexport interface SignupPageProps {\n onSubmit?: (data: {\n fullName: string\n email: string\n password: string\n confirmPassword: string\n agreeToTerms: boolean\n }) => void | Promise<void>\n onOAuthClick?: (provider: \"google\" | \"github\" | \"microsoft\") => void | Promise<void>\n onLoginClick?: () => void\n isLoading?: boolean\n showOAuth?: boolean\n oauthProviders?: Array<\"google\" | \"github\" | \"microsoft\">\n multiStep?: boolean\n error?: string\n logo?: React.ReactNode\n title?: string\n subtitle?: string\n backgroundImage?: string\n showTestimonial?: boolean\n testimonial?: {\n quote: string\n author: string\n role: string\n avatar?: string\n }\n}\n\nfunction SignupPage({\n onSubmit,\n onOAuthClick,\n onLoginClick,\n isLoading,\n showOAuth = true,\n oauthProviders = [\"google\", \"github\"],\n multiStep = false,\n error,\n logo,\n title = \"Create an account\",\n subtitle = \"Get started with your free account\",\n backgroundImage,\n showTestimonial = false,\n testimonial,\n}: SignupPageProps) {\n return (\n <AuthLayout\n logo={logo}\n title={title}\n subtitle={subtitle}\n backgroundImage={backgroundImage}\n showTestimonial={showTestimonial}\n testimonial={testimonial}\n >\n <SignupForm\n onSubmit={onSubmit}\n onOAuthClick={onOAuthClick}\n onLoginClick={onLoginClick}\n isLoading={isLoading}\n showOAuth={showOAuth}\n oauthProviders={oauthProviders}\n multiStep={multiStep}\n error={error}\n />\n </AuthLayout>\n )\n}\n\nexport { SignupPage }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { PasswordResetForm } from \"@mdxui/primitives/auth/password-reset-form\"\nimport { AuthLayout } from \"./auth-layout\"\n\nexport interface PasswordResetPageProps {\n mode?: \"request\" | \"confirm\"\n onRequestSubmit?: (data: { email: string }) => void | Promise<void>\n onConfirmSubmit?: (data: { password: string; confirmPassword: string }) => void | Promise<void>\n onBackToLogin?: () => void\n isLoading?: boolean\n error?: string\n successMessage?: string\n logo?: React.ReactNode\n title?: string\n subtitle?: string\n backgroundImage?: string\n}\n\nfunction PasswordResetPage({\n mode = \"request\",\n onRequestSubmit,\n onConfirmSubmit,\n onBackToLogin,\n isLoading,\n error,\n successMessage,\n logo,\n title,\n subtitle,\n backgroundImage,\n}: PasswordResetPageProps) {\n const defaultTitle =\n mode === \"request\" ? \"Reset your password\" : \"Create new password\"\n const defaultSubtitle =\n mode === \"request\"\n ? \"We'll send you a link to reset your password\"\n : \"Enter your new password below\"\n\n return (\n <AuthLayout\n logo={logo}\n title={title || defaultTitle}\n subtitle={subtitle || defaultSubtitle}\n backgroundImage={backgroundImage}\n >\n <PasswordResetForm\n mode={mode}\n onRequestSubmit={onRequestSubmit}\n onConfirmSubmit={onConfirmSubmit}\n onBackToLogin={onBackToLogin}\n isLoading={isLoading}\n error={error}\n successMessage={successMessage}\n />\n </AuthLayout>\n )\n}\n\nexport { PasswordResetPage }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { OTPInputForm } from \"@mdxui/primitives/auth/otp-input\"\nimport { AuthLayout } from \"./auth-layout\"\n\nexport interface OTPPageProps {\n onSubmit?: (data: { otp: string }) => void | Promise<void>\n onResend?: () => void | Promise<void>\n isLoading?: boolean\n error?: string\n canResend?: boolean\n resendTimeout?: number\n logo?: React.ReactNode\n title?: string\n subtitle?: string\n description?: string\n backgroundImage?: string\n}\n\nfunction OTPPage({\n onSubmit,\n onResend,\n isLoading,\n error,\n canResend = false,\n resendTimeout = 60,\n logo,\n title = \"Two-Factor Authentication\",\n subtitle = \"Enter the code from your authenticator app\",\n description,\n backgroundImage,\n}: OTPPageProps) {\n return (\n <AuthLayout logo={logo} backgroundImage={backgroundImage}>\n <OTPInputForm\n onSubmit={onSubmit}\n onResend={onResend}\n isLoading={isLoading}\n error={error}\n title={title}\n description={description || subtitle}\n canResend={canResend}\n resendTimeout={resendTimeout}\n />\n </AuthLayout>\n )\n}\n\nexport { OTPPage }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { OnboardingWizard, type OnboardingStep } from \"@mdxui/primitives/auth/onboarding-wizard\"\nimport { cn } from \"@mdxui/primitives/lib/utils\"\n\nexport interface OnboardingPageProps {\n steps: OnboardingStep[]\n onComplete?: (data: Record<string, any>) => void | Promise<void>\n onSkip?: () => void\n allowSkip?: boolean\n isLoading?: boolean\n logo?: React.ReactNode\n title?: string\n subtitle?: string\n showProgress?: boolean\n className?: string\n}\n\nfunction OnboardingPage({\n steps,\n onComplete,\n onSkip,\n allowSkip = false,\n isLoading,\n logo,\n title = \"Welcome! Let's get you set up\",\n subtitle = \"This will only take a few minutes\",\n showProgress = true,\n className,\n}: OnboardingPageProps) {\n return (\n <div className={cn(\"flex min-h-screen items-center justify-center p-4\", className)}>\n <div className=\"w-full space-y-8\">\n {logo && <div className=\"flex justify-center\">{logo}</div>}\n\n <OnboardingWizard\n steps={steps}\n onComplete={onComplete}\n onSkip={onSkip}\n allowSkip={allowSkip}\n isLoading={isLoading}\n title={title}\n subtitle={subtitle}\n showProgress={showProgress}\n />\n </div>\n </div>\n )\n}\n\nexport { OnboardingPage }\n","// Main App export for convenience\nexport { DeveloperDashboard as App, DeveloperDashboard } from './developer'\n\n// Re-export everything from developer\nexport * from './developer'\n\n// Re-export auth components\nexport * from './auth'\n\n// =============================================================================\n// AppComponents Export - Implements mdxui interface\n// =============================================================================\n\nimport type { AppComponents } from 'mdxui'\nimport { DeveloperDashboard } from './developer'\nimport {\n APIKeyManager,\n Billing,\n DashboardLayout,\n TeamManager,\n} from './developer/components'\nimport { OverviewPage, SettingsAccountPage } from './developer/pages'\n\n/**\n * AppComponents implementation for @mdxui/cockpit\n *\n * This export provides components that implement the mdxui AppComponents interface.\n * Not all required components are implemented yet - this is a partial implementation\n * focused on the developer dashboard use case.\n *\n * Note: Some components are mapped from internal names to interface names:\n * - DeveloperDashboard -> App (also exports DeveloperDashboard for backwards compat)\n * - DashboardLayout -> Shell\n * - OverviewPage -> Dashboard\n * - SettingsAccountPage -> Settings\n * - APIKeyManager -> APIKeys\n * - TeamManager -> Team\n *\n * Type assertions are used because the internal component props don't exactly match\n * the mdxui interface props - this is intentional as cockpit uses its own config\n * pattern while still providing the conceptual AppComponents structure.\n */\nexport const components = {\n // Layout Components\n App: DeveloperDashboard,\n Shell: DashboardLayout,\n Dashboard: OverviewPage,\n Settings: SettingsAccountPage,\n\n // Pre-built Features\n DeveloperDashboard,\n APIKeys: APIKeyManager,\n Team: TeamManager,\n Billing,\n} satisfies Partial<Record<keyof AppComponents, unknown>>\n"],"mappings":"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","names":["useAuth","useThemeStore","formatTimestamp","Card","CardContent","CardDescription","CardHeader","CardTitle","jsx","jsxs","Card","CardContent","CardDescription","CardHeader","CardTitle","ChartContainer","ChartTooltip","ChartTooltipContent","CartesianGrid","XAxis","YAxis","jsx","jsxs","jsx","jsxs","cn","jsx","cn","useState","jsx","jsxs","Card","CardContent","CardHeader","CardTitle","Area","AreaChart","cn","jsx","jsxs","Card","CardContent","CardDescription","CardHeader","CardTitle","ChartContainer","ChartTooltip","ChartTooltipContent","CartesianGrid","XAxis","YAxis","jsx","jsxs","useAuth","WebLink","useCallback","useMemo","useEffect","jsx","createRedirect","useEffect","useRef","useState","cn","jsx","jsxs","Fragment","jsx","Avatar","AvatarFallback","AvatarImage","Badge","Button","Card","CardContent","CardDescription","CardHeader","CardTitle","Input","Table","TableBody","TableCell","TableHead","TableHeader","TableRow","jsx","jsxs","jsx","jsxs","useState","useRef","useEffect","Button","useState","useState","useEffect","useRef","useAuth","queryClient","jsx","jsxs","useState","useRef","useEffect","useAuth","Fragment","jsx","jsxs","useState","Button","useAuth","jsx","jsxs","useEffect","useState","useAuth","jsx","Card","CardContent","jsx","jsxs","useAuth","useEffect","useState","useWebNavigate","jsx","useAuth","useState","useEffect","useWebNavigate","jsx","jsxs","useAuth","useEffect","useState","jsx","jsxs","useAuth","useState","useEffect","useEffect","useState","useAuth","jsx","jsxs","useState","useEffect","Button","Table","TableBody","TableCell","TableHead","TableHeader","TableRow","useState","cn","useThemeStore","useEffect","useState","jsx","jsxs","WebLink","useState","jsx","jsxs","cn","jsx","jsxs","Fragment","jsx","jsxs","useState","Button","Table","TableHeader","TableRow","TableHead","TableBody","TableCell","Button","Plus","useState","Button","Dialog","DialogContent","Input","Label","useState","jsx","jsxs","useState","Button","Dialog","DialogContent","DialogFooter","DialogHeader","DialogTitle","jsx","jsxs","Button","jsx","jsxs","Button","Card","DropdownMenu","DropdownMenuContent","DropdownMenuItem","DropdownMenuTrigger","Key","jsx","jsxs","Fragment","jsx","jsxs","useState","jsx","jsxs","useState","Button","Plus","useAuth","Avatar","AvatarFallback","AvatarImage","cn","useThemeStore","Check","Copy","useCallback","useEffect","useState","codeToHtml","toast","jsx","jsxs","jsx","jsxs","useThemeStore","useState","useEffect","codeToHtml","useCallback","toast","Check","Copy","cn","Avatar","AvatarImage","AvatarFallback","useAuth","Badge","Button","Card","CardContent","Dialog","DialogContent","DialogDescription","DialogFooter","DialogHeader","DialogTitle","DropdownMenu","DropdownMenuContent","DropdownMenuItem","DropdownMenuTrigger","Input","Label","Check","ChevronDown","Copy","MoreHorizontal","Plus","Search","useMemo","useState","toast","Fragment","jsx","jsxs","useMemo","useState","toast","Label","Search","DropdownMenu","DropdownMenuTrigger","Button","ChevronDown","DropdownMenuContent","DropdownMenuItem","Dialog","Plus","DialogContent","DialogHeader","DialogTitle","DialogDescription","Input","DialogFooter","Card","CardContent","Badge","MoreHorizontal","Check","Copy","Card","CardContent","Input","ChevronRight","Search","useState","jsx","jsxs","useState","Search","Input","events","Card","CardContent","ChevronRight","Button","DropdownMenu","DropdownMenuContent","DropdownMenuItem","DropdownMenuTrigger","cn","Table","TableBody","TableCell","TableHead","TableHeader","TableRow","Check","ChevronDown","Copy","RefreshCw","X","useState","toast","Fragment","jsx","jsxs","statusFilterOptions","formatRelativeTime","formatLatency","useState","Check","Copy","toast","DropdownMenu","DropdownMenuTrigger","Button","ChevronDown","DropdownMenuContent","DropdownMenuItem","Table","TableHeader","TableRow","TableHead","TableBody","cn","TableCell","X","RefreshCw","useCollections","useAuth","useEffect","useState","WebLink","useWebLocation","jsx","useWebNavigate","useThemeStore","useMemo","jsx","Fragment","jsx","jsxs","useMemo","useAuth","useCallback","WebLink","useAuth","Button","Key","Shield","jsx","jsxs","useAuth","Button","Key","Shield","Avatar","AvatarFallback","AvatarImage","Button","Card","CardContent","CardDescription","CardHeader","CardTitle","Input","Label","User","Mail","jsx","jsxs","UserProfile","React","Button","Card","CardContent","CardDescription","CardHeader","CardTitle","Badge","Table","TableBody","TableCell","TableHead","TableHeader","TableRow","Dialog","DialogContent","DialogDescription","DialogFooter","DialogHeader","DialogTitle","DialogTrigger","DropdownMenu","DropdownMenuContent","DropdownMenuItem","DropdownMenuTrigger","Input","Label","Copy","Key","MoreHorizontal","Plus","Trash2","toast","Fragment","jsx","jsxs","formatDate","React","Avatar","AvatarFallback","AvatarImage","Button","Badge","Card","CardContent","CardDescription","CardHeader","CardTitle","Table","TableBody","TableCell","TableHead","TableHeader","TableRow","Dialog","DialogContent","DialogDescription","DialogFooter","DialogHeader","DialogTitle","DialogTrigger","DropdownMenu","DropdownMenuContent","DropdownMenuItem","DropdownMenuSeparator","DropdownMenuTrigger","Input","Label","MoreHorizontal","Plus","Mail","Trash2","Users","toast","jsx","jsxs","formatDate","React","Button","Badge","Card","CardContent","CardDescription","CardHeader","CardTitle","Table","TableBody","TableCell","TableHead","TableHeader","TableRow","Separator","Dialog","DialogContent","DialogDescription","DialogFooter","DialogHeader","DialogTitle","DialogTrigger","Input","Label","CreditCard","Plus","Trash2","toast","jsx","jsxs","formatDate","useEffect","useRef","useState","Fragment","jsx","jsxs","useState","useRef","useEffect","useEffect","useRef","useAuth","Fragment","jsx","jsxs","useAuth","useRef","useEffect","Toaster","jsx","setBearerToken","useAuth","useEffect","useRef","Fragment","jsx","jsxs","useAuth","useRef","useEffect","setBearerToken","jsx","jsxs","Toaster","jsx","useEffect","useMemo","useWebNavigate","useWebLocation","Fragment","jsx","useWebNavigate","useWebLocation","useEffect","useMemo","jsx","jsx","cn","jsx","jsxs","jsx","jsx","jsx","jsx","cn","jsx","jsxs","OnboardingPage"]}
|