mirror of
https://github.com/Routstr/routstr-core.git
synced 2026-10-05 20:28:23 +00:00
fix icon
This commit is contained in:
+21
-10
@@ -192,48 +192,59 @@ UI_DIST_PATH = Path(__file__).parent.parent.parent / "ui" / "out"
|
|||||||
|
|
||||||
if UI_DIST_PATH.exists() and UI_DIST_PATH.is_dir():
|
if UI_DIST_PATH.exists() and UI_DIST_PATH.is_dir():
|
||||||
logger.info(f"Serving static UI from {UI_DIST_PATH}")
|
logger.info(f"Serving static UI from {UI_DIST_PATH}")
|
||||||
|
|
||||||
app.mount("/_next", StaticFiles(directory=UI_DIST_PATH / "_next", check_dir=True), name="next-static")
|
app.mount("/_next", StaticFiles(directory=UI_DIST_PATH / "_next", check_dir=True), name="next-static")
|
||||||
|
|
||||||
@app.get("/", include_in_schema=False)
|
@app.get("/", include_in_schema=False)
|
||||||
async def serve_root_ui() -> FileResponse:
|
async def serve_root_ui() -> FileResponse:
|
||||||
return FileResponse(UI_DIST_PATH / "index.html")
|
return FileResponse(UI_DIST_PATH / "index.html")
|
||||||
|
|
||||||
@app.get("/dashboard", include_in_schema=False)
|
@app.get("/dashboard", include_in_schema=False)
|
||||||
@app.get("/dashboard/{path:path}", include_in_schema=False)
|
@app.get("/dashboard/{path:path}", include_in_schema=False)
|
||||||
async def serve_dashboard_ui(path: str = "") -> FileResponse:
|
async def serve_dashboard_ui(path: str = "") -> FileResponse:
|
||||||
return FileResponse(UI_DIST_PATH / "index.html")
|
return FileResponse(UI_DIST_PATH / "index.html")
|
||||||
|
|
||||||
@app.get("/login", include_in_schema=False)
|
@app.get("/login", include_in_schema=False)
|
||||||
@app.get("/login/{path:path}", include_in_schema=False)
|
@app.get("/login/{path:path}", include_in_schema=False)
|
||||||
async def serve_login_ui(path: str = "") -> FileResponse:
|
async def serve_login_ui(path: str = "") -> FileResponse:
|
||||||
return FileResponse(UI_DIST_PATH / "login" / "index.html")
|
return FileResponse(UI_DIST_PATH / "login" / "index.html")
|
||||||
|
|
||||||
@app.get("/models", include_in_schema=False)
|
@app.get("/models", include_in_schema=False)
|
||||||
@app.get("/models/{path:path}", include_in_schema=False)
|
@app.get("/models/{path:path}", include_in_schema=False)
|
||||||
async def serve_models_ui(path: str = "") -> FileResponse:
|
async def serve_models_ui(path: str = "") -> FileResponse:
|
||||||
return FileResponse(UI_DIST_PATH / "models" / "index.html")
|
return FileResponse(UI_DIST_PATH / "models" / "index.html")
|
||||||
|
|
||||||
@app.get("/providers", include_in_schema=False)
|
@app.get("/providers", include_in_schema=False)
|
||||||
@app.get("/providers/{path:path}", include_in_schema=False)
|
@app.get("/providers/{path:path}", include_in_schema=False)
|
||||||
async def serve_providers_ui(path: str = "") -> FileResponse:
|
async def serve_providers_ui(path: str = "") -> FileResponse:
|
||||||
return FileResponse(UI_DIST_PATH / "providers" / "index.html")
|
return FileResponse(UI_DIST_PATH / "providers" / "index.html")
|
||||||
|
|
||||||
@app.get("/settings", include_in_schema=False)
|
@app.get("/settings", include_in_schema=False)
|
||||||
@app.get("/settings/{path:path}", include_in_schema=False)
|
@app.get("/settings/{path:path}", include_in_schema=False)
|
||||||
async def serve_settings_ui(path: str = "") -> FileResponse:
|
async def serve_settings_ui(path: str = "") -> FileResponse:
|
||||||
return FileResponse(UI_DIST_PATH / "settings" / "index.html")
|
return FileResponse(UI_DIST_PATH / "settings" / "index.html")
|
||||||
|
|
||||||
@app.get("/transactions", include_in_schema=False)
|
@app.get("/transactions", include_in_schema=False)
|
||||||
@app.get("/transactions/{path:path}", include_in_schema=False)
|
@app.get("/transactions/{path:path}", include_in_schema=False)
|
||||||
async def serve_transactions_ui(path: str = "") -> FileResponse:
|
async def serve_transactions_ui(path: str = "") -> FileResponse:
|
||||||
return FileResponse(UI_DIST_PATH / "transactions" / "index.html")
|
return FileResponse(UI_DIST_PATH / "transactions" / "index.html")
|
||||||
|
|
||||||
@app.get("/unauthorized", include_in_schema=False)
|
@app.get("/unauthorized", include_in_schema=False)
|
||||||
@app.get("/unauthorized/{path:path}", include_in_schema=False)
|
@app.get("/unauthorized/{path:path}", include_in_schema=False)
|
||||||
async def serve_unauthorized_ui(path: str = "") -> FileResponse:
|
async def serve_unauthorized_ui(path: str = "") -> FileResponse:
|
||||||
return FileResponse(UI_DIST_PATH / "unauthorized" / "index.html")
|
return FileResponse(UI_DIST_PATH / "unauthorized" / "index.html")
|
||||||
|
|
||||||
|
@app.get("/favicon.ico", include_in_schema=False)
|
||||||
|
async def serve_favicon() -> FileResponse:
|
||||||
|
icon_path = UI_DIST_PATH / "icon.ico"
|
||||||
|
if icon_path.exists():
|
||||||
|
return FileResponse(icon_path)
|
||||||
|
return FileResponse(UI_DIST_PATH / "favicon.ico")
|
||||||
|
|
||||||
|
@app.get("/icon.ico", include_in_schema=False)
|
||||||
|
async def serve_icon() -> FileResponse:
|
||||||
|
return FileResponse(UI_DIST_PATH / "icon.ico")
|
||||||
|
|
||||||
app.mount("/static", StaticFiles(directory=UI_DIST_PATH, check_dir=True), name="ui-static")
|
app.mount("/static", StaticFiles(directory=UI_DIST_PATH, check_dir=True), name="ui-static")
|
||||||
else:
|
else:
|
||||||
logger.warning(f"UI dist directory not found at {UI_DIST_PATH}, skipping static file serving")
|
logger.warning(f"UI dist directory not found at {UI_DIST_PATH}, skipping static file serving")
|
||||||
|
|||||||
@@ -38,3 +38,6 @@ yarn-error.log*
|
|||||||
# typescript
|
# typescript
|
||||||
*.tsbuildinfo
|
*.tsbuildinfo
|
||||||
next-env.d.ts
|
next-env.d.ts
|
||||||
|
|
||||||
|
# favicon conflicts
|
||||||
|
/app/favicon.ico
|
||||||
|
|||||||
@@ -16,6 +16,9 @@ const geistMono = Geist_Mono({
|
|||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: 'Routstr',
|
title: 'Routstr',
|
||||||
description: 'Routstr model management',
|
description: 'Routstr model management',
|
||||||
|
icons: {
|
||||||
|
icon: '/icon.ico',
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default function RootLayout({
|
export default function RootLayout({
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import {
|
|||||||
ServerIcon,
|
ServerIcon,
|
||||||
SettingsIcon,
|
SettingsIcon,
|
||||||
} from 'lucide-react';
|
} from 'lucide-react';
|
||||||
|
import Image from 'next/image';
|
||||||
|
|
||||||
import { NavSecondary } from '@/components/nav-secondary';
|
import { NavSecondary } from '@/components/nav-secondary';
|
||||||
import {
|
import {
|
||||||
@@ -82,7 +83,16 @@ export function AppSidebar({ ...props }: React.ComponentProps<typeof Sidebar>) {
|
|||||||
asChild
|
asChild
|
||||||
className='data-[slot=sidebar-menu-button]:!p-1.5'
|
className='data-[slot=sidebar-menu-button]:!p-1.5'
|
||||||
>
|
>
|
||||||
<span className='text-base font-semibold'>Routstr</span>
|
<div className='flex items-center gap-2'>
|
||||||
|
<Image
|
||||||
|
src='/icon.ico'
|
||||||
|
alt='Routstr'
|
||||||
|
width={24}
|
||||||
|
height={24}
|
||||||
|
className='rounded'
|
||||||
|
/>
|
||||||
|
<span className='text-base font-semibold'>Routstr</span>
|
||||||
|
</div>
|
||||||
</SidebarMenuButton>
|
</SidebarMenuButton>
|
||||||
</SidebarMenuItem>
|
</SidebarMenuItem>
|
||||||
</SidebarMenu>
|
</SidebarMenu>
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
Reference in New Issue
Block a user