@mdxui/do 2.1.1 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/README.md +115 -323
  2. package/dist/{agents-xcIn2dUB.d.ts → agents-2_r9e9i7.d.ts} +213 -2
  3. package/dist/app/index.d.ts +347 -0
  4. package/dist/app/index.js +14 -0
  5. package/dist/app/index.js.map +1 -0
  6. package/dist/breadcrumbs-C9Qn3S7d.d.ts +81 -0
  7. package/dist/capnweb-client-Bq78FtEA.d.ts +229 -0
  8. package/dist/chunk-3XKYQRXY.js +192 -0
  9. package/dist/chunk-3XKYQRXY.js.map +1 -0
  10. package/dist/chunk-4KXVN3EQ.js +56 -0
  11. package/dist/chunk-4KXVN3EQ.js.map +1 -0
  12. package/dist/chunk-5SHZZC7L.js +234 -0
  13. package/dist/chunk-5SHZZC7L.js.map +1 -0
  14. package/dist/chunk-7UFINK3Q.js +1994 -0
  15. package/dist/chunk-7UFINK3Q.js.map +1 -0
  16. package/dist/chunk-JJLAES6W.js +76 -0
  17. package/dist/chunk-JJLAES6W.js.map +1 -0
  18. package/dist/chunk-KT52UU3U.js +985 -0
  19. package/dist/chunk-KT52UU3U.js.map +1 -0
  20. package/dist/chunk-LJIWB7KE.js +95 -0
  21. package/dist/chunk-LJIWB7KE.js.map +1 -0
  22. package/dist/chunk-NA652ART.js +596 -0
  23. package/dist/chunk-NA652ART.js.map +1 -0
  24. package/dist/chunk-OVLO7UOH.js +1071 -0
  25. package/dist/chunk-OVLO7UOH.js.map +1 -0
  26. package/dist/chunk-VRLUXCLD.js +31 -0
  27. package/dist/chunk-VRLUXCLD.js.map +1 -0
  28. package/dist/chunk-WMNT4OIE.js +249 -0
  29. package/dist/chunk-WMNT4OIE.js.map +1 -0
  30. package/dist/chunk-Y52IEYVM.js +131 -0
  31. package/dist/chunk-Y52IEYVM.js.map +1 -0
  32. package/dist/components/index.d.ts +14 -732
  33. package/dist/components/index.js +3 -6
  34. package/dist/config-CxvpD8Y6.d.ts +111 -0
  35. package/dist/{do-CaQVueZw.d.ts → do-D27i5bU0.d.ts} +32 -33
  36. package/dist/errors-DratdVIz.d.ts +346 -0
  37. package/dist/hooks/index.d.ts +450 -691
  38. package/dist/hooks/index.js +6 -4
  39. package/dist/hooks/things/index.d.ts +298 -0
  40. package/dist/hooks/things/index.js +8 -0
  41. package/dist/hooks/things/index.js.map +1 -0
  42. package/dist/index.d.ts +62 -989
  43. package/dist/index.js +12 -839
  44. package/dist/index.js.map +1 -1
  45. package/dist/lib/index.d.ts +798 -0
  46. package/dist/lib/index.js +6 -0
  47. package/dist/lib/index.js.map +1 -0
  48. package/dist/providers/index.d.ts +130 -34
  49. package/dist/providers/index.js +3 -2
  50. package/dist/query-keys-CZNFikIi.d.ts +153 -0
  51. package/dist/schemas/index.d.ts +5 -5
  52. package/dist/schemas/index.js +2 -2
  53. package/dist/schemas/index.js.map +1 -1
  54. package/dist/{thing-DtI25yZh.d.ts → thing-BF25aUtJ.d.ts} +72 -72
  55. package/dist/types/index.d.ts +693 -658
  56. package/dist/types/index.js +1 -2
  57. package/dist/views/index.d.ts +131 -0
  58. package/dist/views/index.js +11 -0
  59. package/dist/views/index.js.map +1 -0
  60. package/package.json +39 -17
  61. package/dist/__test-utils__/index.d.ts +0 -399
  62. package/dist/__test-utils__/index.js +0 -34641
  63. package/dist/__test-utils__/index.js.map +0 -1
  64. package/dist/chunk-EEDMN7UF.js +0 -1351
  65. package/dist/chunk-EEDMN7UF.js.map +0 -1
  66. package/dist/chunk-G3PMV62Z.js +0 -33
  67. package/dist/chunk-G3PMV62Z.js.map +0 -1
  68. package/dist/chunk-NXPXL5NA.js +0 -3789
  69. package/dist/chunk-NXPXL5NA.js.map +0 -1
  70. package/dist/chunk-PC5FJY6M.js +0 -20
  71. package/dist/chunk-PC5FJY6M.js.map +0 -1
  72. package/dist/chunk-XF6LKY2M.js +0 -445
  73. package/dist/chunk-XF6LKY2M.js.map +0 -1
  74. package/dist/magic-string.es-J7BYFTTJ.js +0 -1307
  75. package/dist/magic-string.es-J7BYFTTJ.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/app/context.tsx","../src/app/identity-provider.tsx","../src/app/app-providers.tsx","../src/app/auth-gate.tsx","../src/app/user-menu.tsx","../src/app/do-shell-nav.tsx","../src/app/do-shell.tsx","../src/app/pages/databases-page.tsx","../src/app/pages/document-page.tsx","../src/app/pages/functions-page.tsx","../src/app/pages/overview-page.tsx","../src/app/pages/placeholder-page.tsx","../src/app/pages/things-page.tsx","../src/app/pages/typed-things-page.tsx","../src/app/do-app.tsx","../src/app/route-params.ts","../src/app/routes.ts"],"names":["jsx","useAuth","useState","useEffect","useMemo","jsxs","UserIcon","Settings","SidebarMenuButton","Link","useParams","Database","Shapes","Activity","Network","Code","Users","CreditCard","Building","Card","CardHeader","CardTitle","CardDescription","CardContent","useNavigate"],"mappings":"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","file":"chunk-KT52UU3U.js","sourcesContent":["'use client'\n\n/**\n * DO Config Context\n *\n * Provides static configuration (branding, routes, identity) to shell components.\n * Dynamic state (endpoint, namespace) is managed via TanStack Query in ../state/\n */\n\nimport { createContext, type ReactNode, useContext, useMemo } from 'react'\nimport type { DOShellConfig } from '../types/config'\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Static config context value (no state, just config)\n */\nexport interface DOConfigContextValue {\n /** Merged shell configuration */\n config: DOShellConfig\n}\n\n// ============================================================================\n// Context\n// ============================================================================\n\nconst DOConfigContext = createContext<DOConfigContextValue | null>(null)\n\n// ============================================================================\n// Defaults\n// ============================================================================\n\nconst defaultIdentity = {\n clientId: '',\n devMode: false,\n required: true,\n onUnauthenticated: 'landing' as const,\n}\n\nconst defaultConfig = {\n basePath: '/',\n defaultNamespace: 'default',\n branding: { name: 'DO Admin' },\n theme: { mode: 'system' as const },\n routes: {},\n customRoutes: [],\n}\n\n// ============================================================================\n// Provider\n// ============================================================================\n\ninterface DOConfigProviderProps {\n config: DOShellConfig\n children: ReactNode\n}\n\n/**\n * DOConfigProvider - Provides static shell configuration\n *\n * This is a minimal context for static config only.\n * Dynamic state (endpoint, namespace) is managed via TanStack Query.\n */\nexport function DOConfigProvider({ config, children }: DOConfigProviderProps) {\n const value = useMemo<DOConfigContextValue>(() => {\n const mergedConfig: DOShellConfig = {\n ...defaultConfig,\n ...config,\n branding: { ...defaultConfig.branding, ...config.branding },\n theme: { ...defaultConfig.theme, ...config.theme },\n identity: { ...defaultIdentity, ...config.identity },\n }\n\n return { config: mergedConfig }\n }, [config])\n\n return <DOConfigContext.Provider value={value}>{children}</DOConfigContext.Provider>\n}\n\n// ============================================================================\n// Hooks\n// ============================================================================\n\n/**\n * Hook to access static shell configuration\n */\nexport function useDOConfig(): DOConfigContextValue {\n const context = useContext(DOConfigContext)\n if (!context) {\n throw new Error('useDOConfig must be used within a DOConfigProvider')\n }\n return context\n}\n\n/**\n * Hook to access enabled routes configuration\n */\nexport function useDORoutes() {\n const { config } = useDOConfig()\n return config.routes ?? {}\n}\n\n/**\n * Hook to access custom routes\n */\nexport function useDOCustomRoutes() {\n const { config } = useDOConfig()\n return config.customRoutes ?? []\n}\n","'use client'\n\nimport { AuthKitProvider, useAuth } from '@workos-inc/authkit-react'\nimport { WorkOsWidgets } from '@workos-inc/widgets'\nimport { type ReactNode, useEffect, useState } from 'react'\nimport { useDOConfig } from './context'\n\n/**\n * Hook to access identity/auth state.\n * Re-exports useAuth from WorkOS AuthKit for convenience.\n */\nexport const useIdentity = useAuth\n\nexport interface DOIdentityProviderProps {\n children: ReactNode\n}\n\n/**\n * Inner provider that sets up identity widgets with theme detection\n */\nfunction IdentityWidgetsWrapper({ children }: { children: ReactNode }) {\n const [mounted, setMounted] = useState(false)\n const [isDark, setIsDark] = useState(false)\n\n // Detect theme from document class or system preference\n useEffect(() => {\n setMounted(true)\n\n const checkDarkMode = () => {\n const isDarkClass = document.documentElement.classList.contains('dark')\n const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches\n setIsDark(isDarkClass || (!document.documentElement.classList.contains('light') && prefersDark))\n }\n\n checkDarkMode()\n\n // Watch for class changes on html element\n const observer = new MutationObserver(checkDarkMode)\n observer.observe(document.documentElement, { attributes: true, attributeFilter: ['class'] })\n\n // Watch for system preference changes\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\n mediaQuery.addEventListener('change', checkDarkMode)\n\n return () => {\n observer.disconnect()\n mediaQuery.removeEventListener('change', checkDarkMode)\n }\n }, [])\n\n // Use \"inherit\" until mounted to avoid hydration mismatch\n const appearance = mounted ? (isDark ? 'dark' : 'light') : 'inherit'\n\n return (\n <WorkOsWidgets\n theme={{\n appearance,\n radius: 'medium',\n scaling: '100%',\n }}\n elements={{\n primaryButton: {\n variant: 'solid',\n },\n secondaryButton: {\n variant: 'outline',\n },\n }}\n >\n {children}\n </WorkOsWidgets>\n )\n}\n\n/**\n * Identity provider that wraps the shell with WorkOS AuthKit authentication.\n *\n * Provides authentication context to all child components.\n */\nexport function DOIdentityProvider({ children }: DOIdentityProviderProps) {\n const { config } = useDOConfig()\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 // Remove auth params from URL to prevent issues on refresh\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 <AuthKitProvider\n clientId={identity.clientId}\n apiHostname={identity.apiHostname}\n devMode={identity.devMode}\n redirectUri={redirectUri}\n onRedirectCallback={onRedirectCallback}\n >\n <IdentityWidgetsWrapper>{children}</IdentityWidgetsWrapper>\n </AuthKitProvider>\n )\n}\n","'use client'\n\n/**\n * AppProviders - Composed provider hierarchy for DOShell\n *\n * Provider hierarchy:\n * - ThemeProvider (next-themes) - Theme mode (light/dark/system)\n * - DOConfigProvider - Static shell config (branding, routes, identity)\n * - DOIdentityProvider - WorkOS AuthKit authentication\n * - DOProviderWithState - RPC client with auth token + dynamic endpoint\n *\n * Dynamic state (endpoint, namespace) is managed via TanStack Query in ../state/\n */\n\nimport { useAuth } from '@workos-inc/authkit-react'\nimport { ThemeProvider } from 'next-themes'\nimport { type ReactNode, useEffect, useMemo, useState } from 'react'\nimport { DOProvider } from '../providers/do-provider'\nimport { useEndpoint } from '../state'\nimport type { DOShellConfig } from '../types/config'\nimport type { DOAdminConfig } from '../types/do'\nimport { DOConfigProvider } from './context'\nimport { DOIdentityProvider } from './identity-provider'\n\nexport interface AppProvidersProps {\n config: DOShellConfig\n children: ReactNode\n}\n\n/**\n * Inner component that bridges WorkOS auth token + dynamic endpoint to DOProvider\n */\nfunction DOProviderWithState({\n config,\n initialNamespace,\n children,\n}: {\n config: DOAdminConfig\n initialNamespace?: string\n children: ReactNode\n}) {\n const { getAccessToken, user } = useAuth()\n const [accessToken, setAccessToken] = useState<string | undefined>(undefined)\n\n // Get endpoint from TanStack Query state (falls back to config default)\n const endpoint = useEndpoint(config.apiEndpoint)\n\n // Fetch the access token when user changes\n useEffect(() => {\n if (user) {\n getAccessToken()\n .then(setAccessToken)\n .catch(() => setAccessToken(undefined))\n } else {\n setAccessToken(undefined)\n }\n }, [user, getAccessToken])\n\n // Merge the WorkOS accessToken and dynamic endpoint into the DO config\n const authenticatedConfig = useMemo<DOAdminConfig>(() => {\n const authToken = accessToken ?? config.authToken\n return {\n ...config,\n apiEndpoint: endpoint,\n authToken,\n }\n }, [config, accessToken, endpoint])\n\n return (\n <DOProvider config={authenticatedConfig} initialNamespace={initialNamespace}>\n {children}\n </DOProvider>\n )\n}\n\n/**\n * AppProviders - Composed provider hierarchy for DOShell\n *\n * @example\n * ```tsx\n * <AppProviders\n * config={{\n * do: { apiEndpoint: '...', authMethod: 'jwt', bindings: [], realTimeUpdates: true },\n * identity: { clientId: 'client_xxx', devMode: true },\n * }}\n * >\n * <DOShell />\n * </AppProviders>\n * ```\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 <DOConfigProvider config={config}>\n <DOIdentityProvider>\n <DOProviderWithState\n config={config.do}\n initialNamespace={config.defaultNamespace}\n >\n {children}\n </DOProviderWithState>\n </DOIdentityProvider>\n </DOConfigProvider>\n </ThemeProvider>\n )\n}\n","'use client'\n\nimport { useAuth } from '@workos-inc/authkit-react'\nimport type { ReactNode } from 'react'\nimport { useDOConfig } from './context'\n\nexport interface AuthGateProps {\n children: ReactNode\n}\n\n/**\n * Default landing page component shown when user is not authenticated\n */\nfunction DefaultLandingPage() {\n const { signIn } = useAuth()\n\n return (\n <div className=\"min-h-screen bg-background flex flex-col items-center justify-center p-4\">\n <div className=\"text-center max-w-md\">\n <h1 className=\"text-3xl font-bold tracking-tight mb-4\">DO Admin</h1>\n <p className=\"text-muted-foreground mb-8\">\n Sign in to access the admin dashboard and manage your Durable Objects.\n </p>\n <button\n type=\"button\"\n onClick={() => signIn()}\n className=\"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-[var(--radius-md)] text-sm font-medium transition-colors bg-primary text-primary-foreground hover:bg-primary/90 h-10 px-6\"\n >\n Sign In\n </button>\n </div>\n </div>\n )\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 */\nexport function AuthGate({ children }: AuthGateProps) {\n const { config } = useDOConfig()\n const { user, isLoading } = useAuth()\n\n const { identity } = config\n const required = identity.required ?? true\n const onUnauthenticated = identity.onUnauthenticated ?? 'landing'\n\n // If auth is not required, always show children\n if (!required) {\n return <>{children}</>\n }\n\n // Show loading state while checking authentication\n if (isLoading) {\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\">Loading...</p>\n </div>\n </div>\n )\n }\n\n // User is authenticated, show dashboard\n if (user) {\n return <>{children}</>\n }\n\n // User is not authenticated - handle based on config\n switch (onUnauthenticated) {\n case 'redirect':\n // Redirect to external URL\n if (identity.unauthenticatedRedirectUrl && typeof window !== 'undefined') {\n window.location.href = identity.unauthenticatedRedirectUrl\n return (\n <div className=\"min-h-screen bg-background flex items-center justify-center\">\n <p className=\"text-sm text-muted-foreground\">Redirecting...</p>\n </div>\n )\n }\n // Fall through to landing if no redirect URL\n return identity.landingComponent ? <>{identity.landingComponent}</> : <DefaultLandingPage />\n\n case 'allow':\n // Allow access even without auth (rare use case)\n return <>{children}</>\n\n case 'landing':\n default:\n // Show landing page (custom or default)\n return identity.landingComponent ? <>{identity.landingComponent}</> : <DefaultLandingPage />\n }\n}\n","'use client'\n\nimport { useAuth } from '@workos-inc/authkit-react'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n SidebarMenuButton,\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from '@mdxui/primitives'\nimport { ChevronsUpDown, LogOut, Settings, User as UserIcon } from 'lucide-react'\n\ninterface UserMenuProps {\n /** Whether to show in compact mode (icon only) */\n compact?: boolean\n}\n\n/**\n * Get initials from a name (first letter of first and last name)\n */\nfunction getInitials(name: string | undefined): string {\n if (!name) return '?'\n const parts = name.trim().split(/\\s+/)\n if (parts.length === 1) return parts[0].charAt(0).toUpperCase()\n return (parts[0].charAt(0) + parts[parts.length - 1].charAt(0)).toUpperCase()\n}\n\n/**\n * UserMenu - User dropdown with profile info and sign out\n *\n * Displays the current user's avatar and name, with options for\n * settings and signing out.\n */\nexport function UserMenu({ compact = false }: UserMenuProps) {\n const { user, signOut, isLoading } = useAuth()\n\n if (isLoading) {\n return (\n <div className=\"flex items-center gap-2 p-2\">\n <div className=\"h-8 w-8 animate-pulse rounded-full bg-muted\" />\n {!compact && <div className=\"h-4 w-24 animate-pulse rounded bg-muted\" />}\n </div>\n )\n }\n\n if (!user) {\n return null\n }\n\n const displayName = user.firstName\n ? `${user.firstName}${user.lastName ? ` ${user.lastName}` : ''}`\n : user.email\n\n const initials = getInitials(user.firstName ? `${user.firstName} ${user.lastName ?? ''}` : user.email)\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <SidebarMenuButton\n size=\"lg\"\n className=\"data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground\"\n >\n <Avatar className=\"h-8 w-8 rounded-lg\">\n <AvatarImage src={user.profilePictureUrl ?? undefined} alt={displayName} />\n <AvatarFallback className=\"rounded-lg\">{initials}</AvatarFallback>\n </Avatar>\n {!compact && (\n <div className=\"grid flex-1 text-left text-sm leading-tight\">\n <span className=\"truncate font-semibold\">{displayName}</span>\n <span className=\"truncate text-xs text-muted-foreground\">{user.email}</span>\n </div>\n )}\n <ChevronsUpDown className=\"ml-auto size-4\" />\n </SidebarMenuButton>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n className=\"w-[--radix-dropdown-menu-trigger-width] min-w-56 rounded-[var(--radius)]\"\n side=\"bottom\"\n align=\"end\"\n sideOffset={4}\n >\n <DropdownMenuLabel className=\"p-0 font-normal\">\n <div className=\"flex items-center gap-2 px-1 py-1.5 text-left text-sm\">\n <Avatar className=\"h-8 w-8 rounded-lg\">\n <AvatarImage src={user.profilePictureUrl ?? undefined} alt={displayName} />\n <AvatarFallback className=\"rounded-lg\">{initials}</AvatarFallback>\n </Avatar>\n <div className=\"grid flex-1 text-left text-sm leading-tight\">\n <span className=\"truncate font-semibold\">{displayName}</span>\n <span className=\"truncate text-xs text-muted-foreground\">{user.email}</span>\n </div>\n </div>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DropdownMenuItem>\n <UserIcon className=\"mr-2 size-4\" />\n Account\n </DropdownMenuItem>\n <DropdownMenuItem>\n <Settings className=\"mr-2 size-4\" />\n Settings\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem onClick={() => signOut()}>\n <LogOut className=\"mr-2 size-4\" />\n Sign Out\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n","\"use client\"\n\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n} from \"@mdxui/primitives\"\nimport { Link, useRouterState } from \"@tanstack/react-router\"\nimport {\n Activity,\n // Additional icons for missing routes\n BookOpen,\n Bot,\n Building,\n Code,\n CreditCard,\n Database,\n GitBranch,\n Home,\n Key,\n Network,\n Play,\n Plug,\n Settings,\n Shapes,\n Shield,\n UserCog,\n Users,\n Zap,\n} from \"lucide-react\"\nimport type * as React from \"react\"\nimport { useDOConfig, useDORoutes } from \"./context\"\nimport { UserMenu } from \"./user-menu\"\n\n/**\n * Navigation item definition\n */\ninterface NavItem {\n title: string\n url: string\n icon: React.ComponentType<{ className?: string }>\n routeKey?: string // Key in routes config for enable/disable\n}\n\n/**\n * Navigation structure for the DO Shell.\n * Organized into logical groups.\n */\nconst navGroups: Record<string, NavItem[]> = {\n main: [{ title: \"Overview\", url: \"/\", icon: Home, routeKey: \"overview\" }],\n development: [\n { title: \"Agents\", url: \"/agents\", icon: Bot, routeKey: \"agents\" },\n {\n title: \"Functions\",\n url: \"/functions\",\n icon: Code,\n routeKey: \"functions\",\n },\n {\n title: \"Workflows\",\n url: \"/workflows\",\n icon: GitBranch,\n routeKey: \"workflows\",\n },\n {\n title: \"Databases\",\n url: \"/databases\",\n icon: Database,\n routeKey: \"databases\",\n },\n ],\n dataModel: [\n { title: \"Things\", url: \"/things\", icon: Shapes, routeKey: \"things\" },\n { title: \"Nouns\", url: \"/nouns\", icon: BookOpen, routeKey: \"nouns\" },\n { title: \"Verbs\", url: \"/verbs\", icon: Zap, routeKey: \"verbs\" },\n { title: \"Actions\", url: \"/actions\", icon: Play, routeKey: \"actions\" },\n {\n title: \"Relationships\",\n url: \"/relationships\",\n icon: Network,\n routeKey: \"relationships\",\n },\n { title: \"Events\", url: \"/events\", icon: Activity, routeKey: \"events\" },\n ],\n saas: [\n {\n title: \"Customers\",\n url: \"/customers\",\n icon: Users,\n routeKey: \"customers\",\n },\n {\n title: \"Subscriptions\",\n url: \"/subscriptions\",\n icon: CreditCard,\n routeKey: \"subscriptions\",\n },\n {\n title: \"Integrations\",\n url: \"/integrations\",\n icon: Plug,\n routeKey: \"integrations\",\n },\n ],\n admin: [\n { title: \"Organizations\", url: \"/orgs\", icon: Building, routeKey: \"orgs\" },\n { title: \"Roles\", url: \"/roles\", icon: Shield, routeKey: \"roles\" },\n { title: \"Users\", url: \"/users\", icon: UserCog, routeKey: \"users\" },\n { title: \"API Keys\", url: \"/api-keys\", icon: Key, routeKey: \"apiKeys\" },\n {\n title: \"Settings\",\n url: \"/settings\",\n icon: Settings,\n routeKey: \"settings\",\n },\n ],\n}\n\nexport interface DOShellNavProps extends React.ComponentProps<typeof Sidebar> {\n /** Optional header content to display at the top of the sidebar */\n headerContent?: React.ReactNode\n}\n\n/**\n * DOShellNav - Sidebar navigation component for the DO Shell.\n *\n * Features:\n * - Highlights active route based on current location\n * - Uses lucide-react icons for each navigation item\n * - Collapsible on mobile via the Sidebar component\n * - Supports custom header content\n * - Routes can be enabled/disabled via config\n */\nexport function DOShellNav({ headerContent, ...props }: DOShellNavProps) {\n const routerState = useRouterState()\n const { config } = useDOConfig()\n const routesConfig = useDORoutes()\n\n const branding = config.branding\n const pathname = routerState.location.pathname\n\n /**\n * Determines if a navigation item is active based on the current route.\n * For the overview page, requires exact match. For other pages, uses prefix matching.\n */\n const isActive = (url: string): boolean => {\n if (url === \"/\") {\n return pathname === \"/\" || pathname === \"\"\n }\n return pathname.startsWith(url)\n }\n\n /**\n * Check if a route is enabled\n */\n const isRouteEnabled = (routeKey: string | undefined): boolean => {\n if (!routeKey) return true\n // If explicitly set to false, hide it\n if (routesConfig[routeKey] === false) return false\n return true\n }\n\n /**\n * Filter nav items by enabled routes\n */\n const filterNavItems = (items: NavItem[]): NavItem[] => {\n return items.filter((item) => isRouteEnabled(item.routeKey))\n }\n\n return (\n <Sidebar variant=\"inset\" {...props}>\n <SidebarHeader>\n <SidebarMenu>\n <SidebarMenuItem>\n <SidebarMenuButton size=\"lg\" asChild>\n <Link to=\"/\">\n <div className=\"bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-8 items-center justify-center rounded-(--radius)\">\n {branding?.logo ?? <Database className=\"size-4\" />}\n </div>\n <div className=\"grid flex-1 text-left text-sm leading-tight\">\n <span className=\"truncate font-medium\">\n {branding?.name ?? \"DO Admin\"}\n </span>\n <span className=\"truncate text-xs\">Dashboard</span>\n </div>\n </Link>\n </SidebarMenuButton>\n </SidebarMenuItem>\n </SidebarMenu>\n {headerContent}\n </SidebarHeader>\n\n <SidebarContent>\n {/* Main navigation - no label */}\n <SidebarGroup>\n <SidebarMenu>\n {filterNavItems(navGroups.main).map((item) => (\n <SidebarMenuItem key={item.title}>\n <SidebarMenuButton\n asChild\n isActive={isActive(item.url)}\n tooltip={item.title}\n >\n <Link to={item.url}>\n <item.icon className=\"size-4\" />\n <span>{item.title}</span>\n </Link>\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarGroup>\n\n {/* Development group */}\n {filterNavItems(navGroups.development).length > 0 && (\n <SidebarGroup>\n <SidebarGroupLabel>Development</SidebarGroupLabel>\n <SidebarMenu>\n {filterNavItems(navGroups.development).map((item) => (\n <SidebarMenuItem key={item.title}>\n <SidebarMenuButton\n asChild\n isActive={isActive(item.url)}\n tooltip={item.title}\n >\n <Link to={item.url}>\n <item.icon className=\"size-4\" />\n <span>{item.title}</span>\n </Link>\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarGroup>\n )}\n\n {/* Data Model group */}\n {filterNavItems(navGroups.dataModel).length > 0 && (\n <SidebarGroup>\n <SidebarGroupLabel>Data Model</SidebarGroupLabel>\n <SidebarMenu>\n {filterNavItems(navGroups.dataModel).map((item) => (\n <SidebarMenuItem key={item.title}>\n <SidebarMenuButton\n asChild\n isActive={isActive(item.url)}\n tooltip={item.title}\n >\n <Link to={item.url}>\n <item.icon className=\"size-4\" />\n <span>{item.title}</span>\n </Link>\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarGroup>\n )}\n\n {/* SaaS group */}\n {filterNavItems(navGroups.saas).length > 0 && (\n <SidebarGroup>\n <SidebarGroupLabel>SaaS</SidebarGroupLabel>\n <SidebarMenu>\n {filterNavItems(navGroups.saas).map((item) => (\n <SidebarMenuItem key={item.title}>\n <SidebarMenuButton\n asChild\n isActive={isActive(item.url)}\n tooltip={item.title}\n >\n <Link to={item.url}>\n <item.icon className=\"size-4\" />\n <span>{item.title}</span>\n </Link>\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarGroup>\n )}\n\n {/* Admin group */}\n {filterNavItems(navGroups.admin).length > 0 && (\n <SidebarGroup>\n <SidebarGroupLabel>Admin</SidebarGroupLabel>\n <SidebarMenu>\n {filterNavItems(navGroups.admin).map((item) => (\n <SidebarMenuItem key={item.title}>\n <SidebarMenuButton\n asChild\n isActive={isActive(item.url)}\n tooltip={item.title}\n >\n <Link to={item.url}>\n <item.icon className=\"size-4\" />\n <span>{item.title}</span>\n </Link>\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarGroup>\n )}\n </SidebarContent>\n\n <SidebarFooter>\n <SidebarMenu>\n <SidebarMenuItem>\n <UserMenu />\n </SidebarMenuItem>\n </SidebarMenu>\n </SidebarFooter>\n </Sidebar>\n )\n}\n","\"use client\"\n\nimport {\n Separator,\n SidebarInset,\n SidebarProvider,\n SidebarTrigger,\n Toaster,\n} from \"@mdxui/primitives\"\nimport { Link } from \"@tanstack/react-router\"\nimport type * as React from \"react\"\nimport {\n type BreadcrumbItemConfig,\n type BreadcrumbLinkProps,\n Breadcrumbs,\n} from \"../components/breadcrumbs\"\nimport { useBreadcrumbs } from \"../hooks/use-breadcrumbs\"\nimport { AuthGate } from \"./auth-gate\"\nimport { DOShellNav } from \"./do-shell-nav\"\n\n/**\n * TanStack Router Link adapter for Breadcrumbs\n */\nfunction RouterLink({ href, children, className }: BreadcrumbLinkProps) {\n return (\n <Link to={href} className={className}>\n {children}\n </Link>\n )\n}\n\nexport interface DOShellProps {\n /** Children to render in the main content area (typically TanStack Router Outlet) */\n children: React.ReactNode\n /** Optional header content for the sidebar */\n sidebarHeaderContent?: React.ReactNode\n /** Optional content to render in the header after breadcrumbs */\n headerContent?: React.ReactNode\n /**\n * Breadcrumb items to display.\n * If not provided, auto-generates from current route.\n * Pass empty array to disable breadcrumbs.\n */\n breadcrumbs?: BreadcrumbItemConfig[]\n}\n\n/**\n * DOShell - Main layout wrapper for the DO Admin Dashboard.\n *\n * This layout provides:\n * - Authentication gate (shows landing page if not authenticated)\n * - A collapsible sidebar with navigation on the left\n * - A main content area with a header containing breadcrumbs\n * - Toast notifications via Sonner\n * - Responsive design that works on mobile and desktop\n *\n * Uses TanStack Router for navigation.\n *\n * @example\n * ```tsx\n * <DOShell headerContent={<SearchBar />}>\n * <Outlet />\n * </DOShell>\n * ```\n */\nexport function DOShell({\n children,\n sidebarHeaderContent,\n headerContent,\n breadcrumbs: breadcrumbsProp,\n}: DOShellProps) {\n // Auto-generate breadcrumbs from route if not provided\n const autoBreadcrumbs = useBreadcrumbs()\n const breadcrumbs = breadcrumbsProp ?? autoBreadcrumbs\n\n return (\n <AuthGate>\n <SidebarProvider className=\"h-svh!\">\n <DOShellNav headerContent={sidebarHeaderContent} />\n <SidebarInset className=\"overflow-hidden\">\n <header className=\"relative flex h-16 shrink-0 items-center gap-2 border-b bg-background transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12\">\n <div className=\"z-10 flex shrink-0 items-center gap-2 bg-background px-4\">\n <SidebarTrigger className=\"-ml-1\" />\n <Separator orientation=\"vertical\" className=\"mr-2 h-4\" />\n {breadcrumbs.length > 0 && (\n <Breadcrumbs items={breadcrumbs} LinkComponent={RouterLink} />\n )}\n </div>\n {headerContent && (\n <div className=\"flex flex-1 items-center px-4 xl:absolute xl:inset-0 xl:justify-center\">\n <div className=\"w-full max-w-md\">{headerContent}</div>\n </div>\n )}\n </header>\n <main className=\"flex-1 overflow-auto\">{children}</main>\n </SidebarInset>\n <Toaster closeButton position=\"top-right\" />\n </SidebarProvider>\n </AuthGate>\n )\n}\n","'use client'\n\n/**\n * DatabasesPage\n *\n * Page wrapper for DataGridView that extracts route params.\n */\n\nimport { useParams } from '@tanstack/react-router'\nimport { DataGridView } from '../../views'\n\n/**\n * DatabasesPage - Renders DataGridView with route params\n *\n * Route: /databases/:ns?/:type?\n */\nexport function DatabasesPage() {\n const params = useParams({ strict: false })\n const ns = params.ns as string | undefined\n const type = params.type as string | undefined\n\n return (\n <DataGridView\n initialNamespace={ns}\n initialType={type}\n className=\"h-full\"\n />\n )\n}\n","'use client'\n\n/**\n * DocumentPage\n *\n * Page wrapper for DocumentEditorView that extracts route params.\n */\n\nimport { useParams, useNavigate } from '@tanstack/react-router'\nimport { DocumentEditorView } from '../../views'\n\n/**\n * DocumentPage - Renders DocumentEditorView with route params\n *\n * Route: /things/$ns/$type/$id\n */\nexport function DocumentPage() {\n const params = useParams({ strict: false })\n const ns = params.ns as string\n const type = params.type as string\n const id = params.id as string\n const navigate = useNavigate()\n\n const handleBack = () => {\n // Navigate back to things browse view\n navigate({ to: `/things/${ns}/${type}` })\n }\n\n const handleDelete = () => {\n // Navigate back to things browse view after delete\n navigate({ to: `/things/${ns}/${type}` })\n }\n\n return (\n <DocumentEditorView\n initialNamespace={ns}\n initialType={type}\n initialId={id}\n onBack={handleBack}\n onDelete={handleDelete}\n className=\"h-full\"\n />\n )\n}\n","'use client'\n\n/**\n * FunctionsPage\n *\n * Page wrapper for FunctionEditorView.\n */\n\nimport { FunctionEditorView } from '../../views'\n\n/**\n * FunctionsPage - Renders FunctionEditorView\n *\n * Route: /functions\n */\nexport function FunctionsPage() {\n return <FunctionEditorView className=\"h-full\" />\n}\n","'use client'\n\n/**\n * OverviewPage\n *\n * Dashboard home page with stats and quick actions.\n */\n\nimport * as React from 'react'\nimport { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@mdxui/primitives'\nimport { Database, Code, Users, Activity, Shapes, Network, CreditCard, Building } from 'lucide-react'\nimport { Link } from '@tanstack/react-router'\nimport { useDO } from '../../providers/do-provider'\nimport { useNamespaces, useTypes, useThings } from '../../hooks'\n\ninterface StatCardProps {\n title: string\n value: string | number\n description?: string\n icon: React.ComponentType<{ className?: string }>\n href?: string\n}\n\nfunction StatCard({ title, value, description, icon: Icon, href }: StatCardProps) {\n const content = (\n <Card className=\"hover:bg-muted/50 transition-colors\">\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 className=\"h-4 w-4 text-muted-foreground\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{value}</div>\n {description && (\n <p className=\"text-xs text-muted-foreground\">{description}</p>\n )}\n </CardContent>\n </Card>\n )\n\n if (href) {\n return (\n <Link to={href} className=\"block\">\n {content}\n </Link>\n )\n }\n\n return content\n}\n\ninterface QuickActionProps {\n title: string\n description: string\n icon: React.ComponentType<{ className?: string }>\n href: string\n}\n\nfunction QuickAction({ title, description, icon: Icon, href }: QuickActionProps) {\n return (\n <Link\n to={href}\n className=\"flex items-center gap-4 rounded-(--radius) border p-4 hover:bg-muted/50 transition-colors\"\n >\n <div className=\"flex h-10 w-10 items-center justify-center rounded-(--radius) bg-primary/10\">\n <Icon className=\"h-5 w-5 text-primary\" />\n </div>\n <div>\n <h3 className=\"font-medium\">{title}</h3>\n <p className=\"text-sm text-muted-foreground\">{description}</p>\n </div>\n </Link>\n )\n}\n\n/**\n * OverviewPage - Main dashboard landing page\n *\n * Shows stats, quick actions, and recent activity.\n */\nexport function OverviewPage() {\n const { namespace, isConnected } = useDO()\n\n // Fetch stats data\n const { data: namespaces } = useNamespaces()\n const { data: types } = useTypes({ ns: namespace })\n const { data: thingsResult } = useThings({ ns: namespace, limit: 1 })\n\n const namespaceCount = namespaces?.length ?? 0\n const typeCount = types?.length ?? 0\n const thingCount = thingsResult?.total ?? 0\n\n return (\n <div className=\"space-y-8\">\n {/* Header */}\n <div>\n <h1 className=\"text-3xl font-bold tracking-tight\">Dashboard</h1>\n <p className=\"text-muted-foreground\">\n Welcome to DO Admin. Manage your Durable Objects and data.\n </p>\n </div>\n\n {/* Connection Status */}\n {!isConnected && (\n <Card className=\"border-destructive\">\n <CardHeader>\n <CardTitle className=\"text-destructive\">Connection Error</CardTitle>\n <CardDescription>\n Unable to connect to the backend. Please check your configuration.\n </CardDescription>\n </CardHeader>\n </Card>\n )}\n\n {/* Stats Grid */}\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-4\">\n <StatCard\n title=\"Namespaces\"\n value={namespaceCount}\n description=\"Active namespaces\"\n icon={Database}\n href=\"/databases\"\n />\n <StatCard\n title=\"Types\"\n value={typeCount}\n description=\"Defined types\"\n icon={Shapes}\n href=\"/things\"\n />\n <StatCard\n title=\"Things\"\n value={thingCount}\n description=\"Total records\"\n icon={Activity}\n href=\"/things\"\n />\n <StatCard\n title=\"Namespace\"\n value={namespace}\n description=\"Currently selected\"\n icon={Network}\n />\n </div>\n\n {/* Quick Actions */}\n <div>\n <h2 className=\"text-lg font-semibold mb-4\">Quick Actions</h2>\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n <QuickAction\n title=\"Browse Things\"\n description=\"View and manage all your Things\"\n icon={Shapes}\n href=\"/things\"\n />\n <QuickAction\n title=\"Query Database\"\n description=\"Run queries on your data\"\n icon={Database}\n href=\"/databases\"\n />\n <QuickAction\n title=\"Run Functions\"\n description=\"Execute code against your DO\"\n icon={Code}\n href=\"/functions\"\n />\n <QuickAction\n title=\"Manage Customers\"\n description=\"View and manage customers\"\n icon={Users}\n href=\"/customers\"\n />\n <QuickAction\n title=\"View Subscriptions\"\n description=\"Manage billing and subscriptions\"\n icon={CreditCard}\n href=\"/subscriptions\"\n />\n <QuickAction\n title=\"Organizations\"\n description=\"Manage organizations and teams\"\n icon={Building}\n href=\"/orgs\"\n />\n </div>\n </div>\n\n {/* Current Namespace Info */}\n <Card>\n <CardHeader>\n <CardTitle>Current Namespace: {namespace}</CardTitle>\n <CardDescription>\n You are currently working in the \"{namespace}\" namespace.\n Switch namespaces from the Things or Databases view.\n </CardDescription>\n </CardHeader>\n </Card>\n </div>\n )\n}\n","'use client'\n\n/**\n * PlaceholderPage\n *\n * Placeholder component for routes that are not yet implemented.\n */\n\nimport { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@mdxui/primitives'\nimport { Construction } from 'lucide-react'\n\ninterface PlaceholderPageProps {\n /** Title for the page */\n title: string\n /** Description of what this page will contain */\n description?: string\n}\n\n/**\n * PlaceholderPage - Shows a \"coming soon\" message for unimplemented routes\n */\nexport function PlaceholderPage({ title, description }: PlaceholderPageProps) {\n return (\n <div className=\"flex h-full items-center justify-center p-4\">\n <Card className=\"max-w-md\">\n <CardHeader className=\"text-center\">\n <div className=\"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-muted\">\n <Construction className=\"h-8 w-8 text-muted-foreground\" />\n </div>\n <CardTitle>{title}</CardTitle>\n <CardDescription>\n {description ?? 'This feature is coming soon.'}\n </CardDescription>\n </CardHeader>\n <CardContent className=\"text-center text-sm text-muted-foreground\">\n <p>We're working hard to bring you this functionality.</p>\n <p>Check back soon for updates.</p>\n </CardContent>\n </Card>\n </div>\n )\n}\n\n// Pre-configured placeholder pages for specific routes\n\nexport function AgentsPage() {\n return (\n <PlaceholderPage\n title=\"Agents\"\n description=\"Manage AI agents and their configurations.\"\n />\n )\n}\n\nexport function WorkflowsPage() {\n return (\n <PlaceholderPage\n title=\"Workflows\"\n description=\"Create and manage automated workflows.\"\n />\n )\n}\n\nexport function RelationshipsPage() {\n return (\n <PlaceholderPage\n title=\"Relationships\"\n description=\"View and manage relationships between Things.\"\n />\n )\n}\n\nexport function EventsPage() {\n return (\n <PlaceholderPage\n title=\"Events\"\n description=\"Browse and manage events in your system.\"\n />\n )\n}\n\nexport function CustomersPage() {\n return (\n <PlaceholderPage\n title=\"Customers\"\n description=\"View and manage your customers.\"\n />\n )\n}\n\nexport function SubscriptionsPage() {\n return (\n <PlaceholderPage\n title=\"Subscriptions\"\n description=\"Manage customer subscriptions and billing.\"\n />\n )\n}\n\nexport function IntegrationsPage() {\n return (\n <PlaceholderPage\n title=\"Integrations\"\n description=\"Configure third-party integrations.\"\n />\n )\n}\n\nexport function OrgsPage() {\n return (\n <PlaceholderPage\n title=\"Organizations\"\n description=\"Manage organizations and their settings.\"\n />\n )\n}\n\nexport function RolesPage() {\n return (\n <PlaceholderPage\n title=\"Roles\"\n description=\"Configure roles and permissions.\"\n />\n )\n}\n\nexport function UsersPage() {\n return (\n <PlaceholderPage\n title=\"Users\"\n description=\"Manage users and their access.\"\n />\n )\n}\n\nexport function ApiKeysPage() {\n return (\n <PlaceholderPage\n title=\"API Keys\"\n description=\"Generate and manage API keys.\"\n />\n )\n}\n\nexport function SettingsPage() {\n return (\n <PlaceholderPage\n title=\"Settings\"\n description=\"Configure system settings.\"\n />\n )\n}\n","'use client'\n\n/**\n * ThingsPage\n *\n * Page wrapper for DataBrowserView that extracts route params.\n */\n\nimport { useParams, useNavigate } from '@tanstack/react-router'\nimport { DataBrowserView } from '../../views'\nimport type { Thing } from '../../types'\n\n/**\n * ThingsPage - Renders DataBrowserView with route params\n *\n * Route: /things/$ns?/$type?\n */\nexport function ThingsPage() {\n const params = useParams({ strict: false })\n const ns = params.ns as string | undefined\n const type = params.type as string | undefined\n const navigate = useNavigate()\n\n const handleOpen = (thing: Thing) => {\n // Navigate to document editor view\n navigate({ to: `/things/${thing.ns}/${thing.type}/${thing.id}` })\n }\n\n return (\n <DataBrowserView\n initialNamespace={ns}\n initialType={type}\n onOpen={handleOpen}\n className=\"h-full\"\n />\n )\n}\n","'use client'\n\n/**\n * TypedThingsPage\n *\n * Reusable page wrapper for DataBrowserView with a pre-set type filter.\n * Used for routes like /nouns, /verbs, /actions, etc.\n */\n\nimport { useNavigate } from '@tanstack/react-router'\nimport { DataBrowserView } from '../../views'\nimport type { Thing } from '../../types'\n\nexport interface TypedThingsPageProps {\n /** The type to filter by */\n type: string\n}\n\n/**\n * TypedThingsPage - Renders DataBrowserView filtered to a specific type\n */\nexport function TypedThingsPage({ type }: TypedThingsPageProps) {\n const navigate = useNavigate()\n\n const handleOpen = (thing: Thing) => {\n // Navigate to document editor view under /things\n navigate({ to: `/things/${thing.ns}/${thing.type}/${thing.id}` })\n }\n\n return (\n <DataBrowserView\n initialType={type}\n onOpen={handleOpen}\n className=\"h-full\"\n />\n )\n}\n\n// Pre-configured page components for common types\n\nexport function NounsPage() {\n return <TypedThingsPage type=\"Noun\" />\n}\n\nexport function VerbsPage() {\n return <TypedThingsPage type=\"Verb\" />\n}\n\nexport function ActionsPage() {\n return <TypedThingsPage type=\"Action\" />\n}\n\nexport function RelationshipsPage() {\n return <TypedThingsPage type=\"Relationship\" />\n}\n\nexport function EventsPage() {\n return <TypedThingsPage type=\"Event\" />\n}\n\n// SaaS types\nexport function CustomersPage() {\n return <TypedThingsPage type=\"Customer\" />\n}\n\nexport function SubscriptionsPage() {\n return <TypedThingsPage type=\"Subscription\" />\n}\n\n// Admin types\nexport function OrgsPage() {\n return <TypedThingsPage type=\"Org\" />\n}\n\nexport function RolesPage() {\n return <TypedThingsPage type=\"Role\" />\n}\n\nexport function UsersPage() {\n return <TypedThingsPage type=\"User\" />\n}\n\nexport function APIKeysPage() {\n return <TypedThingsPage type=\"APIKey\" />\n}\n","\"use client\";\n\n/**\n * DOApp - Complete routed application entry point\n *\n * This component provides a complete DO Admin Dashboard with:\n * - WorkOS AuthKit authentication\n * - Theme support (light/dark/system)\n * - TanStack Query for data fetching\n * - TanStack Router for navigation (via @mdxui/navigation)\n * - All shell components and pages\n */\n\nimport { createWebRouter, WebOutlet } from \"@mdxui/navigation/web\";\nimport { RouterProvider } from \"@tanstack/react-router\";\nimport * as React from \"react\";\nimport { EndpointSelector } from \"../components/endpoint-selector\";\nimport { useDOState } from \"../state\";\nimport type { DOShellConfig } from \"../types/config\";\nimport { AppProviders } from \"./app-providers\";\nimport { useDOConfig } from \"./context\";\nimport { DOShell } from \"./do-shell\";\nimport { DatabasesPage } from \"./pages/databases-page\";\nimport { DocumentPage } from \"./pages/document-page\";\nimport { FunctionsPage } from \"./pages/functions-page\";\nimport { OverviewPage } from \"./pages/overview-page\";\nimport { PlaceholderPage } from \"./pages/placeholder-page\";\nimport { ThingsPage } from \"./pages/things-page\";\nimport {\n\tActionsPage,\n\tAPIKeysPage,\n\tCustomersPage,\n\tEventsPage,\n\tNounsPage,\n\tOrgsPage,\n\tRelationshipsPage,\n\tRolesPage,\n\tSubscriptionsPage,\n\tUsersPage,\n\tVerbsPage,\n} from \"./pages/typed-things-page\";\n\nexport interface DOAppProps {\n\t/** Shell configuration */\n\tconfig: DOShellConfig;\n\t/** Optional custom content to render in the shell header */\n\theaderContent?: React.ReactNode;\n\t/** Optional custom content to render in the sidebar header */\n\tsidebarHeaderContent?: React.ReactNode;\n}\n\n/**\n * DO Admin route configuration\n *\n * Defines all routes for the DO Admin dashboard.\n * Routes are organized by section: Main, Development, Data Model, SaaS, Admin.\n */\nexport const doRoutes = {\n\t// Main\n\toverview: {\n\t\tpath: \"/\",\n\t\tcomponent: OverviewPage,\n\t},\n\n\t// Development\n\tagents: {\n\t\tpath: \"/agents\",\n\t\tcomponent: () => (\n\t\t\t<PlaceholderPage title=\"Agents\" description=\"Autonomous AI workers\" />\n\t\t),\n\t},\n\tfunctions: {\n\t\tpath: \"/functions\",\n\t\tcomponent: FunctionsPage,\n\t},\n\tworkflows: {\n\t\tpath: \"/workflows\",\n\t\tcomponent: FunctionsPage, // Uses FunctionEditorView for now\n\t},\n\tdatabases: {\n\t\tpath: \"/databases\",\n\t\tcomponent: DatabasesPage,\n\t},\n\tdatabasesWithParams: {\n\t\tpath: \"/databases/:ns/:type\",\n\t\tcomponent: DatabasesPage,\n\t},\n\n\t// Data Model\n\tthings: {\n\t\tpath: \"/things\",\n\t\tcomponent: ThingsPage,\n\t},\n\tthingsWithNs: {\n\t\tpath: \"/things/:ns\",\n\t\tcomponent: ThingsPage,\n\t},\n\tthingsWithType: {\n\t\tpath: \"/things/:ns/:type\",\n\t\tcomponent: ThingsPage,\n\t},\n\tdocument: {\n\t\tpath: \"/things/:ns/:type/:id\",\n\t\tcomponent: DocumentPage,\n\t},\n\tnouns: {\n\t\tpath: \"/nouns\",\n\t\tcomponent: NounsPage,\n\t},\n\tverbs: {\n\t\tpath: \"/verbs\",\n\t\tcomponent: VerbsPage,\n\t},\n\tactions: {\n\t\tpath: \"/actions\",\n\t\tcomponent: ActionsPage,\n\t},\n\trelationships: {\n\t\tpath: \"/relationships\",\n\t\tcomponent: RelationshipsPage,\n\t},\n\tevents: {\n\t\tpath: \"/events\",\n\t\tcomponent: EventsPage,\n\t},\n\n\t// SaaS\n\tcustomers: {\n\t\tpath: \"/customers\",\n\t\tcomponent: CustomersPage,\n\t},\n\tsubscriptions: {\n\t\tpath: \"/subscriptions\",\n\t\tcomponent: SubscriptionsPage,\n\t},\n\tintegrations: {\n\t\tpath: \"/integrations\",\n\t\tcomponent: () => (\n\t\t\t<PlaceholderPage\n\t\t\t\ttitle=\"Integrations\"\n\t\t\t\tdescription=\"External service connections\"\n\t\t\t/>\n\t\t),\n\t},\n\n\t// Admin\n\torgs: {\n\t\tpath: \"/orgs\",\n\t\tcomponent: OrgsPage,\n\t},\n\troles: {\n\t\tpath: \"/roles\",\n\t\tcomponent: RolesPage,\n\t},\n\tusers: {\n\t\tpath: \"/users\",\n\t\tcomponent: UsersPage,\n\t},\n\tapiKeys: {\n\t\tpath: \"/api-keys\",\n\t\tcomponent: APIKeysPage,\n\t},\n\tsettings: {\n\t\tpath: \"/settings\",\n\t\tcomponent: () => (\n\t\t\t<PlaceholderPage title=\"Settings\" description=\"Application settings\" />\n\t\t),\n\t},\n};\n\n/**\n * Default header content with endpoint selector\n */\nfunction DefaultHeaderContent() {\n\tconst { config } = useDOConfig();\n\tconst { endpoint, setEndpoint, recentEndpoints } = useDOState({\n\t\tendpoint: config.do.apiEndpoint,\n\t});\n\treturn (\n\t\t<EndpointSelector\n\t\t\tendpoint={endpoint}\n\t\t\tonEndpointChange={setEndpoint}\n\t\t\trecentEndpoints={recentEndpoints}\n\t\t\tclassName=\"w-full max-w-md\"\n\t\t/>\n\t);\n}\n\n/**\n * Creates a shell layout component with the given props\n */\nfunction createShellComponent(\n\theaderContent?: React.ReactNode,\n\tsidebarHeaderContent?: React.ReactNode,\n): React.ComponentType<unknown> {\n\treturn function ShellLayout() {\n\t\treturn (\n\t\t\t<DOShell\n\t\t\t\theaderContent={headerContent ?? <DefaultHeaderContent />}\n\t\t\t\tsidebarHeaderContent={sidebarHeaderContent}\n\t\t\t>\n\t\t\t\t<WebOutlet />\n\t\t\t</DOShell>\n\t\t);\n\t};\n}\n\n/**\n * DOApp - Complete routed DO Admin Dashboard application with authentication\n *\n * This is the main entry point for using DO Admin with WorkOS authentication and routing.\n * It sets up all necessary providers, routing, and the shell.\n *\n * @example\n * ```tsx\n * import { DOApp } from '@mdxui/do'\n *\n * function App() {\n * return (\n * <DOApp\n * config={{\n * do: {\n * apiEndpoint: 'https://api.do.ai',\n * authMethod: 'jwt',\n * bindings: [],\n * realTimeUpdates: true,\n * },\n * identity: {\n * clientId: 'client_xxx',\n * devMode: true,\n * },\n * branding: {\n * name: 'My DO Admin',\n * },\n * defaultNamespace: 'production',\n * }}\n * />\n * )\n * }\n * ```\n */\nexport function DOApp({\n\tconfig,\n\theaderContent,\n\tsidebarHeaderContent,\n}: DOAppProps) {\n\tconst basePath = config.basePath ?? \"\";\n\n\t// Create router with routes - memoize to prevent recreation on every render\n\tconst router = React.useMemo(() => {\n\t\t// Create shell component with props baked in\n\t\tconst ShellComponent = createShellComponent(\n\t\t\theaderContent,\n\t\t\tsidebarHeaderContent,\n\t\t);\n\n\t\t// Create router with shell as root component\n\t\treturn createWebRouter(doRoutes, {\n\t\t\trootComponent: ShellComponent,\n\t\t\tbasepath: basePath || undefined,\n\t\t});\n\t}, [basePath, headerContent, sidebarHeaderContent]);\n\n\treturn (\n\t\t<AppProviders config={config}>\n\t\t\t<RouterProvider\n\t\t\t\trouter={\n\t\t\t\t\trouter as unknown as Parameters<typeof RouterProvider>[0][\"router\"]\n\t\t\t\t}\n\t\t\t/>\n\t\t</AppProviders>\n\t);\n}\n","/**\n * Route parameter schemas for DO Shell routes\n *\n * These Zod schemas define and validate route parameters.\n */\n\nimport { z } from 'zod'\n\n/**\n * Schema for database route params\n */\nexport const DatabaseRouteParams = z.object({\n ns: z.string().optional(),\n type: z.string().optional(),\n})\n\nexport type DatabaseRouteParamsType = z.infer<typeof DatabaseRouteParams>\n\n/**\n * Schema for things browse route params\n */\nexport const ThingsRouteParams = z.object({\n ns: z.string().optional(),\n type: z.string().optional(),\n})\n\nexport type ThingsRouteParamsType = z.infer<typeof ThingsRouteParams>\n\n/**\n * Schema for document route params\n */\nexport const DocumentRouteParams = z.object({\n ns: z.string(),\n type: z.string(),\n id: z.string(),\n})\n\nexport type DocumentRouteParamsType = z.infer<typeof DocumentRouteParams>\n\n/**\n * Schema for generic type-filtered route params\n */\nexport const TypeFilteredRouteParams = z.object({\n type: z.string().optional(),\n})\n\nexport type TypeFilteredRouteParamsType = z.infer<typeof TypeFilteredRouteParams>\n","/**\n * DO Shell Routes\n *\n * Route definitions and parameter schemas for the DO Admin Dashboard.\n */\n\nexport {\n DatabaseRouteParams,\n ThingsRouteParams,\n DocumentRouteParams,\n TypeFilteredRouteParams,\n type DatabaseRouteParamsType,\n type ThingsRouteParamsType,\n type DocumentRouteParamsType,\n type TypeFilteredRouteParamsType,\n} from './route-params'\n\n/**\n * Route paths for DO Shell navigation\n *\n * These paths are used throughout the shell for navigation links\n * and route matching.\n */\nexport const doRoutePaths = {\n // Main\n overview: '/',\n\n // Development\n agents: '/agents',\n functions: '/functions',\n workflows: '/workflows',\n databases: '/databases',\n databaseTable: '/databases/:ns/:type',\n\n // Data Model\n things: '/things',\n thingsBrowse: '/things/:ns/:type?',\n document: '/things/:ns/:type/:id',\n nouns: '/nouns',\n verbs: '/verbs',\n actions: '/actions',\n relationships: '/relationships',\n events: '/events',\n\n // SaaS\n customers: '/customers',\n subscriptions: '/subscriptions',\n integrations: '/integrations',\n\n // Admin\n orgs: '/orgs',\n roles: '/roles',\n users: '/users',\n apiKeys: '/api-keys',\n settings: '/settings',\n} as const\n\nexport type DORoutePath = typeof doRoutePaths[keyof typeof doRoutePaths]\n"]}
