diff --git a/dockerfile b/dockerfile index 9bcce5d8..2ba7276b 100644 --- a/dockerfile +++ b/dockerfile @@ -26,4 +26,6 @@ COPY ./site/dist /site/dist EXPOSE 8080 -CMD ["/server", "serve", "--http=0.0.0.0:8080"] \ No newline at end of file +ENTRYPOINT [ "/server" ] + +CMD ["serve", "--http=0.0.0.0:8080"] \ No newline at end of file diff --git a/site/bun.lockb b/site/bun.lockb index 5fde890f..eb6ce562 100755 Binary files a/site/bun.lockb and b/site/bun.lockb differ diff --git a/site/package.json b/site/package.json index f483f2c1..16b5a3a1 100644 --- a/site/package.json +++ b/site/package.json @@ -1,46 +1,46 @@ { - "name": "site", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite preview" - }, - "dependencies": { - "@nanostores/react": "^0.7.2", - "@nanostores/router": "^0.15.0", - "@radix-ui/react-alert-dialog": "^1.1.1", - "@radix-ui/react-dialog": "^1.1.1", - "@radix-ui/react-dropdown-menu": "^2.1.1", - "@radix-ui/react-label": "^2.1.0", - "@radix-ui/react-slot": "^1.1.0", - "@radix-ui/react-toast": "^1.2.1", - "@radix-ui/react-tooltip": "^1.1.2", - "@tanstack/react-table": "^8.19.2", - "@vitejs/plugin-react": "^4.3.1", - "class-variance-authority": "^0.7.0", - "clsx": "^2.1.1", - "cmdk": "^1.0.0", - "lucide-react": "^0.407.0", - "nanostores": "^0.10.3", - "pocketbase": "^0.21.3", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "recharts": "^2.12.7", - "tailwind-merge": "^2.4.0", - "tailwindcss-animate": "^1.0.7", - "valibot": "^0.36.0" - }, - "devDependencies": { - "@types/bun": "^1.1.6", - "@types/react": "^18.3.3", - "@types/react-dom": "^18.3.0", - "autoprefixer": "^10.4.19", - "postcss": "^8.4.39", - "tailwindcss": "^3.4.4", - "typescript": "^5.5.3", - "vite": "^5.3.3" - } + "name": "site", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "@nanostores/react": "^0.7.2", + "@nanostores/router": "^0.15.0", + "@radix-ui/react-alert-dialog": "^1.1.1", + "@radix-ui/react-dialog": "^1.1.1", + "@radix-ui/react-dropdown-menu": "^2.1.1", + "@radix-ui/react-label": "^2.1.0", + "@radix-ui/react-slot": "^1.1.0", + "@radix-ui/react-toast": "^1.2.1", + "@radix-ui/react-tooltip": "^1.1.2", + "@tanstack/react-table": "^8.19.2", + "@vitejs/plugin-react": "^4.3.1", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.1", + "cmdk": "^1.0.0", + "lucide-react": "^0.407.0", + "nanostores": "^0.10.3", + "pocketbase": "^0.21.3", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "recharts": "^2.13.0-alpha.1", + "tailwind-merge": "^2.4.0", + "tailwindcss-animate": "^1.0.7", + "valibot": "^0.36.0" + }, + "devDependencies": { + "@types/bun": "^1.1.6", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "autoprefixer": "^10.4.19", + "postcss": "^8.4.39", + "tailwindcss": "^3.4.4", + "typescript": "^5.5.3", + "vite": "^5.3.3" + } } diff --git a/site/src/components/add-server.tsx b/site/src/components/add-server.tsx index bfea18e4..6c309937 100644 --- a/site/src/components/add-server.tsx +++ b/site/src/components/add-server.tsx @@ -77,7 +77,7 @@ export function AddServerButton() { diff --git a/site/src/components/login.tsx b/site/src/components/login.tsx index 4aa4b2f5..fe7e84b1 100644 --- a/site/src/components/login.tsx +++ b/site/src/components/login.tsx @@ -29,7 +29,7 @@ export default function () {
) { const val = info.getValue() as number - // let color = 'green' - // if (val > 80) { - // color = 'red' - // } else if (val > 50) { - // color = 'yellow' - // } return (
@@ -181,14 +177,28 @@ export default function () { }) }} > - {status === 'paused' ? 'Resume' : 'Pause'} + {status === 'paused' ? ( + <> + + Resume + + ) : ( + <> + + Pause + + )} copyToClipboard(host)}> + Copy host - Delete server + + + Delete + @@ -236,7 +246,7 @@ export default function () { return ( <>
-
+
{ const target = e.target as HTMLElement if (target.tagName !== 'BUTTON' && !target.hasAttribute('role')) { diff --git a/site/src/components/ui/chart.tsx b/site/src/components/ui/chart.tsx index c216d66d..3be000f8 100644 --- a/site/src/components/ui/chart.tsx +++ b/site/src/components/ui/chart.tsx @@ -124,15 +124,13 @@ const ChartTooltipContent = React.forwardRef< ) => { const { config } = useChart() - payload = React.useMemo(() => { + React.useMemo(() => { if (itemSorter) { - return payload.sort(itemSorter) + // @ts-ignore + payload?.sort(itemSorter) } - return payload }, [itemSorter, payload]) - // console.log('iiiiii', itemSorter) - const tooltipLabel = React.useMemo(() => { if (hideLabel || !payload?.length) { return null diff --git a/site/src/main.tsx b/site/src/main.tsx index 431bfee7..02fc6610 100644 --- a/site/src/main.tsx +++ b/site/src/main.tsx @@ -3,11 +3,11 @@ import React, { Suspense, lazy, useEffect } from 'react' import ReactDOM from 'react-dom/client' import Home from './components/routes/home.tsx' import { ThemeProvider } from './components/theme-provider.tsx' -import { $authenticated, $router, $servers, navigate } from './lib/stores.ts' +import { $authenticated, $router, $servers, navigate, pb } from './lib/stores.ts' import { ModeToggle } from './components/mode-toggle.tsx' import { cn, updateFavicon, updateServerList } from './lib/utils.ts' import { buttonVariants } from './components/ui/button.tsx' -import { Github } from 'lucide-react' +import { DatabaseBackupIcon, Github, LogOutIcon, LogsIcon, UserIcon } from 'lucide-react' import { useStore } from '@nanostores/react' import { Toaster } from './components/ui/toaster.tsx' import { Logo } from './components/logo.tsx' @@ -17,6 +17,13 @@ import { TooltipTrigger, TooltipContent, } from '@/components/ui/tooltip.tsx' +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from './components/ui/dropdown-menu.tsx' const ServerDetail = lazy(() => import('./components/routes/server.tsx')) const CommandPalette = lazy(() => import('./components/command-palette.tsx')) @@ -39,17 +46,20 @@ const App = () => { for (const server of servers) { if (server.status === 'down') { updateFavicon('/favicon-red.svg') - return + break } else if (server.status === 'up') { up = true } } updateFavicon(up ? '/favicon-green.svg' : '/favicon.svg') } + return () => { + updateFavicon('/favicon.svg') + } }, [authenticated, servers]) if (!page) { - return

404

+ return

404

} else if (page.path === '/') { return } else if (page.route === 'server') { @@ -84,7 +94,37 @@ const Layout = () => { -
+
+ + + + + + + + pb.authStore.clear()}> + + Log out + + + + + + Logs + + + + + + Backups + + + + @@ -118,7 +158,9 @@ const Layout = () => { ReactDOM.createRoot(document.getElementById('app')!).render( - + + + )