2025-08-15 13:15:21 +01:00
|
|
|
import React, { Suspense } from 'react';
|
2025-06-19 22:41:05 +01:00
|
|
|
import { RainbowThemeProvider } from './components/shared/RainbowThemeProvider';
|
2025-07-16 17:53:50 +01:00
|
|
|
import { FileContextProvider } from './contexts/FileContext';
|
2025-08-04 15:01:36 +01:00
|
|
|
import { FilesModalProvider } from './contexts/FilesModalContext';
|
2025-08-19 15:53:48 +01:00
|
|
|
import { FileSelectionProvider } from './contexts/FileSelectionContext';
|
|
|
|
import { ToolWorkflowProvider } from './contexts/ToolWorkflowContext';
|
|
|
|
import { SidebarProvider } from './contexts/SidebarContext';
|
2025-05-28 21:43:02 +01:00
|
|
|
import HomePage from './pages/HomePage';
|
2025-06-06 17:20:06 +01:00
|
|
|
|
|
|
|
// Import global styles
|
|
|
|
import './styles/tailwind.css';
|
|
|
|
import './index.css';
|
|
|
|
|
2025-08-15 13:15:21 +01:00
|
|
|
// Loading component for i18next suspense
|
|
|
|
const LoadingFallback = () => (
|
|
|
|
<div style={{
|
|
|
|
display: 'flex',
|
|
|
|
justifyContent: 'center',
|
|
|
|
alignItems: 'center',
|
|
|
|
height: '100vh',
|
|
|
|
fontSize: '18px',
|
|
|
|
color: '#666'
|
|
|
|
}}>
|
|
|
|
Loading...
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
|
2025-05-28 21:43:02 +01:00
|
|
|
export default function App() {
|
2025-06-06 17:20:06 +01:00
|
|
|
return (
|
2025-08-15 13:15:21 +01:00
|
|
|
<Suspense fallback={<LoadingFallback />}>
|
|
|
|
<RainbowThemeProvider>
|
|
|
|
<FileContextProvider enableUrlSync={true} enablePersistence={true}>
|
|
|
|
<FilesModalProvider>
|
2025-08-19 15:53:48 +01:00
|
|
|
<FileSelectionProvider>
|
|
|
|
<ToolWorkflowProvider>
|
|
|
|
<SidebarProvider>
|
|
|
|
<HomePage />
|
|
|
|
</SidebarProvider>
|
|
|
|
</ToolWorkflowProvider>
|
|
|
|
</FileSelectionProvider>
|
2025-08-15 13:15:21 +01:00
|
|
|
</FilesModalProvider>
|
|
|
|
</FileContextProvider>
|
|
|
|
</RainbowThemeProvider>
|
|
|
|
</Suspense>
|
2025-06-06 17:20:06 +01:00
|
|
|
);
|
2025-05-28 21:43:02 +01:00
|
|
|
}
|