From 1bb2eadbe89bcff9ddbb4ffa43bb89717196ba7f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 18 Jan 2026 21:58:04 +0000 Subject: [PATCH] Fix: Inline deleted JSON components to resolve build errors Co-authored-by: johndoe6345789 <224850594+johndoe6345789@users.noreply.github.com> --- e2e/debug.spec.ts | 3 +- scripts/analyze-pure-json-candidates.ts | 1 - scripts/refactor-to-dynamic-imports.ts | 3 +- src/components/JSONSchemaPageLoader.tsx | 10 +- src/components/organisms/NavigationMenu.tsx | 36 ++++-- src/components/organisms/PageHeader.tsx | 20 ++-- src/components/organisms/TreeListPanel.tsx | 116 ++++++++++++++++---- src/lib/component-registry.ts | 9 +- src/router/routes.tsx | 22 +++- 9 files changed, 174 insertions(+), 46 deletions(-) diff --git a/e2e/debug.spec.ts b/e2e/debug.spec.ts index cb284d4..daa2d9d 100644 --- a/e2e/debug.spec.ts +++ b/e2e/debug.spec.ts @@ -1,4 +1,4 @@ -import { test, expect } from '@playwright/test' +import { test } from '@playwright/test' test('debug page load', async ({ page }) => { const errors: string[] = [] @@ -20,7 +20,6 @@ test('debug page load', async ({ page }) => { await page.waitForTimeout(2000) // Get page content - const html = await page.content() const rootHTML = await page.locator('#root').innerHTML().catch(() => 'ERROR GETTING ROOT') console.log('=== PAGE ERRORS ===') diff --git a/scripts/analyze-pure-json-candidates.ts b/scripts/analyze-pure-json-candidates.ts index c23431d..b0f91b1 100644 --- a/scripts/analyze-pure-json-candidates.ts +++ b/scripts/analyze-pure-json-candidates.ts @@ -18,7 +18,6 @@ async function analyzeComponent(category: string, component: string): Promise/.test(content) // Extract what it imports const imports = content.match(/import\s+\{[^}]+\}\s+from\s+['"][^'"]+['"]/g) || [] diff --git a/scripts/refactor-to-dynamic-imports.ts b/scripts/refactor-to-dynamic-imports.ts index 4e9679d..87b7367 100644 --- a/scripts/refactor-to-dynamic-imports.ts +++ b/scripts/refactor-to-dynamic-imports.ts @@ -38,12 +38,11 @@ const targetComponents = { atoms: ['Input'] } -async function refactorFile(filePath: string): Promise { +export async function refactorFile(filePath: string): Promise { let content = await fs.readFile(filePath, 'utf-8') let modified = false // Find all imports to replace - const importLines: string[] = [] const componentsToLoad = new Set() for (const [category, components] of Object.entries(targetComponents)) { diff --git a/src/components/JSONSchemaPageLoader.tsx b/src/components/JSONSchemaPageLoader.tsx index 4a202f7..f89a5aa 100644 --- a/src/components/JSONSchemaPageLoader.tsx +++ b/src/components/JSONSchemaPageLoader.tsx @@ -1,5 +1,4 @@ import { PageRenderer } from '@/lib/json-ui/page-renderer' -import { LoadingFallback } from '@/components/molecules' import { useSchemaLoader } from '@/hooks/use-schema-loader' interface JSONSchemaPageLoaderProps { @@ -12,7 +11,14 @@ export function JSONSchemaPageLoader({ schemaPath, data, functions }: JSONSchema const { schema, loading, error } = useSchemaLoader(schemaPath) if (loading) { - return + return ( +
+
+
+

Loading {schemaPath}...

+
+
+ ) } if (error || !schema) { diff --git a/src/components/organisms/NavigationMenu.tsx b/src/components/organisms/NavigationMenu.tsx index 8e98789..c212466 100644 --- a/src/components/organisms/NavigationMenu.tsx +++ b/src/components/organisms/NavigationMenu.tsx @@ -4,7 +4,7 @@ import { Sidebar, SidebarContent, SidebarHeader } from '@/components/ui/sidebar' import { ScrollArea } from '@/components/ui/scroll-area' import { Collapsible, CollapsibleContent } from '@/components/ui/collapsible' import { CaretDoubleDown, CaretDoubleUp } from '@phosphor-icons/react' -import { NavigationItem, NavigationGroupHeader } from '@/components/molecules' +import { NavigationGroupHeader, Badge, Flex, Text, IconWrapper } from '@/components/atoms' import { navigationGroups, NavigationItemData } from '@/lib/navigation-config' import { FeatureToggles } from '@/types/project' import { useRoutePreload } from '@/hooks/use-route-preload' @@ -126,19 +126,41 @@ function NavigationMenuGroupList({ {group.items.map((item) => { if (!isItemVisible(item)) return null + const isActive = activeTab === item.value + const badge = getItemBadge(item) + return (
onItemHover(item.value)} onMouseLeave={() => onItemLeave(item.value)} > - onItemClick(item.value)} - /> + className={`w-full flex items-center gap-3 px-3 py-2 rounded-lg transition-colors ${ + isActive + ? 'bg-primary text-primary-foreground' + : 'hover:bg-muted text-foreground' + }`} + > + + + {item.label} + + {badge !== undefined && badge > 0 && ( + + {badge} + + )} +
) })} diff --git a/src/components/organisms/PageHeader.tsx b/src/components/organisms/PageHeader.tsx index c927738..9048821 100644 --- a/src/components/organisms/PageHeader.tsx +++ b/src/components/organisms/PageHeader.tsx @@ -1,5 +1,4 @@ -import { PageHeaderContent } from '@/components/molecules' -import { Stack, Container } from '@/components/atoms' +import { Stack, Container, TabIcon } from '@/components/atoms' import { tabInfo } from '@/lib/navigation-config' interface PageHeaderProps { @@ -17,11 +16,18 @@ export function PageHeader({ activeTab }: PageHeaderProps) { spacing="none" className="border-b border-border bg-card px-4 sm:px-6 py-3 sm:py-4" > - + {/* PageHeaderContent - inlined */} +
+ +
+

{info.title}

+ {info.description && ( +

+ {info.description} +

+ )} +
+
) } diff --git a/src/components/organisms/TreeListPanel.tsx b/src/components/organisms/TreeListPanel.tsx index 487cba0..f5ca05d 100644 --- a/src/components/organisms/TreeListPanel.tsx +++ b/src/components/organisms/TreeListPanel.tsx @@ -1,6 +1,5 @@ import { ScrollArea } from '@/components/ui/scroll-area' -import { TreeCard, TreeListHeader } from '@/components/molecules' -import { EmptyState, Stack, Container } from '@/components/atoms' +import { EmptyState, Stack, Container, Card, Badge, ActionIcon, IconButton, Flex, Text, Heading, Button, TreeIcon } from '@/components/atoms' import { ComponentTree } from '@/types/project' import { FolderOpen } from '@phosphor-icons/react' @@ -29,12 +28,42 @@ export function TreeListPanel({ }: TreeListPanelProps) { return (
- + {/* TreeListHeader - inlined */} + + + + + Component Trees + + } + size="sm" + onClick={onCreateNew} + /> + + + + + + + {trees.length === 0 ? ( - {trees.map((tree) => ( - onTreeSelect(tree.id)} - onEdit={() => onTreeEdit(tree)} - onDuplicate={() => onTreeDuplicate(tree)} - onDelete={() => onTreeDelete(tree.id)} - disableDelete={trees.length === 1} - /> - ))} + {trees.map((tree) => { + const isSelected = selectedTreeId === tree.id + const disableDelete = trees.length === 1 + + return ( + // TreeCard - inlined + onTreeSelect(tree.id)} + > + + + + {tree.name} + {tree.description && ( + + {tree.description} + + )} +
+ + {tree.rootNodes.length} components + +
+
+
+
e.stopPropagation()}> + + } + variant="ghost" + size="sm" + onClick={() => onTreeEdit(tree)} + title="Edit tree" + /> + } + variant="ghost" + size="sm" + onClick={() => onTreeDuplicate(tree)} + title="Duplicate tree" + /> + } + variant="ghost" + size="sm" + onClick={() => onTreeDelete(tree.id)} + disabled={disableDelete} + title={disableDelete ? "Can't delete last tree" : "Delete tree"} + /> + +
+
+
+ ) + })}
)} diff --git a/src/lib/component-registry.ts b/src/lib/component-registry.ts index c32c6b5..18917f4 100644 --- a/src/lib/component-registry.ts +++ b/src/lib/component-registry.ts @@ -1,6 +1,5 @@ import { lazy } from 'react' import { lazyWithRetry, lazyWithPreload } from '@/lib/lazy-loader' -import { preloadMonacoEditor } from '@/components/molecules' import componentRegistryConfig from '../../component-registry.json' type ComponentConfig = { @@ -31,6 +30,14 @@ type RegistryConfig = { const config = componentRegistryConfig as RegistryConfig +// Monaco editor preloader - inlined +const preloadMonacoEditor = () => { + console.log('[MONACO] 🎯 Preloading Monaco Editor') + import('@monaco-editor/react') + .then(() => console.log('[MONACO] ✅ Monaco Editor preloaded')) + .catch(err => console.warn('[MONACO] ⚠️ Monaco Editor preload failed:', err)) +} + const dependencyPreloaders: Record void> = { preloadMonacoEditor } diff --git a/src/router/routes.tsx b/src/router/routes.tsx index fd46ee4..48813ba 100644 --- a/src/router/routes.tsx +++ b/src/router/routes.tsx @@ -1,6 +1,5 @@ import { lazy, Suspense } from 'react' import { RouteObject, Navigate } from 'react-router-dom' -import { LoadingFallback } from '@/components/molecules' import { JSONSchemaPageLoader } from '@/components/JSONSchemaPageLoader' import { NotFoundPage } from '@/components/NotFoundPage' import { getEnabledPages, resolveProps } from '@/config/page-loader' @@ -23,11 +22,22 @@ const LazyComponent = ({ if (!Component) { console.error('[ROUTES] ❌ Component not found:', componentName) - return + return ( +
+

Component {componentName} not found

+
+ ) } return ( - }> + +
+
+

Loading {componentName.toLowerCase()}...

+
+
+ }>
) @@ -46,7 +56,11 @@ const ResizableLayout = ({ if (!LeftComponent || !RightComponent) { console.error('[ROUTES] ❌ Resizable components not found:', { leftComponent, rightComponent }) - return + return ( +
+

Layout components not found

+
+ ) } return (