Files
rocketry/src/App.jsx
2026-03-03 20:30:29 +00:00

134 lines
5.4 KiB
JavaScript

import { Routes, Route, NavLink } from 'react-router-dom'
import Home from './pages/Home.jsx'
import Solver from './pages/Solver.jsx'
import EnginePage from './pages/EnginePage.jsx'
import RocketPage from './pages/RocketPage.jsx'
import KnowledgebaseFuelsPage from './pages/KnowledgebaseFuelsPage.jsx'
import KnowledgebaseEquationsPage from './pages/KnowledgebaseEquationsPage.jsx'
import KnowledgebaseAblativesPage from './pages/KnowledgebaseAblativesPage.jsx'
export default function App() {
return (
<div className="h-screen flex flex-col bg-slate-950 text-slate-100 overflow-hidden">
<header className="flex items-center gap-4 px-5 py-3 border-b border-slate-700 bg-slate-900 shrink-0">
<span className="text-2xl">🚀</span>
<span className="text-lg font-bold text-white">RocketTools</span>
<nav className="flex items-center gap-1 ml-6">
<NavLink
to="/"
end
className={({ isActive }) =>
`px-3 py-1.5 rounded-md text-sm font-medium transition-colors ${
isActive
? 'bg-slate-700 text-white'
: 'text-slate-400 hover:text-white hover:bg-slate-800'
}`
}
>
Home
</NavLink>
<NavLink
to="/solver"
className={({ isActive }) =>
`px-3 py-1.5 rounded-md text-sm font-medium transition-colors ${
isActive
? 'bg-slate-700 text-white'
: 'text-slate-400 hover:text-white hover:bg-slate-800'
}`
}
>
Solver
</NavLink>
{/* Design dropdown — CSS-only hover */}
<div className="relative group">
<button className="px-3 py-1.5 rounded-md text-sm font-medium transition-colors text-slate-400 hover:text-white hover:bg-slate-800 group-hover:text-white group-hover:bg-slate-800">
Design
</button>
<div className="absolute hidden group-hover:block top-full left-0 mt-0.5 bg-slate-800 border border-slate-700 rounded-md shadow-lg z-50 min-w-[120px]">
<NavLink
to="/design/engine"
className={({ isActive }) =>
`block px-4 py-2 text-sm transition-colors ${
isActive
? 'bg-slate-700 text-white'
: 'text-slate-300 hover:bg-slate-700 hover:text-white'
}`
}
>
Engine
</NavLink>
<NavLink
to="/design/rocket"
className={({ isActive }) =>
`block px-4 py-2 text-sm transition-colors ${
isActive
? 'bg-slate-700 text-white'
: 'text-slate-300 hover:bg-slate-700 hover:text-white'
}`
}
>
Rocket
</NavLink>
</div>
</div>
{/* Knowledgebase dropdown — CSS-only hover */}
<div className="relative group">
<button className="px-3 py-1.5 rounded-md text-sm font-medium transition-colors text-slate-400 hover:text-white hover:bg-slate-800 group-hover:text-white group-hover:bg-slate-800">
Knowledgebase
</button>
<div className="absolute hidden group-hover:block top-full left-0 mt-0.5 bg-slate-800 border border-slate-700 rounded-md shadow-lg z-50 min-w-[160px]">
<NavLink
to="/knowledgebase/fuels"
className={({ isActive }) =>
`block px-4 py-2 text-sm transition-colors ${
isActive
? 'bg-slate-700 text-white'
: 'text-slate-300 hover:bg-slate-700 hover:text-white'
}`
}
>
Fuels / Oxidisers
</NavLink>
<NavLink
to="/knowledgebase/ablatives"
className={({ isActive }) =>
`block px-4 py-2 text-sm transition-colors ${
isActive
? 'bg-slate-700 text-white'
: 'text-slate-300 hover:bg-slate-700 hover:text-white'
}`
}
>
Ablative Materials
</NavLink>
<NavLink
to="/knowledgebase/equations"
className={({ isActive }) =>
`block px-4 py-2 text-sm transition-colors ${
isActive
? 'bg-slate-700 text-white'
: 'text-slate-300 hover:bg-slate-700 hover:text-white'
}`
}
>
Equations
</NavLink>
</div>
</div>
</nav>
</header>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/solver" element={<Solver />} />
<Route path="/design/engine" element={<EnginePage />} />
<Route path="/design/rocket" element={<RocketPage />} />
<Route path="/knowledgebase/fuels" element={<KnowledgebaseFuelsPage />} />
<Route path="/knowledgebase/equations" element={<KnowledgebaseEquationsPage />} />
<Route path="/knowledgebase/ablatives" element={<KnowledgebaseAblativesPage />} />
</Routes>
</div>
)
}