diff --git a/README.md b/README.md index 8c60f89..dce5c18 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,12 @@ Follow the steps below to build and view the site locally. ## Building +* Clone any submodules: + + ```shell + git submodule update --init --recursive + ``` + * Build the site incrementally: ```shell diff --git a/docs/_static/clp-versions.json b/docs/dev-docs/_static/clp-versions.json similarity index 100% rename from docs/_static/clp-versions.json rename to docs/dev-docs/_static/clp-versions.json diff --git a/docs/_static/custom.css b/docs/dev-docs/_static/custom.css similarity index 100% rename from docs/_static/custom.css rename to docs/dev-docs/_static/custom.css diff --git a/docs/_static/favicon.ico b/docs/dev-docs/_static/favicon.ico similarity index 100% rename from docs/_static/favicon.ico rename to docs/dev-docs/_static/favicon.ico diff --git a/docs/conf.py b/docs/dev-docs/conf.py similarity index 92% rename from docs/conf.py rename to docs/dev-docs/conf.py index 1b79ea0..05e61fa 100644 --- a/docs/conf.py +++ b/docs/dev-docs/conf.py @@ -8,7 +8,7 @@ project = "YScope" # NOTE: We don't include a period after "Inc" since the theme adds one already. -project_copyright = "2023-2024 YScope Inc" +project_copyright = "2023-2026 YScope Inc" # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration @@ -18,6 +18,16 @@ "sphinx_design" ] +exclude_patterns = [ + "node_modules", + "app", + "components", + "lib", + "public", + ".next", + "out", +] + # -- MyST extensions ----------------------------------------------------------- # https://myst-parser.readthedocs.io/en/stable/syntax/optional.html myst_enable_extensions = [ diff --git a/docs/dev-guide/contrib-guides-cpp.md b/docs/dev-docs/dev-guide/contrib-guides-cpp.md similarity index 100% rename from docs/dev-guide/contrib-guides-cpp.md rename to docs/dev-docs/dev-guide/contrib-guides-cpp.md diff --git a/docs/dev-guide/contrib-guides-general.md b/docs/dev-docs/dev-guide/contrib-guides-general.md similarity index 100% rename from docs/dev-guide/contrib-guides-general.md rename to docs/dev-docs/dev-guide/contrib-guides-general.md diff --git a/docs/dev-guide/contrib-guides-overview.md b/docs/dev-docs/dev-guide/contrib-guides-overview.md similarity index 100% rename from docs/dev-guide/contrib-guides-overview.md rename to docs/dev-docs/dev-guide/contrib-guides-overview.md diff --git a/docs/dev-guide/contrib-guides-taskfiles.md b/docs/dev-docs/dev-guide/contrib-guides-taskfiles.md similarity index 100% rename from docs/dev-guide/contrib-guides-taskfiles.md rename to docs/dev-docs/dev-guide/contrib-guides-taskfiles.md diff --git a/docs/dev-guide/index.md b/docs/dev-docs/dev-guide/index.md similarity index 100% rename from docs/dev-guide/index.md rename to docs/dev-docs/dev-guide/index.md diff --git a/docs/dev-guide/misc-deploying.md b/docs/dev-docs/dev-guide/misc-deploying.md similarity index 100% rename from docs/dev-guide/misc-deploying.md rename to docs/dev-docs/dev-guide/misc-deploying.md diff --git a/docs/index.md b/docs/dev-docs/index.md similarity index 100% rename from docs/index.md rename to docs/dev-docs/index.md diff --git a/docs/dev-docs/index.rst b/docs/dev-docs/index.rst new file mode 100644 index 0000000..f24675d --- /dev/null +++ b/docs/dev-docs/index.rst @@ -0,0 +1,4 @@ +.. toctree:: + :hidden: + + dev-guide/index diff --git a/docs/homepage/.gitignore b/docs/homepage/.gitignore new file mode 100644 index 0000000..f7a10ea --- /dev/null +++ b/docs/homepage/.gitignore @@ -0,0 +1,45 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/versions + +# testing +/coverage + +# next.js +/.next/ +/out/ +/public/robots.txt +/public/sitemap.xml +/public/sitemap-*.xml + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# env files (can opt-in for committing if needed) +.env* +!.env.example + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/docs/homepage/.prettierrc.yaml b/docs/homepage/.prettierrc.yaml new file mode 100644 index 0000000..26e37f0 --- /dev/null +++ b/docs/homepage/.prettierrc.yaml @@ -0,0 +1,6 @@ +tabWidth: 4 +useTabs: false +singleQuote: false +quoteProps: consistent +printWidth: 100 +endOfLine: lf diff --git a/docs/homepage/.stylelintrc.json b/docs/homepage/.stylelintrc.json new file mode 100644 index 0000000..243ec69 --- /dev/null +++ b/docs/homepage/.stylelintrc.json @@ -0,0 +1,7 @@ +{ + "extends": [ + "stylelint-config-standard", + "stylelint-config-clean-order/error", + "stylelint-prettier/recommended" + ] +} diff --git a/docs/homepage/app/assets/css/colors.css b/docs/homepage/app/assets/css/colors.css new file mode 100644 index 0000000..a42bd99 --- /dev/null +++ b/docs/homepage/app/assets/css/colors.css @@ -0,0 +1,85 @@ +/* CSS variables exported from Tailwind color config */ +:root { + --white: #ffffff; + --black: #000000; + + --light-bg: #ffffff; + --dark-bg: #16181b; + + --light-bg-alt: #efefef; + --dark-bg-alt: #111315; + + /* Brilliant Azure */ + --brilliant-azure: #1888FA; + --brilliant-azure-50: #e6f2fe; + --brilliant-azure-100: #cde5fe; + --brilliant-azure-150: #b5d9fd; + --brilliant-azure-200: #9bccfd; + --brilliant-azure-300: #69b2fc; + --brilliant-azure-400: #3799fb; + --brilliant-azure-500: #057ffa; + --brilliant-azure-550: #0573e1; + --brilliant-azure-600: #0466c8; + --brilliant-azure-700: #034c96; + --brilliant-azure-800: #023364; + --brilliant-azure-850: #02264B; + --brilliant-azure-900: #011932; + --brilliant-azure-950: #011223; + + /* Turquoise */ + --turquoise: #62D6BF; + --turquoise-50: #ebfaf7; + --turquoise-100: #d6f5ef; + --turquoise-200: #aeeade; + --turquoise-300: #85e0ce; + --turquoise-400: #5dd5bd; + --turquoise-500: #34cbad; + --turquoise-600: #2aa28a; + --turquoise-700: #18786f; + --turquoise-800: #094f4d; + --turquoise-850: #043C3B; + --turquoise-900: #002928; + --turquoise-950: #001e1d; + + /* Space Indigo */ + --space-indigo: #201E50; + --space-indigo-50: #ededf8; + --space-indigo-100: #dbdaf1; + --space-indigo-200: #b7b5e3; + --space-indigo-300: #9290d5; + --space-indigo-400: #6e6bc7; + --space-indigo-500: #4a46b9; + --space-indigo-600: #3b3894; + --space-indigo-700: #2c2a6f; + --space-indigo-800: #1e1c4a; + --space-indigo-900: #0f0e25; + --space-indigo-950: #0a0a1a; + + /* Dark Spruce */ + --dark-spruce: #2C5530; + --dark-spruce-50: #eef6ef; + --dark-spruce-100: #ddeedf; + --dark-spruce-200: #bcdcbf; + --dark-spruce-300: #9acb9f; + --dark-spruce-400: #78ba7f; + --dark-spruce-500: #57a85f; + --dark-spruce-600: #45874c; + --dark-spruce-700: #346539; + --dark-spruce-800: #234326; + --dark-spruce-900: #112213; + --dark-spruce-950: #0c180d; + + /* Tuscan Sun */ + --tuscan-sun: #F7C548; + --tuscan-sun-50: #fef7e7; + --tuscan-sun-100: #fdf0ce; + --tuscan-sun-200: #fbe09d; + --tuscan-sun-300: #f9d16c; + --tuscan-sun-400: #f7c23b; + --tuscan-sun-500: #f5b20a; + --tuscan-sun-600: #c48f08; + --tuscan-sun-700: #936b06; + --tuscan-sun-800: #624704; + --tuscan-sun-900: #312402; + --tuscan-sun-950: #221901; +} diff --git a/docs/homepage/app/assets/scss/styles.scss b/docs/homepage/app/assets/scss/styles.scss new file mode 100644 index 0000000..e4d8e51 --- /dev/null +++ b/docs/homepage/app/assets/scss/styles.scss @@ -0,0 +1,506 @@ +@import "tailwindcss"; +@import "../css/colors.css"; +@import url("tw-animate-css"); + +@import "bootstrap/scss/functions"; +@import "bootstrap/scss/variables"; +@import "bootstrap/scss/variables-dark"; +@import "bootstrap/scss/maps"; +@import "bootstrap/scss/mixins"; +@import "bootstrap/scss/utilities"; + +// Layout & components +@import "bootstrap/scss/root"; +@import "bootstrap/scss/reboot"; +@import "bootstrap/scss/type"; +@import "bootstrap/scss/containers"; +@import "bootstrap/scss/grid"; + +@import "bootstrap/scss/utilities/api"; + +/* Prevent horizontal scrolling from accidental overflow and ensure padding + does not increase element width unexpectedly. */ +*, *::before, *::after { + box-sizing: border-box; +} + +/* Fade utility (used by modals, etc.) */ +.fade { + transition: opacity .15s linear; + opacity: 0; +} + +.fade.show { + opacity: 1; +} + +/* Collapse / Accordion basics: hide when not shown, simple height transition + for the JS-driven `.collapsing` state. */ +.collapse:not(.show) { + display: none; +} + +.collapse.show { + display: block; +} + +.collapsing { + height: 0; + overflow: hidden; + transition: height .35s ease; +} + +/* Navbar collapse uses the same show/hide behavior */ +.navbar-collapse.collapse:not(.show) { + display: none; +} + +.navbar-collapse.collapse.show { + display: block; +} + +/* Provide a small transition for accordion content where helpful */ +.accordion-collapse { + transition: height .35s ease; +} + + +// Themed GitHub button styles +.btn-github { + background: var(--white); + border: 1px solid #cccccc; + box-shadow: 0 2px 12px 0 rgba(0, 123, 255, 0.22); + border-radius: 8px; + color: #212529; + display: inline-flex; + align-items: center; + font-weight: 500; + gap: 0.35em; + padding: 0.18em 0.5em 0.18em 0.45em; + text-decoration: none; + transition: background 0.2s, color 0.2s, border 0.2s, box-shadow 0.2s; +} + +[data-bs-theme="dark"] .btn-github { + background: #212529; + color: var(--white); + border: 1px solid #444; +} + +[data-bs-theme="dark"] .btn-github svg { + color: var(--white); +} + +[data-bs-theme="light"] .btn-github svg { + color: #212529; +} + +:root { + --bs-body-bg: var(--white); + --bs-body-bg-rgb: 255, 255, 255; +} + +[data-bs-theme="dark"] { + --bs-body-bg: var(--dark-bg); //#212529; #0b0f13; #0E0D0E; + --bs-body-bg-rgb: 22, 24, 27; +} + +$yscope-colors: ( + "yscope-primary": #1888fa, + "yscope-secondary": #F7C548, +); +$theme-colors: map-merge($theme-colors, $yscope-colors); + +$yscope-colors-text: ( + "yscope-primary": #1888fa, + "yscope-secondary": black, +); +$yscope-colors-bg-subtle: ( + "yscope-primary": #1888fa, + "yscope-secondary": black, +); +$yscope-colors-border-subtle: ( + "yscope-primary": #1888fa, + "yscope-secondary": black, +); + +html { + font-family: var(--font-geist-sans), system-ui, -apple-system, "Segoe UI", sans-serif; + font-size: 18px; +} + +footer { + padding: 2rem 0; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: var(--font-geist-sans), system-ui, -apple-system, "Segoe UI", sans-serif; +} + +.main-chart { + text-align: center; + padding: 0px 20px; +} + +.section { + padding: 30px 0; + + h1 { + font-size: 1.6rem; + } + + h2 { + font-size: 1.5rem; + } + + .subtitle { + font-size: 1rem; + font-style: italic; + } +} + + +@media (min-width: 576px) { + .section { + h1 { + font-size: 2rem; + } + + .subtitle { + font-size: 1.3rem; + } + } +} + + +.theme-switcher-icon::before { + /* removed bootstrap-icons dependency; theme switcher uses JS-rendered SVG icons now */ + display: none; +} + +.btn-yscope-secondary { + border: solid 1px #cccccc; + border-radius: 8px; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out; +} + +[data-bs-theme="light"] .btn-yscope-secondary { + color: #3f3f3f; + border: solid 1px #cccccc; +} + +[data-bs-theme="dark"] .btn-yscope-secondary { + color: #c2c2c2; + border: solid 1px #444; +} + +.btn-yscope-secondary:hover { + color: var(--black); + background-color: var(--tuscan-sun); +} + +[data-bs-theme="light"] { + footer { + border-top: #f2f2f2 solid 2px; + } + + .theme-switcher-icon::before { + content: "\f497"; + } +} + +[data-bs-theme="dark"] { + footer { + border-top: #212529 solid 2px; + } + + .btn-yscope-secondary { + --bs-btn-color: var(--white); + } + + .theme-switcher-icon::before { + content: "\f5a2"; + } +} + +.logo { + color: var(--brilliant-azure); + font-family: 'Abeezee', abeezee, sans-serif; + font-weight: 700; + font-size: 2.2rem; +} + +.logo-color { + color: var(--brilliant-azure); +} + +.checkmark-list { + list-style: none; + padding: 0; + margin: 0; + + li { + position: relative; + padding-left: 1.8rem; + padding-bottom: 5px; + padding-top: 5px; + } + + li::before { + /* replaced icon font glyph with a unicode checkmark to avoid bootstrap-icons dependency */ + content: "\2713"; + color: var(--brilliant-azure); + position: absolute; + left: 0; + top: 0.15rem; + font-weight: 600; + font-size: 1rem; + } + + font-size: 1.1rem; +} + +.policy-list { + list-style: none; + padding: 0; + margin: 0; + + a { + color: inherit; + text-decoration: none; + } +} + +.main-section h2 { + font-weight: bold; +} + +.accordion-button { + font-weight: 600; +} + +/* Theme-aware styles for the nav bar border */ +.nav-border { + border-bottom: #f2f2f2 solid 2px; +} + +[data-bs-theme="light"] .nav-border { + border-bottom: #f2f2f2 solid 2px; +} + + +[data-bs-theme="dark"] .nav-border { + border-bottom: #212529 solid 2px; +} + +/* Theme-aware styles for the navlink button variant */ +.nav-link-btn { + transition: color 0.15s ease-in-out; +} + +[data-bs-theme="light"] .nav-link-btn { + color: #717171; +} + +[data-bs-theme="dark"] .nav-link-btn { + color: #a2a4a5; +} + +.nav-link-btn:hover { + color: var(--brilliant-azure); +} + +.nav-link-btn-alt { + transition: color 0.15s ease-in-out; +} + +[data-bs-theme="light"] .nav-link-btn-alt { + color: var(--brilliant-azure-400); +} + +[data-bs-theme="dark"] .nav-link-btn-alt { + color: var(--brilliant-azure-600); +} + +.footer .nav-link-btn:hover, +.footer .nav-link-btn-alt:hover { + color: var(--tuscan-sun); +} + + +/* Theme-aware styles for the theme toggle button variant */ +.theme-toggle-btn { + border: solid 1px #cccccc; + border-radius: 8px; + color: #a2a4a5; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out; +} + +[data-bs-theme="light"] .theme-toggle-btn { + color: #717171; + border: solid 1px #cccccc; +} + +[data-bs-theme="light"] .theme-toggle-btn:hover { + color: var(--white); + background-color: var(--space-indigo); +} + +[data-bs-theme="dark"] .theme-toggle-btn { + color: #a2a4a5; + background-color: #212529; + border: solid 1px #444; +} + +[data-bs-theme="dark"] .theme-toggle-btn:hover { + color: var(--black); + background-color: var(--tuscan-sun); +} + +.dev-docs-btn { + background-color: var(--brilliant-azure-550) !important; + border-radius: 8px; + color: var(--white); + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out; +} + +.dev-docs-btn:hover { + background-color: var(--brilliant-azure-700) !important; +} + +.mobile-menu-btn { + border-radius: 8px; +} + +/* Theme-aware styles for the mobile menu sheet */ +.mobile-menu-sheet { + background-color: var(--white); + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out; +} + +[data-bs-theme="light"] .mobile-menu-sheet { + background-color: var(--white); +} + +[data-bs-theme="dark"] .mobile-menu-sheet { + background-color: #1A1D20; +} + +/* Map legacy `.container` class to Tailwind's container utility so existing markup keeps working */ +.container { + @apply container mx-auto; + +/* Override Bootstrap container gutter so Tailwind padding wins on large screens */ + padding-left: 2.5rem; + padding-right: 2.5rem; +} + +.container-fluid { + width: 100%; + @apply px-4; +} + +@media (min-width: 1140px) { + .container { + padding-left: 5rem; + padding-right: 5rem; + } +} + +@media (min-width: 1420px) { + .container { + padding-left: 10rem; + padding-right: 10rem; + } +} + +.newsletter-card { + background-color: var(--light-bg-alt); + border: 1px solid #cccccc; + border-radius: 8px; + padding: 20px; + text-align: center; +} + +[data-bs-theme="dark"] .newsletter-card { + background-color: var(--dark-bg-alt); + border: 1px solid #444; +} + +.newsletter-card .text-input { + background-color: var(--white); + border: 1px solid #ccc; + border-radius: 4px; + padding: 10px; + width: 200px; +} + +[data-bs-theme="dark"] .newsletter-card .text-input { + background-color: var(--dark-bg); + border: 1px solid #444; + color: var(--white); +} + +.homepage_icons_category { + display: flex; + flex-flow: row wrap; + row-gap: 0.5rem; + justify-content: space-between; +} + +.homepage_icon { + width: 36px; + height: 36px; +} + +.homepage_icon_box { + width: 56px; + height: 56px; + border-radius: 0.5rem; + display: flex; + align-items: center; + justify-content: center; +} + +.homepage_icon_row { + width: 245px; +} + +[data-bs-theme="light"] .homepage_icon_box { + background-color: #f8f8f8; + border: 1px solid #e8e8e8; +} + +[data-bs-theme="dark"] .homepage_icon_box { + background-color: #555e6930; + border: 1px solid #555e69; +} + +/* Stack welcome + buttons for screens < 1100px */ +@media (max-width: 1100px) { + .homepage-hero-row { + flex-direction: column; + align-items: center; + } + + .homepage-hero-row > .col { + width: 100%; + max-width: 100%; + } + + .homepage-hero-row > .col.my-4 { + margin-top: 1rem; + } +} + +/* Stack welcome + buttons for screens < 500px */ +@media (max-width: 500px) { + .homepage-hero-title{ + font-size: 25px; + } +} \ No newline at end of file diff --git a/docs/homepage/app/content.ts b/docs/homepage/app/content.ts new file mode 100644 index 0000000..01cc3b6 --- /dev/null +++ b/docs/homepage/app/content.ts @@ -0,0 +1,157 @@ +import type {CSSProperties} from "react"; + + +export type CategoryItem = { + href: string; + imgAlt: string; + imgSrc: string; + label: string; + isExternal?: boolean; + imgStyle?: CSSProperties; +}; + +// eslint-disable-next-line max-lines-per-function +export const getCategories = (prestoSrc: string, mcpSrc: string) => { + return [ + { + title: "Deploy CLP", + items: [ + { + href: "/clp/main/user-docs/guides-using-object-storage/", + imgAlt: "Single-node", + imgSrc: "/assets/images/single-node.svg", + label: "Single Node", + }, + { + href: "/clp/main/user-docs/guides-docker-compose-deployment.html", + imgAlt: "Docker Compose", + imgSrc: "/assets/images/docker-compose_icon.svg", + label: "Docker Compose", + }, + { + href: "/clp/main/user-docs/guides-k8s-deployment.html", + imgAlt: "Kubernetes", + imgSrc: "/assets/images/kubernetes.svg", + label: "Kubernetes", + }, + ], + }, + { + title: "Log Input", + items: [ + { + href: "/clp/main/user-docs/guides-using-object-storage/", + imgAlt: "S3", + imgSrc: "/assets/images/s3.svg", + label: "S3", + }, + { + href: "https://github.com/y-scope/clp-loglib-py", + imgAlt: "Python Library", + imgSrc: "/assets/images/python.svg", + isExternal: true, + label: "Python", + }, + { + href: "/clp/main/user-docs/guides-using-log-ingestor.html", + imgAlt: "Log Ingestor", + imgSrc: "/assets/images/log-ingestor.svg", + label: "Log Ingestor", + }, + ], + }, + { + title: "Analyze & View", + items: [ + { + href: "/clp/main/user-docs/guides-using-presto.html", + imgAlt: "Presto", + imgSrc: prestoSrc, + imgStyle: {transform: "scale(1.2)", transformOrigin: "center"}, + label: "Presto", + }, + { + href: "/clp/main/user-docs/guides-mcp-server/", + imgAlt: "MCP", + imgSrc: mcpSrc, + label: "MCP Server", + }, + { + href: "/clp/main/user-docs/guides-using-the-api-server.html", + imgAlt: "API Server", + imgSrc: "/assets/images/api-server.svg", + label: "API Server", + }, + { + href: "/yscope-log-viewer/main/", + imgAlt: "Log viewer", + imgSrc: "/assets/images/log-viewer_icon.svg", + label: "Log Viewer", + }, + { + href: "/clp/main/user-docs/reference-json-search-syntax.html", + imgAlt: "JSON Search", + imgSrc: "/assets/images/json.svg", + label: "JSON Search", + }, + { + href: "/clp/main/user-docs/reference-text-search-syntax.html", + imgAlt: "Text Search", + imgSrc: "/assets/images/text.svg", + label: "Text Search", + }, + ], + }, + { + title: "Resources", + items: [ + { + href: "/clp/main/user-docs/resources-datasets.html", + imgAlt: "Datasets", + imgSrc: "/assets/images/datasets.svg", + label: "Datasets", + }, + { + href: "https://benchmarks.yscope.com/log-archival-bench/", + imgAlt: "Benchmarks", + imgSrc: "/assets/images/benchmarks.svg", + isExternal: true, + label: "Benchmarks", + }, + { + href: "https://blog.yscope.com/", + imgAlt: "Blog", + imgSrc: "/assets/images/blog.svg", + isExternal: true, + label: "Blog", + }, + ], + }, + { + title: "References", + items: [ + { + href: "/clp/main/user-docs/reference-sbin-scripts/", + imgAlt: "Package Scripts", + imgSrc: "/assets/images/scripts.svg", + label: "Package Scripts", + }, + { + href: "/clp/main/user-docs/reference-unstructured-schema-file.html", + imgAlt: "Schema File Syntax", + imgSrc: "/assets/images/schema-file-syntax.svg", + label: "Schema File Syntax", + }, + { + href: "https://www.yscope.com/publications", + imgAlt: "Publications", + imgSrc: "/assets/images/publications.svg", + isExternal: true, + label: "Publications", + }, + ], + }, + ]; +}; + +export type Category = {title: string; items: Array}; diff --git a/docs/homepage/app/favicon.ico b/docs/homepage/app/favicon.ico new file mode 100644 index 0000000..6bf891f Binary files /dev/null and b/docs/homepage/app/favicon.ico differ diff --git a/docs/homepage/app/layout.tsx b/docs/homepage/app/layout.tsx new file mode 100644 index 0000000..eeae751 --- /dev/null +++ b/docs/homepage/app/layout.tsx @@ -0,0 +1,94 @@ +import {GoogleAnalytics} from "@next/third-parties/google"; +import type { + Metadata, + Viewport, +} from "next"; +import { + ABeeZee as abeezeeFont, + Geist as geistFont, + Geist_Mono as geistMonoFont +} from "next/font/google"; +import Script from "next/script"; + +import Footer from "../components/sections/Footer"; +import Navbar from "../components/sections/Navbar"; +import {ThemeProvider} from "./shared/ThemeProvider"; + +import "./assets/scss/styles.scss"; + + +const geistSans = geistFont({ + variable: "--font-geist-sans", + subsets: ["latin"], +}); + +const geistMono = geistMonoFont({ + variable: "--font-geist-mono", + subsets: ["latin"], +}); + +const abeezee = abeezeeFont({ + variable: "--font-abeezee", + subsets: ["latin"], + display: "swap", + weight: ["400"], +}); + + +export const metadata: Metadata = { + title: "YScope — CLP Documentation & Guides", + description: "Comprehensive documentation for CLP and YScope's other projects: installation, " + + "configuration, usage, and API references for users and developers.", +}; + +export const viewport: Viewport = { + width: "device-width", + initialScale: 1, +}; + + +/** + * Renders root layout. + * + * @param root0 + * @param root0.children + * @return root layout for the site. + */ +const RootLayout = ({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) => { + return ( + + +