diff --git a/docusaurus.config.js b/docusaurus.config.js index 3c5a39bd7..fb0463544 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -92,6 +92,7 @@ const config = { label: "Documentation", }, { to: "/blog", label: "Blog", position: "left" }, + { to: "/dashboard", label: "Dashboard", position: "left" }, { href: "https://github.com/kmesh-net/kmesh/releases", label: "Downloads", @@ -152,11 +153,11 @@ const config = { [ "docusaurus-lunr-search", { - languages: ["en",'zh'], + languages: ["en", "zh"], indexDocs: true, indexBlog: true, indexPages: false, - } + }, ], ], }; diff --git a/src/components/DashboardLayout.js b/src/components/DashboardLayout.js new file mode 100644 index 000000000..bc4887b3d --- /dev/null +++ b/src/components/DashboardLayout.js @@ -0,0 +1,41 @@ +import React from "react"; +import Layout from "@theme/Layout"; +import Link from "@docusaurus/Link"; +import { useLocation } from "@docusaurus/router"; +import "../css/dashboard.css"; + +const SIDEBAR_ITEMS = [ + { label: "Overview", path: "/dashboard" }, + { label: "Topology", path: "/dashboard/topology" }, + { label: "Waypoints", path: "/dashboard/waypoints" }, + { label: "Policies", path: "/dashboard/policies" }, + { label: "Metrics", path: "/dashboard/metrics" }, +]; + +export default function DashboardLayout({ children, title }) { + const location = useLocation(); + + return ( + +
+ +
{children}
+
+
+ ); +} diff --git a/src/css/dashboard.css b/src/css/dashboard.css new file mode 100644 index 000000000..d60985901 --- /dev/null +++ b/src/css/dashboard.css @@ -0,0 +1,52 @@ +.dashboard-container { + display: flex; + min-height: calc(100vh - 60px); +} + +.dashboard-sidebar { + width: 250px; + flex-shrink: 0; + border-right: 1px solid var(--ifm-toc-border-color); + background-color: var(--ifm-background-surface-color); + padding: 1rem 0; + display: flex; + flex-direction: column; +} + +.dashboard-sidebar-link { + padding: 0.75rem 1.5rem; + color: var(--ifm-font-color-base); + text-decoration: none; + font-weight: 500; + transition: + background-color 0.2s, + color 0.2s; +} + +.dashboard-sidebar-link:hover { + background-color: var(--ifm-color-primary-lightest); + color: var(--ifm-color-primary-dark); + text-decoration: none; +} + +[data-theme="dark"] .dashboard-sidebar-link:hover { + background-color: var(--ifm-color-primary-darkest); + color: var(--ifm-color-primary-light); +} + +.dashboard-sidebar-link.active { + background-color: var(--ifm-color-primary-lightest); + color: var(--ifm-color-primary-dark); + border-right: 3px solid var(--ifm-color-primary); +} + +[data-theme="dark"] .dashboard-sidebar-link.active { + background-color: var(--ifm-color-primary-darkest); + color: var(--ifm-color-primary-light); +} + +.dashboard-content { + flex-grow: 1; + padding: 2rem; + background-color: var(--ifm-background-color); +} diff --git a/src/pages/dashboard/index.js b/src/pages/dashboard/index.js new file mode 100644 index 000000000..e0ba7ab2c --- /dev/null +++ b/src/pages/dashboard/index.js @@ -0,0 +1,11 @@ +import React from "react"; +import DashboardLayout from "../../components/DashboardLayout"; + +export default function DashboardOverview() { + return ( + +

Overview

+

Welcome to the Kmesh Dashboard. This is the overview page.

+
+ ); +} diff --git a/src/pages/dashboard/metrics.js b/src/pages/dashboard/metrics.js new file mode 100644 index 000000000..eecc4f165 --- /dev/null +++ b/src/pages/dashboard/metrics.js @@ -0,0 +1,11 @@ +import React from "react"; +import DashboardLayout from "../../components/DashboardLayout"; + +export default function DashboardMetrics() { + return ( + +

Metrics

+

Performance and observability metrics will be displayed here.

+
+ ); +} diff --git a/src/pages/dashboard/policies.js b/src/pages/dashboard/policies.js new file mode 100644 index 000000000..ec4a2c587 --- /dev/null +++ b/src/pages/dashboard/policies.js @@ -0,0 +1,11 @@ +import React from "react"; +import DashboardLayout from "../../components/DashboardLayout"; + +export default function DashboardPolicies() { + return ( + +

Policies

+

Configure routing and security policies here.

+
+ ); +} diff --git a/src/pages/dashboard/topology.js b/src/pages/dashboard/topology.js new file mode 100644 index 000000000..bff55b21e --- /dev/null +++ b/src/pages/dashboard/topology.js @@ -0,0 +1,11 @@ +import React from "react"; +import DashboardLayout from "../../components/DashboardLayout"; + +export default function DashboardTopology() { + return ( + +

Topology

+

Service mesh topology will be visualized here.

+
+ ); +} diff --git a/src/pages/dashboard/waypoints.js b/src/pages/dashboard/waypoints.js new file mode 100644 index 000000000..95b0ecb73 --- /dev/null +++ b/src/pages/dashboard/waypoints.js @@ -0,0 +1,11 @@ +import React from "react"; +import DashboardLayout from "../../components/DashboardLayout"; + +export default function DashboardWaypoints() { + return ( + +

Waypoints

+

Manage and monitor waypoint proxies here.

+
+ ); +}