@@ -0,0 +1,95 @@
1
+ import { cn } from './chunk-Y52IEYVM.js';
2
+ import * as React from 'react';
3
+ import { jsx, jsxs } from 'react/jsx-runtime';
4
+
5
+ var DOErrorBoundary = class extends React.Component {
6
+ constructor(props) {
7
+ super(props);
8
+ this.state = { hasError: false, error: null };
9
+ }
10
+ static getDerivedStateFromError(error) {
11
+ return { hasError: true, error };
12
+ }
13
+ componentDidCatch(error, errorInfo) {
14
+ console.error("DOErrorBoundary caught error:", error, errorInfo);
15
+ if (this.props.onError) {
16
+ this.props.onError(error, errorInfo);
17
+ }
18
+ }
19
+ componentDidUpdate(prevProps) {
20
+ if (this.state.hasError && prevProps.resetKey !== this.props.resetKey) {
21
+ this.reset();
22
+ }
23
+ }
24
+ reset = () => {
25
+ this.setState({ hasError: false, error: null });
26
+ };
27
+ render() {
28
+ if (this.state.hasError) {
29
+ const { fallback, className } = this.props;
30
+ const error = this.state.error ?? new Error("Unknown error");
31
+ if (typeof fallback === "function") {
32
+ return fallback(error, this.reset);
33
+ }
34
+ if (fallback) {
35
+ return fallback;
36
+ }
37
+ return /* @__PURE__ */ jsx(
38
+ "div",
39
+ {
40
+ className: cn(
41
+ "p-6 rounded-lg bg-destructive/10 border border-destructive/20",
42
+ className
43
+ ),
44
+ role: "alert",
45
+ children: /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3", children: [
46
+ /* @__PURE__ */ jsx("div", { className: "flex-shrink-0 mt-0.5", children: /* @__PURE__ */ jsx(
47
+ "svg",
48
+ {
49
+ className: "h-5 w-5 text-destructive",
50
+ viewBox: "0 0 20 20",
51
+ fill: "currentColor",
52
+ "aria-hidden": "true",
53
+ children: /* @__PURE__ */ jsx(
54
+ "path",
55
+ {
56
+ fillRule: "evenodd",
57
+ d: "M10 18a8 8 0 100-16 8 8 0 000 16zM8.28 7.22a.75.75 0 00-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 101.06 1.06L10 11.06l1.72 1.72a.75.75 0 101.06-1.06L11.06 10l1.72-1.72a.75.75 0 00-1.06-1.06L10 8.94 8.28 7.22z",
58
+ clipRule: "evenodd"
59
+ }
60
+ )
61
+ }
62
+ ) }),
63
+ /* @__PURE__ */ jsxs("div", { className: "flex-1", children: [
64
+ /* @__PURE__ */ jsx("h2", { className: "text-sm font-semibold text-destructive", children: "Something went wrong" }),
65
+ error.message && /* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-muted-foreground", children: error.message }),
66
+ /* @__PURE__ */ jsx(
67
+ "button",
68
+ {
69
+ type: "button",
70
+ onClick: this.reset,
71
+ className: "mt-4 inline-flex items-center rounded-md bg-destructive px-3 py-2 text-sm font-semibold text-destructive-foreground shadow-sm hover:bg-destructive/90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-destructive",
72
+ children: "Try again"
73
+ }
74
+ )
75
+ ] })
76
+ ] })
77
+ }
78
+ );
79
+ }
80
+ return this.props.children;
81
+ }
82
+ };
83
+ function useErrorBoundary() {
84
+ const [error, setError] = React.useState(null);
85
+ if (error) {
86
+ throw error;
87
+ }
88
+ return {
89
+ showBoundary: setError
90
+ };
91
+ }
92
+
93
+ export { DOErrorBoundary, useErrorBoundary };
94
+ //# sourceMappingURL=chunk-LJIWB7KE.js.map
95
+ //# sourceMappingURL=chunk-LJIWB7KE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/error-boundary.tsx"],"names":[],"mappings":"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","file":"chunk-LJIWB7KE.js","sourcesContent":["'use client'\n\n/**\n * Error Boundary Component for @mdxui/do\n *\n * Catches JavaScript errors anywhere in the child component tree,\n * logs errors, and displays a fallback UI.\n *\n * @example\n * ```tsx\n * <DOErrorBoundary>\n * <ThingsList />\n * </DOErrorBoundary>\n *\n * // With custom fallback\n * <DOErrorBoundary fallback={<CustomErrorUI />}>\n * <Dashboard />\n * </DOErrorBoundary>\n *\n * // With fallback function\n * <DOErrorBoundary\n * fallback={(error, reset) => (\n * <div>\n * <p>Error: {error.message}</p>\n * <button onClick={reset}>Retry</button>\n * </div>\n * )}\n * >\n * <DataView />\n * </DOErrorBoundary>\n * ```\n */\n\nimport * as React from 'react'\nimport { cn } from '../lib/utils'\n\nexport interface DOErrorBoundaryProps {\n /** Child components to render */\n children: React.ReactNode\n /** Custom fallback UI - can be ReactNode or render function */\n fallback?: React.ReactNode | ((error: Error, reset: () => void) => React.ReactNode)\n /** Callback when error is caught */\n onError?: (error: Error, errorInfo: React.ErrorInfo) => void\n /** Key that triggers reset when changed (useful for route changes) */\n resetKey?: string | number\n /** Additional className for the error container */\n className?: string\n}\n\ninterface DOErrorBoundaryState {\n hasError: boolean\n error: Error | null\n}\n\n/**\n * DOErrorBoundary - Catches and handles errors in child components\n *\n * Features:\n * - Catches render errors in child tree\n * - Displays customizable error UI\n * - Provides retry functionality\n * - Supports error callbacks for logging\n * - Resets on resetKey change (e.g., route changes)\n */\nexport class DOErrorBoundary extends React.Component<\n DOErrorBoundaryProps,\n DOErrorBoundaryState\n> {\n constructor(props: DOErrorBoundaryProps) {\n super(props)\n this.state = { hasError: false, error: null }\n }\n\n static getDerivedStateFromError(error: Error): DOErrorBoundaryState {\n return { hasError: true, error }\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void {\n // Log error to console\n console.error('DOErrorBoundary caught error:', error, errorInfo)\n\n // Call optional error callback\n if (this.props.onError) {\n this.props.onError(error, errorInfo)\n }\n }\n\n componentDidUpdate(prevProps: DOErrorBoundaryProps): void {\n // Reset error state when resetKey changes\n if (\n this.state.hasError &&\n prevProps.resetKey !== this.props.resetKey\n ) {\n this.reset()\n }\n }\n\n reset = (): void => {\n this.setState({ hasError: false, error: null })\n }\n\n render(): React.ReactNode {\n if (this.state.hasError) {\n const { fallback, className } = this.props\n const error = this.state.error ?? new Error('Unknown error')\n\n // Render function fallback\n if (typeof fallback === 'function') {\n return fallback(error, this.reset)\n }\n\n // ReactNode fallback\n if (fallback) {\n return fallback\n }\n\n // Default error UI\n return (\n <div\n className={cn(\n 'p-6 rounded-lg bg-destructive/10 border border-destructive/20',\n className\n )}\n role=\"alert\"\n >\n <div className=\"flex items-start gap-3\">\n <div className=\"flex-shrink-0 mt-0.5\">\n <svg\n className=\"h-5 w-5 text-destructive\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.28 7.22a.75.75 0 00-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 101.06 1.06L10 11.06l1.72 1.72a.75.75 0 101.06-1.06L11.06 10l1.72-1.72a.75.75 0 00-1.06-1.06L10 8.94 8.28 7.22z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </div>\n <div className=\"flex-1\">\n <h2 className=\"text-sm font-semibold text-destructive\">\n Something went wrong\n </h2>\n {error.message && (\n <p className=\"mt-1 text-sm text-muted-foreground\">\n {error.message}\n </p>\n )}\n <button\n type=\"button\"\n onClick={this.reset}\n className=\"mt-4 inline-flex items-center rounded-md bg-destructive px-3 py-2 text-sm font-semibold text-destructive-foreground shadow-sm hover:bg-destructive/90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-destructive\"\n >\n Try again\n </button>\n </div>\n </div>\n </div>\n )\n }\n\n return this.props.children\n }\n}\n\n/**\n * Hook to manually trigger error boundary\n * Useful for catching errors in async operations\n */\nexport function useErrorBoundary() {\n const [error, setError] = React.useState<Error | null>(null)\n\n if (error) {\n throw error\n }\n\n return {\n showBoundary: setError,\n }\n}\n\nexport default DOErrorBoundary\n"]}