diff --git a/src/App.tsx b/src/App.tsx index 0ccf5bc..555c5ea 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,26 +1,29 @@ -import React, { useState } from 'react'; +import React, { useState, lazy, Suspense } from 'react'; import { Toaster } from './components/ui/sonner'; import { CodeEditor } from './components/CodeEditor'; import { AIChat } from './components/AIChat'; import { Toolbar } from './components/Toolbar'; -import { TemplatesDrawer } from './components/TemplatesDrawer'; -import { WelcomeDialog } from './components/WelcomeDialog'; import { FileTree, FileNode } from './components/FileTree'; import { FileTabs } from './components/FileTabs'; -import { PreviewModal } from './components/PreviewModal'; -import { NewProjectModal, ProjectConfig } from './components/NewProjectModal'; import { ConsolePanel } from './components/ConsolePanel'; import { ResizablePanelGroup, ResizablePanel, ResizableHandle } from './components/ui/resizable'; import { useIsMobile } from './hooks/use-mobile'; import { useKeyboardShortcuts } from './hooks/use-keyboard-shortcuts'; import { Tabs, TabsContent, TabsList, TabsTrigger } from './components/ui/tabs'; import { toast } from 'sonner'; -import { EducationPanel } from './components/EducationPanel'; import { ExtraTabs } from './components/ui/tabs-extra'; -import { PassportLogin } from './components/PassportLogin'; import { Button } from './components/ui/button'; import { initPostHog, captureEvent } from './lib/posthog'; import { initSentry, captureError } from './lib/sentry'; +import { LoadingSpinner } from './components/ui/loading-spinner'; + +// Lazy load heavy/modal components for code splitting and better initial load +const TemplatesDrawer = lazy(() => import('./components/TemplatesDrawer').then(m => ({ default: m.TemplatesDrawer }))); +const WelcomeDialog = lazy(() => import('./components/WelcomeDialog').then(m => ({ default: m.WelcomeDialog }))); +const PreviewModal = lazy(() => import('./components/PreviewModal').then(m => ({ default: m.PreviewModal }))); +const NewProjectModal = lazy(() => import('./components/NewProjectModal').then(m => ({ default: m.NewProjectModal }))); +const EducationPanel = lazy(() => import('./components/EducationPanel').then(m => ({ default: m.EducationPanel }))); +const PassportLogin = lazy(() => import('./components/PassportLogin').then(m => ({ default: m.PassportLogin }))); function App() { const [currentCode, setCurrentCode] = useState(''); @@ -348,7 +351,9 @@ end)`, - + }> + + ) : ( @@ -402,26 +407,34 @@ end)`, - {showTemplates && ( - setShowTemplates(false)} + + {showTemplates && ( + setShowTemplates(false)} + /> + )} + + + + setShowPreview(false)} + code={currentCode} /> - )} + - setShowPreview(false)} - code={currentCode} - /> + + setShowNewProject(false)} + onCreateProject={handleCreateProject} + /> + - setShowNewProject(false)} - onCreateProject={handleCreateProject} - /> - - + + + {!user && (