From 7cf2eae953fc495b0ca74038c471e6c8dac20bde Mon Sep 17 00:00:00 2001 From: Charis <26616127+charislam@users.noreply.github.com> Date: Fri, 23 Feb 2024 11:38:06 -0500 Subject: [PATCH] fix: statically build the right nav on each page (#21469) Before: All pages have the Home nav menu in static HTML, which is blown away and replaced by the proper nav menu upon hydration. This leads to jankiness when the page first loads and an unpleasant flash of the wrong nav menu (especially obvious on the JavaScript ref page, which takes a long time to process and rerender the nav). Now: All pages have their correct nav menu in static HTML. --- .../NavigationMenu/NavigationMenu.tsx | 198 +++++---- .../reference/RefSectionHandler.tsx | 97 ++--- apps/docs/hooks/useMenuState.ts | 8 - apps/docs/layouts/DefaultGuideLayout.tsx | 2 + apps/docs/layouts/DefaultLayout.tsx | 1 + apps/docs/layouts/HomeLayout.tsx | 44 +- apps/docs/layouts/MainSkeleton.tsx | 376 ++++++++++++++++++ apps/docs/layouts/SiteLayout.tsx | 373 +---------------- apps/docs/layouts/guides/index.tsx | 131 +++--- apps/docs/pages/guides/ai/[[...slug]].tsx | 3 +- apps/docs/pages/guides/ai/python/[slug].tsx | 3 +- apps/docs/pages/guides/api/[[...slug]].tsx | 3 +- apps/docs/pages/guides/auth/[[...slug]].tsx | 3 +- apps/docs/pages/guides/cli/[[...slug]].tsx | 3 +- apps/docs/pages/guides/cli/config.tsx | 36 +- .../pages/guides/cli/github-action/[slug].tsx | 3 +- .../pages/guides/database/[[...slug]].tsx | 3 +- .../extensions/wrappers/[[...slug]].tsx | 3 +- .../pages/guides/functions/[[...slug]].tsx | 3 +- .../guides/getting-started/[[...slug]].tsx | 3 +- .../docs/pages/guides/graphql/[[...slug]].tsx | 7 +- .../pages/guides/platform/[[...slug]].tsx | 3 +- .../pages/guides/realtime/[[...slug]].tsx | 3 +- .../pages/guides/resources/[[...slug]].tsx | 3 +- .../pages/guides/self-hosting/[[...slug]].tsx | 3 +- .../guides/self-hosting/analytics/config.tsx | 2 + .../pages/guides/self-hosting/auth/config.tsx | 2 + .../guides/self-hosting/realtime/config.tsx | 2 + .../guides/self-hosting/storage/config.tsx | 2 + .../docs/pages/guides/storage/[[...slug]].tsx | 3 +- apps/docs/pages/handbook/contributing.mdx | 32 -- apps/docs/pages/handbook/introduction.mdx | 21 - .../pages/reference/analytics/[...slug].tsx | 168 -------- .../docs/pages/reference/analytics/config.tsx | 114 ------ apps/docs/pages/reference/api/[...slug].tsx | 16 +- apps/docs/pages/reference/auth/[...slug].tsx | 168 -------- apps/docs/pages/reference/auth/config.tsx | 73 ---- apps/docs/pages/reference/cli/[...slug].tsx | 20 +- .../docs/pages/reference/csharp/[...slug].tsx | 11 +- .../reference/csharp/crawlers/[...slug].tsx | 2 + .../pages/reference/csharp/v0/[...slug].tsx | 11 +- .../csharp/v0/crawlers/[...slug].tsx | 2 + apps/docs/pages/reference/dart/[...slug].tsx | 11 +- .../reference/dart/crawlers/[...slug].tsx | 2 + .../pages/reference/dart/v1/[...slug].tsx | 2 + .../reference/dart/v1/crawlers/[...slug].tsx | 2 + .../pages/reference/javascript/[...slug].tsx | 9 +- .../javascript/crawlers/[...slug].tsx | 2 + .../reference/javascript/v1/[...slug].tsx | 9 +- .../javascript/v1/crawlers/[...slug].tsx | 2 + .../docs/pages/reference/kotlin/[...slug].tsx | 11 +- .../reference/kotlin/crawlers/[...slug].tsx | 2 + .../pages/reference/kotlin/v1/[...slug].tsx | 2 + .../kotlin/v1/crawlers/[...slug].tsx | 2 + .../docs/pages/reference/python/[...slug].tsx | 2 + .../reference/python/crawlers/[...slug].tsx | 2 + .../self-hosting-analytics/[...slug].tsx | 16 +- .../reference/self-hosting-auth/[...slug].tsx | 16 +- .../self-hosting-functions/[...slug].tsx | 15 +- .../self-hosting-realtime/[...slug].tsx | 14 +- .../self-hosting-storage/[...slug].tsx | 16 +- apps/docs/pages/reference/swift/[...slug].tsx | 11 +- .../reference/swift/crawlers/[...slug].tsx | 2 + .../reference/swift/{v0 => v1}/[...slug].tsx | 11 +- .../swift/{v0 => v1}/crawlers/[...slug].tsx | 2 + 65 files changed, 868 insertions(+), 1259 deletions(-) create mode 100644 apps/docs/layouts/MainSkeleton.tsx delete mode 100644 apps/docs/pages/handbook/contributing.mdx delete mode 100644 apps/docs/pages/handbook/introduction.mdx delete mode 100644 apps/docs/pages/reference/analytics/[...slug].tsx delete mode 100644 apps/docs/pages/reference/analytics/config.tsx delete mode 100644 apps/docs/pages/reference/auth/[...slug].tsx delete mode 100644 apps/docs/pages/reference/auth/config.tsx rename apps/docs/pages/reference/swift/{v0 => v1}/[...slug].tsx (74%) rename apps/docs/pages/reference/swift/{v0 => v1}/crawlers/[...slug].tsx (92%) diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.tsx b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.tsx index 984db7537a1..525fb496f1e 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.tsx +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.tsx @@ -1,13 +1,45 @@ -import { useRouter } from 'next/router' -import { memo, useEffect } from 'react' -import { menuState, useMenuLevelId } from '~/hooks/useMenuState' +import { memo } from 'react' import NavigationMenuHome from './HomeMenu' import NavigationMenuGuideList from './NavigationMenuGuideList' import NavigationMenuRefList from './NavigationMenuRefList' +enum MenuId { + Home = 'home', + GettingStarted = 'gettingstarted', + Database = 'database', + Api = 'api', + Graphql = 'graphql', + Auth = 'auth', + Functions = 'functions', + Realtime = 'realtime', + Storage = 'storage', + Ai = 'ai', + Platform = 'platform', + Resources = 'resources', + SelfHosting = 'self_hosting', + Integrations = 'integrations', + Cli = 'supabase_cli', + RefJavaScriptV1 = 'reference_javascript_v1', + RefJavaScriptV2 = 'reference_javascript_v2', + RefDartV1 = 'reference_dart_v1', + RefDartV2 = 'reference_dart_v2', + RefCSharpV0 = 'reference_csharp_v0', + RefPythonV2 = 'reference_python_v2', + RefSwiftV1 = 'reference_swift_v1', + RefSwiftV2 = 'reference_swift_v2', + RefKotlinV1 = 'reference_kotlin_v1', + RefKotlinV2 = 'reference_kotlin_v2', + RefCli = 'reference_cli', + RefApi = 'reference_api', + SelfHostingAuth = 'reference_self_hosting_auth', + SelfHostingStorage = 'reference_self_hosting_storage', + SelfHostingRealtime = 'reference_self_hosting_realtime', + SelfHostingAnalytics = 'reference_self_hosting_analytics', + SelfHostingFunctions = 'reference_self_hosting_functions', +} + interface BaseMenu { - id: string - path: string + id: MenuId type: string } @@ -21,6 +53,7 @@ interface GuideMenu extends BaseMenu { interface ReferenceMenu extends BaseMenu { type: 'reference' + path: string commonSectionsFile: string specFile?: string } @@ -29,211 +62,181 @@ type Menu = HomeMenu | GuideMenu | ReferenceMenu const menus: Menu[] = [ { - id: 'home', - path: '/', + id: MenuId.Home, type: 'home', }, { - id: 'gettingstarted', - path: '/guides/getting-started', + id: MenuId.GettingStarted, type: 'guide', }, { - id: 'database', - path: '/guides/database', + id: MenuId.Database, type: 'guide', }, { - id: 'api', - path: '/guides/api', + id: MenuId.Api, type: 'guide', }, { - id: 'graphql', - path: '/guides/graphql', + id: MenuId.Graphql, type: 'guide', }, { - id: 'auth', - path: '/guides/auth', + id: MenuId.Auth, type: 'guide', }, { - id: 'auth', - path: '/learn/auth-deep-dive', + id: MenuId.Functions, type: 'guide', }, { - id: 'functions', - path: '/guides/functions', + id: MenuId.Realtime, type: 'guide', }, { - id: 'realtime', - path: '/guides/realtime', + id: MenuId.Storage, type: 'guide', }, { - id: 'storage', - path: '/guides/storage', + id: MenuId.Ai, type: 'guide', }, { - id: 'ai', - path: '/guides/ai', + id: MenuId.Platform, type: 'guide', }, { - id: 'platform', - path: '/guides/platform', + id: MenuId.Resources, type: 'guide', }, { - id: 'resources', - path: '/guides/resources', + id: MenuId.SelfHosting, type: 'guide', }, { - id: 'self_hosting', - path: '/guides/self-hosting', + id: MenuId.Integrations, type: 'guide', }, { - id: 'integrations', - path: '/guides/integrations', + id: MenuId.Cli, type: 'guide', }, { - id: 'supabase_cli', - // TODO: Add path '/guides/cli/config' - path: '/guides/cli', - type: 'guide', - }, - { - id: 'reference_javascript_v1', - path: '/reference/javascript/v1', + id: MenuId.RefJavaScriptV1, commonSectionsFile: 'common-client-libs-sections.json', specFile: 'supabase_js_v1.yml', type: 'reference', + path: '/reference/javascript/v1', }, { - id: 'reference_javascript_v2', - path: '/reference/javascript', + id: MenuId.RefJavaScriptV2, commonSectionsFile: 'common-client-libs-sections.json', specFile: 'supabase_js_v2.yml', type: 'reference', + path: '/reference/javascript', }, { - id: 'reference_dart_v1', - path: '/reference/dart/v1', + id: MenuId.RefDartV1, commonSectionsFile: 'common-client-libs-sections.json', specFile: 'supabase_dart_v1.yml', type: 'reference', + path: '/reference/dart/v1', }, { - id: 'reference_dart_v2', - path: '/reference/dart', + id: MenuId.RefDartV2, commonSectionsFile: 'common-client-libs-sections.json', specFile: 'supabase_dart_v2.yml', type: 'reference', + path: '/reference/dart', }, { - id: 'reference_csharp_v0', - path: '/reference/csharp', + id: MenuId.RefCSharpV0, commonSectionsFile: 'common-client-libs-sections.json', specFile: 'supabase_csharp_v0.yml', type: 'reference', + path: '/reference/csharp', }, { - id: 'reference_python_v2', - path: '/reference/python', + id: MenuId.RefPythonV2, commonSectionsFile: 'common-client-libs-sections.json', specFile: 'supabase_py_v2.yml', type: 'reference', + path: '/reference/python', }, { - id: 'reference_swift_v1', - path: '/reference/swift', + id: MenuId.RefSwiftV1, commonSectionsFile: 'common-client-libs-sections.json', specFile: 'supabase_swift_v1.yml', type: 'reference', + path: '/reference/swift', }, { - id: 'reference_swift_v2', - path: '/reference/swift', + id: MenuId.RefSwiftV2, commonSectionsFile: 'common-client-libs-sections.json', specFile: 'supabase_swift_v2.yml', type: 'reference', + path: '/reference/swift', }, { - id: 'reference_kotlin_v1', - path: '/reference/kotlin/v1', + id: MenuId.RefKotlinV1, commonSectionsFile: 'common-client-libs-sections.json', specFile: 'supabase_kt_v1.yml', type: 'reference', + path: '/reference/kotlin/v1', }, { - id: 'reference_kotlin_v2', - path: '/reference/kotlin', + id: MenuId.RefKotlinV2, commonSectionsFile: 'common-client-libs-sections.json', specFile: 'supabase_kt_v2.yml', type: 'reference', + path: '/reference/kotlin', }, { - id: 'reference_cli', - path: '/reference/cli', + id: MenuId.RefCli, commonSectionsFile: 'common-cli-sections.json', type: 'reference', + path: '/reference/cli', }, { - id: 'reference_api', - path: '/reference/api', + id: MenuId.RefApi, commonSectionsFile: 'common-api-sections.json', type: 'reference', + path: '/reference/api', }, { - id: 'reference_self_hosting_auth', - path: '/reference/self-hosting-auth', + id: MenuId.SelfHostingAuth, commonSectionsFile: 'common-self-hosting-auth-sections.json', type: 'reference', + path: '/reference/self-hosting-auth', }, { - id: 'reference_self_hosting_storage', - path: '/reference/self-hosting-storage', + id: MenuId.SelfHostingStorage, commonSectionsFile: 'common-self-hosting-storage-sections.json', type: 'reference', + path: '/reference/self-hosting-storage', }, { - id: 'reference_self_hosting_realtime', - path: '/reference/self-hosting-realtime', + id: MenuId.SelfHostingRealtime, commonSectionsFile: 'common-self-hosting-realtime-sections.json', type: 'reference', + path: '/reference/self-hosting-realtime', }, { - id: 'reference_self_hosting_analytics', - path: '/reference/self-hosting-analytics', + id: MenuId.SelfHostingAnalytics, commonSectionsFile: 'common-self-hosting-analytics-sections.json', type: 'reference', + path: '/reference/self-hosting-analytics', }, { - id: 'reference_self_hosting_functions', - path: '/reference/self-hosting-functions', + id: MenuId.SelfHostingFunctions, commonSectionsFile: 'common-self-hosting-functions-sections.json', type: 'reference', + path: '/reference/self-hosting-functions', }, ] -function getMenuById(id: string) { - return menus.find((menu) => menu.id === id) -} - -function getMenuByUrl(basePath: string, url: string) { - // If multiple matches, choose the menu with the longest path - const [menu] = menus - .filter(({ path }) => url.startsWith(`${basePath}${path}`)) - .sort((a, b) => b.path.length - a.path.length) - - return menu +function getMenuById(id: MenuId) { + return menus.find((menu) => menu.id === id) ?? menus.find((menu) => menu.id === MenuId.Home) } function getMenuElement(menu: Menu) { @@ -257,29 +260,12 @@ function getMenuElement(menu: Menu) { } } -const NavigationMenu = () => { - const router = useRouter() - - useEffect(() => { - function handleRouteChange(url: string) { - const menu = getMenuByUrl(router.basePath, url) - if (menu) { - menuState.setMenuLevelId(menu.id) - } - } - - handleRouteChange(router.basePath + router.asPath) - // Listen for page changes after a navigation or when the query changes - router.events.on('routeChangeComplete', handleRouteChange) - return () => { - router.events.off('routeChangeComplete', handleRouteChange) - } - }, [router.asPath, router.basePath, router.events]) - - const level = useMenuLevelId() +const NavigationMenu = ({ menuId }: { menuId: MenuId }) => { + const level = menuId const menu = getMenuById(level) return getMenuElement(menu) } +export { MenuId } export default memo(NavigationMenu) diff --git a/apps/docs/components/reference/RefSectionHandler.tsx b/apps/docs/components/reference/RefSectionHandler.tsx index e100cfbcb20..a633824d45f 100644 --- a/apps/docs/components/reference/RefSectionHandler.tsx +++ b/apps/docs/components/reference/RefSectionHandler.tsx @@ -2,6 +2,7 @@ import Head from 'next/head' import { useRouter } from 'next/router' import { useEffect } from 'react' +import { type MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' import RefEducationSection from '~/components/reference/RefEducationSection' import RefFunctionSection from '~/components/reference/RefFunctionSection' @@ -10,6 +11,7 @@ import ApiOperationSection from './ApiOperationSection' import CliCommandSection from './CLICommandSection' import OldVersionAlert from './OldVersionAlert' import { IAPISpec, ICommonSection, IRefStaticDoc, ISpec, TypeSpec } from './Reference.types' +import { MainSkeleton } from '~/layouts/MainSkeleton' interface RefSectionHandlerProps { sections: ICommonSection[] @@ -18,6 +20,7 @@ interface RefSectionHandlerProps { pageProps: { docs: IRefStaticDoc[] } type: 'client-lib' | 'cli' | 'api' isOldVersion?: boolean + menuId: MenuId } const RefSectionHandler = (props: RefSectionHandlerProps) => { @@ -75,53 +78,55 @@ const RefSectionHandler = (props: RefSectionHandlerProps) => { - {props.isOldVersion && } - - {props.sections.map((section, i) => { - const sectionType = section.type - switch (sectionType) { - case 'markdown': - const markdownData = props.pageProps.docs.find((doc) => doc.id === section.id) + + {props.isOldVersion && } + + {props.sections.map((section, i) => { + const sectionType = section.type + switch (sectionType) { + case 'markdown': + const markdownData = props.pageProps.docs.find((doc) => doc.id === section.id) - return ( - - ) - case 'function': - return ( - - ) - case 'cli-command': - return ( - - ) - case 'operation': - return ( - - ) - default: - throw new Error(`Unknown common section type '${sectionType}'`) - } - })} - + return ( + + ) + case 'function': + return ( + + ) + case 'cli-command': + return ( + + ) + case 'operation': + return ( + + ) + default: + throw new Error(`Unknown common section type '${sectionType}'`) + } + })} + + ) } diff --git a/apps/docs/hooks/useMenuState.ts b/apps/docs/hooks/useMenuState.ts index 52977307542..9cbcba155e7 100644 --- a/apps/docs/hooks/useMenuState.ts +++ b/apps/docs/hooks/useMenuState.ts @@ -7,11 +7,6 @@ export const menuState = proxy({ setMenuActiveRefId: (value) => { menuState.menuActiveRefId = value }, - menuLevelId: 'home', - setMenuLevelId: (value) => { - menuState.menuMobileOpen = false - menuState.menuLevelId = value - }, menuMobileOpen: false, setMenuMobileOpen: (value) => { menuState.menuMobileOpen = value @@ -21,9 +16,6 @@ export const menuState = proxy({ export const useMenuActiveRefId = () => { return useSnapshot(menuState).menuActiveRefId } -export const useMenuLevelId = () => { - return useSnapshot(menuState).menuLevelId -} export const useMenuMobileOpen = () => { return useSnapshot(menuState).menuMobileOpen diff --git a/apps/docs/layouts/DefaultGuideLayout.tsx b/apps/docs/layouts/DefaultGuideLayout.tsx index 9bda33bb1df..08a632fbc9f 100644 --- a/apps/docs/layouts/DefaultGuideLayout.tsx +++ b/apps/docs/layouts/DefaultGuideLayout.tsx @@ -1,5 +1,6 @@ import { FC } from 'react' import { FooterHelpCalloutType } from '~/components/FooterHelpCallout' +import { type MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' import GuideLayout from './guides' interface Props { @@ -16,6 +17,7 @@ interface Props { hideToc?: boolean currentPage?: string editLink?: string + menuId: MenuId } const Layout: FC = (props) => { diff --git a/apps/docs/layouts/DefaultLayout.tsx b/apps/docs/layouts/DefaultLayout.tsx index b672c43f4a6..6bfc53a2564 100644 --- a/apps/docs/layouts/DefaultLayout.tsx +++ b/apps/docs/layouts/DefaultLayout.tsx @@ -5,6 +5,7 @@ import { useRouter } from 'next/router' import { FC, PropsWithChildren } from 'react' import components from '~/components' import TableOfContents from '~/components/TableOfContents' +import { MainSkeleton } from './MainSkeleton' interface Props { meta: { diff --git a/apps/docs/layouts/HomeLayout.tsx b/apps/docs/layouts/HomeLayout.tsx index 30d8627a622..9f5e7d46320 100644 --- a/apps/docs/layouts/HomeLayout.tsx +++ b/apps/docs/layouts/HomeLayout.tsx @@ -4,9 +4,11 @@ import Head from 'next/head' import { useRouter } from 'next/router' import { FC } from 'react' import components from '~/components' +import HomePageCover from '~/components/HomePageCover' +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' import TableOfContents from '~/components/TableOfContents' -import HomePageCover from '../components/HomePageCover' import { LayoutMainContent } from './DefaultLayout' +import { MainSkeleton } from './MainSkeleton' interface Props { meta: { @@ -61,26 +63,28 @@ const HomeLayout: FC = (props: Props) => { }, }} /> -
- - -
-
- {props.children} + +
+ + +
+
+ {props.children} +
-
- {hasTableOfContents && !props.meta?.hide_table_of_contents && ( - - )} - -
+ {hasTableOfContents && !props.meta?.hide_table_of_contents && ( + + )} + + + ) } diff --git a/apps/docs/layouts/MainSkeleton.tsx b/apps/docs/layouts/MainSkeleton.tsx new file mode 100644 index 00000000000..bf2b77aef4d --- /dev/null +++ b/apps/docs/layouts/MainSkeleton.tsx @@ -0,0 +1,376 @@ +import { useTheme } from 'next-themes' +import Image from 'next/legacy/image' +import Link from 'next/link' +import NavigationMenu, { type MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' +import TopNavBar from '~/components/Navigation/NavigationMenu/TopNavBar' + +import { PropsWithChildren, memo, useEffect } from 'react' +import Footer from '~/components/Navigation/Footer' +import { menuState, useMenuMobileOpen } from '~/hooks/useMenuState' + +const levelsData = { + home: { + icon: '/docs/img/icons/menu/home', + name: 'Home', + }, + gettingstarted: { + icon: '/docs/img/icons/menu/getting-started', + name: 'Getting Started', + }, + database: { + icon: '/docs/img/icons/menu/database', + name: 'Database', + }, + api: { + icon: '/docs/img/icons/menu/rest', + name: 'REST API', + }, + graphql: { + icon: '/docs/img/icons/menu/graphql', + name: 'GraphQL', + }, + auth: { + icon: '/docs/img/icons/menu/auth', + name: 'Auth', + }, + functions: { + icon: '/docs/img/icons/menu/functions', + name: 'Edge Functions', + }, + realtime: { + icon: '/docs/img/icons/menu/realtime', + name: 'Realtime', + }, + analytics: { + icon: '/docs/img/icons/menu/analytics', + name: 'Analytics', + }, + storage: { + icon: '/docs/img/icons/menu/storage', + name: 'Storage', + }, + ai: { + icon: '/docs/img/icons/menu/ai', + name: 'AI & Vectors', + }, + supabase_cli: { + icon: '/docs/img/icons/menu/reference-cli', + name: 'Supabase CLI', + }, + platform: { + icon: '/docs/img/icons/menu/platform', + name: 'Platform', + }, + resources: { + icon: '/docs/img/icons/menu/resources', + name: 'Resources', + }, + self_hosting: { + icon: '/docs/img/icons/menu/self-hosting', + name: 'Self-Hosting', + }, + integrations: { + icon: '/docs/img/icons/menu/integrations', + name: 'Integrations', + }, + reference_javascript_v1: { + icon: '/docs/img/icons/menu/reference-javascript', + name: 'Javascript Reference v1.0', + }, + reference_javascript_v2: { + icon: '/docs/img/icons/menu/reference-javascript', + name: 'Javascript Reference v2.0', + }, + reference_dart_v1: { + icon: '/docs/img/icons/menu/reference-dart', + name: 'Dart Reference v1.0', + }, + reference_dart_v2: { + icon: '/docs/img/icons/menu/reference-dart', + name: 'Dart Reference v2.0', + }, + reference_csharp_v0: { + icon: '/docs/img/icons/menu/reference-csharp', + name: 'C# Reference v0.0', + }, + reference_python_v2: { + icon: '/docs/img/icons/menu/reference-python', + name: 'Python Reference v2.0', + }, + reference_swift_v1: { + icon: '/docs/img/icons/menu/reference-swift', + name: 'Swift Reference v1.0', + }, + reference_swift_v2: { + icon: '/docs/img/icons/menu/reference-swift', + name: 'Swift Reference v2.0', + }, + reference_kotlin_v1: { + icon: '/docs/img/icons/menu/reference-kotlin', + name: 'Kotlin Reference v1.0', + }, + reference_kotlin_v2: { + icon: '/docs/img/icons/menu/reference-kotlin', + name: 'Kotlin Reference v2.0', + }, + reference_cli: { + icon: '/docs/img/icons/menu/reference-cli', + name: 'CLI Reference', + }, + reference_api: { + icon: '/docs/img/icons/menu/reference-api', + name: 'Management API Reference', + }, + reference_self_hosting_auth: { + icon: '/docs/img/icons/menu/reference-auth', + name: 'Auth Server Reference', + }, + reference_self_hosting_storage: { + icon: '/docs/img/icons/menu/reference-storage', + name: 'Storage Server Reference', + }, + reference_self_hosting_realtime: { + icon: '/docs/img/icons/menu/reference-realtime', + name: 'Realtime Server Reference', + }, + reference_self_hosting_analytics: { + icon: '/docs/img/icons/menu/reference-analytics', + name: 'Analytics Server Reference', + }, + reference_self_hosting_functions: { + icon: '/docs/img/icons/menu/reference-functions', + name: 'Functions Server Reference', + }, +} + +const MobileHeader = memo(function MobileHeader({ menuId }: { menuId: MenuId }) { + const mobileMenuOpen = useMenuMobileOpen() + const menuLevel = menuId + + return ( +
+ +
+ +
+ + {mobileMenuOpen + ? 'Close' + : menuLevel + ? levelsData[menuLevel].name + : levelsData['home'].name} + +
+ ) +}) + +const MobileMenuBackdrop = memo(function MobileMenuBackdrop() { + const mobileMenuOpen = useMenuMobileOpen() + + useEffect(() => { + window.addEventListener('resize', (e: UIEvent) => { + const w = e.target as Window + if (mobileMenuOpen && w.innerWidth >= 1024) { + menuState.setMenuMobileOpen(!mobileMenuOpen) + } + }) + return () => { + window.removeEventListener('resize', () => {}) + } + }, [mobileMenuOpen]) + + return ( +
menuState.setMenuMobileOpen(!mobileMenuOpen)} + >
+ ) +}) + +const HeaderLogo = memo(function HeaderLogo() { + const { resolvedTheme } = useTheme() + return ( + + Supabase Logo + DOCS + + ) +}) + +const Container = memo(function Container(props: PropsWithChildren) { + const mobileMenuOpen = useMenuMobileOpen() + + return ( +
+
{props.children}
+
+ ) +}) + +const NavContainer = memo(function NavContainer({ menuId }: { menuId: MenuId }) { + const mobileMenuOpen = useMenuMobileOpen() + + return ( + + ) +}) + +function MainSkeleton({ children, menuId }: PropsWithChildren<{ menuId: MenuId }>) { + return ( +
+ + +
+ +
+
+
+ +
+
+
+ {children} +
+
+ +
+
+ ) +} + +export { MainSkeleton } diff --git a/apps/docs/layouts/SiteLayout.tsx b/apps/docs/layouts/SiteLayout.tsx index ed1447aa80c..5754ddff924 100644 --- a/apps/docs/layouts/SiteLayout.tsx +++ b/apps/docs/layouts/SiteLayout.tsx @@ -1,349 +1,5 @@ -import { useTheme } from 'next-themes' -import Image from 'next/legacy/image' -import Link from 'next/link' -import NavigationMenu from '~/components/Navigation/NavigationMenu/NavigationMenu' -import TopNavBar from '~/components/Navigation/NavigationMenu/TopNavBar' - import Head from 'next/head' -import { PropsWithChildren, memo, useEffect } from 'react' -import Footer from '~/components/Navigation/Footer' -import { menuState, useMenuLevelId, useMenuMobileOpen } from '~/hooks/useMenuState' - -const levelsData = { - home: { - icon: '/docs/img/icons/menu/home', - name: 'Home', - }, - gettingstarted: { - icon: '/docs/img/icons/menu/getting-started', - name: 'Getting Started', - }, - database: { - icon: '/docs/img/icons/menu/database', - name: 'Database', - }, - api: { - icon: '/docs/img/icons/menu/rest', - name: 'REST API', - }, - graphql: { - icon: '/docs/img/icons/menu/graphql', - name: 'GraphQL', - }, - auth: { - icon: '/docs/img/icons/menu/auth', - name: 'Auth', - }, - functions: { - icon: '/docs/img/icons/menu/functions', - name: 'Edge Functions', - }, - realtime: { - icon: '/docs/img/icons/menu/realtime', - name: 'Realtime', - }, - analytics: { - icon: '/docs/img/icons/menu/analytics', - name: 'Analytics', - }, - storage: { - icon: '/docs/img/icons/menu/storage', - name: 'Storage', - }, - ai: { - icon: '/docs/img/icons/menu/ai', - name: 'AI & Vectors', - }, - supabase_cli: { - icon: '/docs/img/icons/menu/reference-cli', - name: 'Supabase CLI', - }, - platform: { - icon: '/docs/img/icons/menu/platform', - name: 'Platform', - }, - resources: { - icon: '/docs/img/icons/menu/resources', - name: 'Resources', - }, - self_hosting: { - icon: '/docs/img/icons/menu/self-hosting', - name: 'Self-Hosting', - }, - integrations: { - icon: '/docs/img/icons/menu/integrations', - name: 'Integrations', - }, - reference_javascript_v1: { - icon: '/docs/img/icons/menu/reference-javascript', - name: 'Javascript Reference v1.0', - }, - reference_javascript_v2: { - icon: '/docs/img/icons/menu/reference-javascript', - name: 'Javascript Reference v2.0', - }, - reference_dart_v1: { - icon: '/docs/img/icons/menu/reference-dart', - name: 'Dart Reference v1.0', - }, - reference_dart_v2: { - icon: '/docs/img/icons/menu/reference-dart', - name: 'Dart Reference v2.0', - }, - reference_csharp_v0: { - icon: '/docs/img/icons/menu/reference-csharp', - name: 'C# Reference v0.0', - }, - reference_python_v2: { - icon: '/docs/img/icons/menu/reference-python', - name: 'Python Reference v2.0', - }, - reference_swift_v1: { - icon: '/docs/img/icons/menu/reference-swift', - name: 'Swift Reference v1.0', - }, - reference_swift_v2: { - icon: '/docs/img/icons/menu/reference-swift', - name: 'Swift Reference v2.0', - }, - reference_kotlin_v1: { - icon: '/docs/img/icons/menu/reference-kotlin', - name: 'Kotlin Reference v1.0', - }, - reference_kotlin_v2: { - icon: '/docs/img/icons/menu/reference-kotlin', - name: 'Kotlin Reference v2.0', - }, - reference_cli: { - icon: '/docs/img/icons/menu/reference-cli', - name: 'CLI Reference', - }, - reference_api: { - icon: '/docs/img/icons/menu/reference-api', - name: 'Management API Reference', - }, - reference_self_hosting_auth: { - icon: '/docs/img/icons/menu/reference-auth', - name: 'Auth Server Reference', - }, - reference_self_hosting_storage: { - icon: '/docs/img/icons/menu/reference-storage', - name: 'Storage Server Reference', - }, - reference_self_hosting_realtime: { - icon: '/docs/img/icons/menu/reference-realtime', - name: 'Realtime Server Reference', - }, - reference_self_hosting_analytics: { - icon: '/docs/img/icons/menu/reference-analytics', - name: 'Analytics Server Reference', - }, - reference_self_hosting_functions: { - icon: '/docs/img/icons/menu/reference-functions', - name: 'Functions Server Reference', - }, -} - -const MobileHeader = memo(function MobileHeader() { - const mobileMenuOpen = useMenuMobileOpen() - const menuLevel = useMenuLevelId() - - return ( -
- -
- -
- - {mobileMenuOpen - ? 'Close' - : menuLevel - ? levelsData[menuLevel].name - : levelsData['home'].name} - -
- ) -}) - -const MobileMenuBackdrop = memo(function MobileMenuBackdrop() { - const mobileMenuOpen = useMenuMobileOpen() - - useEffect(() => { - window.addEventListener('resize', (e: UIEvent) => { - const w = e.target as Window - if (mobileMenuOpen && w.innerWidth >= 1024) { - menuState.setMenuMobileOpen(!mobileMenuOpen) - } - }) - return () => { - window.removeEventListener('resize', () => {}) - } - }, [mobileMenuOpen]) - - return ( -
menuState.setMenuMobileOpen(!mobileMenuOpen)} - >
- ) -}) - -const HeaderLogo = memo(function HeaderLogo() { - const { resolvedTheme } = useTheme() - return ( - - Supabase Logo - DOCS - - ) -}) - -const Container = memo(function Container(props: PropsWithChildren) { - const mobileMenuOpen = useMenuMobileOpen() - - return ( -
-
{props.children}
-
- ) -}) - -const NavContainer = memo(function NavContainer() { - const mobileMenuOpen = useMenuMobileOpen() - - return ( - - ) -}) +import { PropsWithChildren } from 'react' const SiteLayout = ({ children }: PropsWithChildren<{}>) => { return ( @@ -351,32 +7,7 @@ const SiteLayout = ({ children }: PropsWithChildren<{}>) => { Supabase Docs -
-
- - -
- -
-
-
- -
-
-
- {children} -
-
- -
-
-
+
{children}
) } diff --git a/apps/docs/layouts/guides/index.tsx b/apps/docs/layouts/guides/index.tsx index 105e250dd5b..34768852a2e 100644 --- a/apps/docs/layouts/guides/index.tsx +++ b/apps/docs/layouts/guides/index.tsx @@ -10,8 +10,10 @@ import components from '~/components' import { highlightSelectedTocItem } from '~/components/CustomHTMLElements/CustomHTMLElements.utils' import { FooterHelpCalloutType } from '~/components/FooterHelpCallout' import GuidesTableOfContents from '~/components/GuidesTableOfContents' +import { type MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' import useHash from '~/hooks/useHash' import { LayoutMainContent } from '../DefaultLayout' +import { MainSkeleton } from '../MainSkeleton' interface Props { meta: { @@ -30,6 +32,7 @@ interface Props { toc?: any currentPage?: string hideToc?: boolean + menuId: MenuId } const Layout: FC = (props) => { @@ -42,6 +45,8 @@ const Layout: FC = (props) => { const { asPath } = useRouter() const router = useRouter() + const menuId = props.menuId + const EDIT_BUTTON_EXCLUDE_LIST = ['/404'] useEffect(() => { @@ -108,77 +113,79 @@ const Layout: FC = (props) => { }, }} /> - -
-
- {props.meta?.breadcrumb && ( -

{props.meta.breadcrumb}

- )} -
-

{props.meta.title}

- {props.meta?.subtitle && ( -

{props.meta.subtitle}

- )} -
- {props.children} - - {EDIT_BUTTON_EXCLUDE_LIST.includes(router.route) ? ( - <> - ) : ( - - )} -
-
- {!props.hideToc && hasTableOfContents && !props.meta?.hide_table_of_contents && ( + + +
- + {!props.hideToc && hasTableOfContents && !props.meta?.hide_table_of_contents && ( + + )} +
+
+
) } diff --git a/apps/docs/pages/guides/ai/[[...slug]].tsx b/apps/docs/pages/guides/ai/[[...slug]].tsx index af8cc713906..a19f8a02e54 100644 --- a/apps/docs/pages/guides/ai/[[...slug]].tsx +++ b/apps/docs/pages/guides/ai/[[...slug]].tsx @@ -2,6 +2,7 @@ import { type GetStaticPaths, type GetStaticProps, type InferGetStaticPropsType import { MDXRemote } from 'next-mdx-remote' import components from '~/components' +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' import Layout from '~/layouts/DefaultGuideLayout' import { getGuidesStaticPaths, getGuidesStaticProps } from '~/lib/docs' @@ -21,7 +22,7 @@ export default function AiGuide({ const { hideToc, ...meta } = frontmatter return ( - + ) diff --git a/apps/docs/pages/guides/ai/python/[slug].tsx b/apps/docs/pages/guides/ai/python/[slug].tsx index fcbd53160c0..952e4bfa099 100644 --- a/apps/docs/pages/guides/ai/python/[slug].tsx +++ b/apps/docs/pages/guides/ai/python/[slug].tsx @@ -11,6 +11,7 @@ import Layout from '~/layouts/DefaultGuideLayout' import { UrlTransformFunction, linkTransform } from '~/lib/mdx/plugins/rehypeLinkTransform' import remarkMkDocsAdmonition from '~/lib/mdx/plugins/remarkAdmonition' import { removeTitle } from '~/lib/mdx/plugins/remarkRemoveTitle' +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' // We fetch these docs at build time from an external repo const org = 'supabase' @@ -61,7 +62,7 @@ interface PythonClientDocsProps { export default function PythonClientDocs({ source, meta }: PythonClientDocsProps) { return ( - + ) diff --git a/apps/docs/pages/guides/api/[[...slug]].tsx b/apps/docs/pages/guides/api/[[...slug]].tsx index 94951837d6d..d46e03fd7cc 100644 --- a/apps/docs/pages/guides/api/[[...slug]].tsx +++ b/apps/docs/pages/guides/api/[[...slug]].tsx @@ -2,6 +2,7 @@ import { type GetStaticPaths, type GetStaticProps, type InferGetStaticPropsType import { MDXRemote } from 'next-mdx-remote' import components from '~/components' +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' import Layout from '~/layouts/DefaultGuideLayout' import { getGuidesStaticPaths, getGuidesStaticProps } from '~/lib/docs' @@ -21,7 +22,7 @@ export default function ApiGuide({ const { hideToc, ...meta } = frontmatter return ( - + ) diff --git a/apps/docs/pages/guides/auth/[[...slug]].tsx b/apps/docs/pages/guides/auth/[[...slug]].tsx index 777f65e6ddd..9e645a917ea 100644 --- a/apps/docs/pages/guides/auth/[[...slug]].tsx +++ b/apps/docs/pages/guides/auth/[[...slug]].tsx @@ -2,6 +2,7 @@ import { type GetStaticPaths, type GetStaticProps, type InferGetStaticPropsType import { MDXRemote } from 'next-mdx-remote' import components from '~/components' +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' import Layout from '~/layouts/DefaultGuideLayout' import { getGuidesStaticPaths, getGuidesStaticProps } from '~/lib/docs' @@ -21,7 +22,7 @@ export default function AuthGuide({ const { hideToc, ...meta } = frontmatter return ( - + ) diff --git a/apps/docs/pages/guides/cli/[[...slug]].tsx b/apps/docs/pages/guides/cli/[[...slug]].tsx index 3e690745906..2dd168f672d 100644 --- a/apps/docs/pages/guides/cli/[[...slug]].tsx +++ b/apps/docs/pages/guides/cli/[[...slug]].tsx @@ -2,6 +2,7 @@ import { type GetStaticPaths, type GetStaticProps, type InferGetStaticPropsType import { MDXRemote } from 'next-mdx-remote' import components from '~/components' +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' import Layout from '~/layouts/DefaultGuideLayout' import { getGuidesStaticPaths, getGuidesStaticProps } from '~/lib/docs' @@ -21,7 +22,7 @@ export default function CliGuide({ const { hideToc, ...meta } = frontmatter return ( - + ) diff --git a/apps/docs/pages/guides/cli/config.tsx b/apps/docs/pages/guides/cli/config.tsx index 3830af444f1..193f25fca66 100644 --- a/apps/docs/pages/guides/cli/config.tsx +++ b/apps/docs/pages/guides/cli/config.tsx @@ -5,6 +5,8 @@ import GuidesTableOfContents from '~/components/GuidesTableOfContents' import { Heading } from '~/components/CustomHTMLElements' import Head from 'next/head' import { CodeBlock } from 'ui' +import { MainSkeleton } from '~/layouts/MainSkeleton' +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' // Parameters are grouped on the page by tag const tocList = [] @@ -29,24 +31,26 @@ export default function Config() { Supabase CLI config -
-
-
-

CLI configuration

-
- {specFile.info.description} -
{content}
+ +
+
+
+

CLI configuration

+
+ {specFile.info.description} +
{content}
+
+
+
+
+ + On this page + + +
-
-
- - On this page - - -
-
-
+ ) } diff --git a/apps/docs/pages/guides/cli/github-action/[slug].tsx b/apps/docs/pages/guides/cli/github-action/[slug].tsx index 049e3f1072d..d06701295e5 100644 --- a/apps/docs/pages/guides/cli/github-action/[slug].tsx +++ b/apps/docs/pages/guides/cli/github-action/[slug].tsx @@ -12,6 +12,7 @@ import { UrlTransformFunction, linkTransform } from '~/lib/mdx/plugins/rehypeLin import remarkMkDocsAdmonition from '~/lib/mdx/plugins/remarkAdmonition' import { removeTitle } from '~/lib/mdx/plugins/remarkRemoveTitle' import remarkPyMdownTabs from '~/lib/mdx/plugins/remarkTabs' +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' // We fetch these docs at build time from an external repo const org = 'supabase' @@ -62,7 +63,7 @@ interface ActionDocsProps { export default function ActionDocs({ source, meta }: ActionDocsProps) { return ( - + ) diff --git a/apps/docs/pages/guides/database/[[...slug]].tsx b/apps/docs/pages/guides/database/[[...slug]].tsx index fc7519ad2ba..0ee6416477b 100644 --- a/apps/docs/pages/guides/database/[[...slug]].tsx +++ b/apps/docs/pages/guides/database/[[...slug]].tsx @@ -2,6 +2,7 @@ import { type GetStaticPaths, type GetStaticProps, type InferGetStaticPropsType import { MDXRemote } from 'next-mdx-remote' import components from '~/components' +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' import Layout from '~/layouts/DefaultGuideLayout' import { getGuidesStaticPaths, getGuidesStaticProps } from '~/lib/docs' @@ -31,7 +32,7 @@ export default function DatabaseGuide({ const { hideToc, ...meta } = frontmatter return ( - + ) diff --git a/apps/docs/pages/guides/database/extensions/wrappers/[[...slug]].tsx b/apps/docs/pages/guides/database/extensions/wrappers/[[...slug]].tsx index 564d96d51d2..0d34ede0dcb 100644 --- a/apps/docs/pages/guides/database/extensions/wrappers/[[...slug]].tsx +++ b/apps/docs/pages/guides/database/extensions/wrappers/[[...slug]].tsx @@ -10,6 +10,7 @@ import remarkGfm from 'remark-gfm' import codeHikeTheme from 'config/code-hike.theme.json' assert { type: 'json' } import components from '~/components' +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' import Layout from '~/layouts/DefaultGuideLayout' import { getGuidesStaticPaths, getGuidesStaticProps } from '~/lib/docs' import { UrlTransformFunction, linkTransform } from '~/lib/mdx/plugins/rehypeLinkTransform' @@ -83,7 +84,7 @@ export default function WrappersDocs({ editLink, }: InferGetStaticPropsType) { return ( - + ) diff --git a/apps/docs/pages/guides/functions/[[...slug]].tsx b/apps/docs/pages/guides/functions/[[...slug]].tsx index 8e41b131d3e..8a8ed0defd2 100644 --- a/apps/docs/pages/guides/functions/[[...slug]].tsx +++ b/apps/docs/pages/guides/functions/[[...slug]].tsx @@ -2,6 +2,7 @@ import { type GetStaticPaths, type GetStaticProps, type InferGetStaticPropsType import { MDXRemote } from 'next-mdx-remote' import components from '~/components' +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' import Layout from '~/layouts/DefaultGuideLayout' import { getGuidesStaticPaths, getGuidesStaticProps } from '~/lib/docs' @@ -21,7 +22,7 @@ export default function FunctionsGuide({ const { hideToc, ...meta } = frontmatter return ( - + ) diff --git a/apps/docs/pages/guides/getting-started/[[...slug]].tsx b/apps/docs/pages/guides/getting-started/[[...slug]].tsx index 8791fae3a10..e16c15ac68f 100644 --- a/apps/docs/pages/guides/getting-started/[[...slug]].tsx +++ b/apps/docs/pages/guides/getting-started/[[...slug]].tsx @@ -2,6 +2,7 @@ import { type GetStaticPaths, type GetStaticProps, type InferGetStaticPropsType import { MDXRemote } from 'next-mdx-remote' import components from '~/components' +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' import Layout from '~/layouts/DefaultGuideLayout' import { getGuidesStaticPaths, getGuidesStaticProps } from '~/lib/docs' @@ -21,7 +22,7 @@ export default function GettingStartedGuide({ const { hideToc, ...meta } = frontmatter return ( - + ) diff --git a/apps/docs/pages/guides/graphql/[[...slug]].tsx b/apps/docs/pages/guides/graphql/[[...slug]].tsx index 559e10f592b..00eaecfe221 100644 --- a/apps/docs/pages/guides/graphql/[[...slug]].tsx +++ b/apps/docs/pages/guides/graphql/[[...slug]].tsx @@ -5,14 +5,17 @@ import { serialize } from 'next-mdx-remote/serialize' import { isAbsolute, relative } from 'path' import rehypeSlug from 'rehype-slug' import remarkGfm from 'remark-gfm' -import codeHikeTheme from 'config/code-hike.theme.json' assert { type: 'json' } + import components from '~/components' +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' import Layout from '~/layouts/DefaultGuideLayout' import { UrlTransformFunction, linkTransform } from '~/lib/mdx/plugins/rehypeLinkTransform' import remarkMkDocsAdmonition from '~/lib/mdx/plugins/remarkAdmonition' import { removeTitle } from '~/lib/mdx/plugins/remarkRemoveTitle' import remarkPyMdownTabs from '~/lib/mdx/plugins/remarkTabs' +import codeHikeTheme from 'config/code-hike.theme.json' assert { type: 'json' } + // We fetch these docs at build time from an external repo const org = 'supabase' const repo = 'pg_graphql' @@ -114,7 +117,7 @@ interface PGGraphQLDocsProps { export default function PGGraphQLDocs({ source, meta }: PGGraphQLDocsProps) { return ( - + ) diff --git a/apps/docs/pages/guides/platform/[[...slug]].tsx b/apps/docs/pages/guides/platform/[[...slug]].tsx index 06340742556..f20307d7974 100644 --- a/apps/docs/pages/guides/platform/[[...slug]].tsx +++ b/apps/docs/pages/guides/platform/[[...slug]].tsx @@ -2,6 +2,7 @@ import { type GetStaticPaths, type GetStaticProps, type InferGetStaticPropsType import { MDXRemote } from 'next-mdx-remote' import components from '~/components' +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' import Layout from '~/layouts/DefaultGuideLayout' import { getGuidesStaticPaths, getGuidesStaticProps } from '~/lib/docs' @@ -21,7 +22,7 @@ export default function PlatformGuide({ const { hideToc, ...meta } = frontmatter return ( - + ) diff --git a/apps/docs/pages/guides/realtime/[[...slug]].tsx b/apps/docs/pages/guides/realtime/[[...slug]].tsx index dddabae2a82..3a90134f5ad 100644 --- a/apps/docs/pages/guides/realtime/[[...slug]].tsx +++ b/apps/docs/pages/guides/realtime/[[...slug]].tsx @@ -2,6 +2,7 @@ import { type GetStaticPaths, type GetStaticProps, type InferGetStaticPropsType import { MDXRemote } from 'next-mdx-remote' import components from '~/components' +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' import Layout from '~/layouts/DefaultGuideLayout' import { getGuidesStaticPaths, getGuidesStaticProps } from '~/lib/docs' @@ -21,7 +22,7 @@ export default function RealtimeGuide({ const { hideToc, ...meta } = frontmatter return ( - + ) diff --git a/apps/docs/pages/guides/resources/[[...slug]].tsx b/apps/docs/pages/guides/resources/[[...slug]].tsx index 1fb37bfe708..d73ad930fe5 100644 --- a/apps/docs/pages/guides/resources/[[...slug]].tsx +++ b/apps/docs/pages/guides/resources/[[...slug]].tsx @@ -2,6 +2,7 @@ import { type GetStaticPaths, type GetStaticProps, type InferGetStaticPropsType import { MDXRemote } from 'next-mdx-remote' import components from '~/components' +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' import Layout from '~/layouts/DefaultGuideLayout' import { getGuidesStaticPaths, getGuidesStaticProps } from '~/lib/docs' @@ -21,7 +22,7 @@ export default function ResourcesGuide({ const { hideToc, ...meta } = frontmatter return ( - + ) diff --git a/apps/docs/pages/guides/self-hosting/[[...slug]].tsx b/apps/docs/pages/guides/self-hosting/[[...slug]].tsx index fee43e2be5b..c63d1c13b75 100644 --- a/apps/docs/pages/guides/self-hosting/[[...slug]].tsx +++ b/apps/docs/pages/guides/self-hosting/[[...slug]].tsx @@ -2,6 +2,7 @@ import { type GetStaticPaths, type GetStaticProps, type InferGetStaticPropsType import { MDXRemote } from 'next-mdx-remote' import components from '~/components' +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' import Layout from '~/layouts/DefaultGuideLayout' import { getGuidesStaticPaths, getGuidesStaticProps } from '~/lib/docs' @@ -21,7 +22,7 @@ export default function SelfHostingGuide({ const { hideToc, ...meta } = frontmatter return ( - + ) diff --git a/apps/docs/pages/guides/self-hosting/analytics/config.tsx b/apps/docs/pages/guides/self-hosting/analytics/config.tsx index 073411ca703..3946fc2c55c 100644 --- a/apps/docs/pages/guides/self-hosting/analytics/config.tsx +++ b/apps/docs/pages/guides/self-hosting/analytics/config.tsx @@ -3,6 +3,7 @@ import { MDXRemote } from 'next-mdx-remote' import { serialize } from 'next-mdx-remote/serialize' import components from '~/components' +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' import Param from '~/components/Params' import Layout from '~/layouts/DefaultGuideLayout' import { getAnalyticsConfigV0 } from '~/lib/mdx/getConfig' @@ -27,6 +28,7 @@ export const Page = (props: InferGetStaticPropsType) => ( diff --git a/apps/docs/pages/guides/self-hosting/auth/config.tsx b/apps/docs/pages/guides/self-hosting/auth/config.tsx index 50734320dfe..5702f8a5379 100644 --- a/apps/docs/pages/guides/self-hosting/auth/config.tsx +++ b/apps/docs/pages/guides/self-hosting/auth/config.tsx @@ -3,6 +3,7 @@ import { MDXRemote } from 'next-mdx-remote' import { serialize } from 'next-mdx-remote/serialize' import components from '~/components' +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' import Param from '~/components/Params' import Layout from '~/layouts/DefaultGuideLayout' import { getAuthConfigV1 } from '~/lib/mdx/getConfig' @@ -27,6 +28,7 @@ export const Page = (props: InferGetStaticPropsType) => ( diff --git a/apps/docs/pages/guides/self-hosting/realtime/config.tsx b/apps/docs/pages/guides/self-hosting/realtime/config.tsx index 1dd5086b214..09df809537c 100644 --- a/apps/docs/pages/guides/self-hosting/realtime/config.tsx +++ b/apps/docs/pages/guides/self-hosting/realtime/config.tsx @@ -3,6 +3,7 @@ import { MDXRemote } from 'next-mdx-remote' import { serialize } from 'next-mdx-remote/serialize' import components from '~/components' +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' import Param from '~/components/Params' import Layout from '~/layouts/DefaultGuideLayout' import { getRealtimeConfigV0 } from '~/lib/mdx/getConfig' @@ -27,6 +28,7 @@ export const Page = (props: InferGetStaticPropsType) => ( diff --git a/apps/docs/pages/guides/self-hosting/storage/config.tsx b/apps/docs/pages/guides/self-hosting/storage/config.tsx index 57a32f7cb96..8a131f674ac 100644 --- a/apps/docs/pages/guides/self-hosting/storage/config.tsx +++ b/apps/docs/pages/guides/self-hosting/storage/config.tsx @@ -3,6 +3,7 @@ import { MDXRemote } from 'next-mdx-remote' import { serialize } from 'next-mdx-remote/serialize' import components from '~/components' +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' import Param from '~/components/Params' import Layout from '~/layouts/DefaultGuideLayout' import { getStorageConfigV0 } from '~/lib/mdx/getConfig' @@ -27,6 +28,7 @@ export const Page = (props: InferGetStaticPropsType) => ( diff --git a/apps/docs/pages/guides/storage/[[...slug]].tsx b/apps/docs/pages/guides/storage/[[...slug]].tsx index c3ae4c4b3c3..90c4b978d88 100644 --- a/apps/docs/pages/guides/storage/[[...slug]].tsx +++ b/apps/docs/pages/guides/storage/[[...slug]].tsx @@ -2,6 +2,7 @@ import { type GetStaticPaths, type GetStaticProps, type InferGetStaticPropsType import { MDXRemote } from 'next-mdx-remote' import components from '~/components' +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' import Layout from '~/layouts/DefaultGuideLayout' import { getGuidesStaticPaths, getGuidesStaticProps } from '~/lib/docs' @@ -21,7 +22,7 @@ export default function StorageGuide({ const { hideToc, ...meta } = frontmatter return ( - + ) diff --git a/apps/docs/pages/handbook/contributing.mdx b/apps/docs/pages/handbook/contributing.mdx deleted file mode 100644 index 5365b2fb9f9..00000000000 --- a/apps/docs/pages/handbook/contributing.mdx +++ /dev/null @@ -1,32 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'contributing', - title: 'Contributing', - description: 'Want to help?', -} - -## How to contribute - -Supabase has many [open source repos](https://github.com/orgs/supabase/repositories). Some of the more popular ones are: - -- [Supabase](https://github.com/supabase/supabase) - Our Dashboard, Websites, and example apps -- [Supabase-js](https://github.com/supabase/supabase-js) - A client-side library written in TypeScript -- [Gotrue](https://github.com/supabase/gotrue) - Our auth server, written in Go -- [Realtime](https://github.com/supabase/realtime) - A server for streaming changes from Postgres, written in Elixir -- [browse all](https://github.com/orgs/supabase/repositories) - -Want to contribute? Why not jump into our GitHub repo and: - -- [Sponsor Supabase](https://github.com/sponsors/supabase). -- [Answer Discussions](https://github.com/supabase/supabase/discussions). -- Submit an issue to one of our [repos](https://github.com/orgs/supabase/repositories) -- Report a performance issue or a part of the documentation that you find confusing. -- Create a pull request in one of our [repos](https://github.com/orgs/supabase/repositories) -- [Translate our Readme](https://github.com/supabase/supabase/issues/1341). -- Try our products and give feedback. -- Spread the word if you like what we are doing. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/handbook/introduction.mdx b/apps/docs/pages/handbook/introduction.mdx deleted file mode 100644 index f6f2fc2c162..00000000000 --- a/apps/docs/pages/handbook/introduction.mdx +++ /dev/null @@ -1,21 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'introduction', - title: 'Supabase Handbook', - description: 'The Supabase public handbook and manifesto', -} - -Supabase is thinking in public. Everything is online, no matter how raw the current state of things. - -This is our public handbook and manifesto. We are completely opensource and this means that you, our users, are also our team members. - ---- - -## Opensource - -Wherever we can we will support existing opensource tools and libraries. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/reference/analytics/[...slug].tsx b/apps/docs/pages/reference/analytics/[...slug].tsx deleted file mode 100644 index 6ba5e15111c..00000000000 --- a/apps/docs/pages/reference/analytics/[...slug].tsx +++ /dev/null @@ -1,168 +0,0 @@ -import specFile from '~/spec/transforms/analytics_v0_openapi_deparsed.json' assert { type: 'json' } -import { gen_v3, enrichedOperation } from '~/lib/refGenerator/helpers' -import { Tabs, CodeBlock } from 'ui' - -import RefSubLayout from '~/layouts/ref/RefSubLayout' - -export type AcceptedValue = { - id: string - name: string - type: 'string' | 'boolean' | 'object' - description?: string -} - -export type Flag = { - id: string - name: string - description: string - default_value: string - accepted_values: AcceptedValue[] -} - -export type ApiParameter = { - example: string - in: string - name: string - required: boolean - schema: { - type: string - example: string - } -} -// @ts-ignore -const generatedSpec = gen_v3(specFile, 'wat', { apiUrl: 'apiv0' }) - -export default function Config() { - return ( - -
-
-
-

{generatedSpec.info.title}

-

{generatedSpec.info.description}

-
- -
- {generatedSpec.operations.map((operation: any) => ( -
- - -
- - {operation.operation} - {operation.fullPath} - -
- {/* Path Parameters */} - {operation.parameters && - operation.parameters.filter((parameter) => parameter.in === 'path').length > - 0 && ( -
-

Path parameters

-
    - {operation.parameters && - operation.parameters - .filter((parameter: any) => parameter.in === 'path') - .map((parameter: any) => ( -
  • -
    -
    - {parameter.name} -
    - {parameter.required && ( -
    - REQUIRED -
    - )} -
    -
    -

    {parameter.description}

    -
    - {parameter.example && ( -
    - Example: - - {parameter.example} - -
    - )} -
  • - ))} -
-
- )} - - {/* Header Parameters */} - {operation.parameters && - operation.parameters.filter((parameter) => parameter.in === 'header').length > - 0 && ( -
-

Header parameters

-
    - {operation.parameters && - operation.parameters - .filter((parameter: any) => parameter.in === 'header') - .map((parameter: any) => ( -
  • -
    - {parameter.name} - - {parameter.required && 'required'} - -
    -
    - Example: - - {parameter.example} - -
    -
  • - ))} -
-
- )} -
- - {operation.responseList.length > 0 && ( - <> -

Responses

- - {operation.responseList.map((response: any) => ( - -

{response.description}

- {response?.content && response?.content['application/json'] && ( -
- - {JSON.stringify(response.content['application/json'], null, 2)} - -
- )} -
- ))} -
- - )} -
-
-
- ))} -
-
-
-
- ) -} diff --git a/apps/docs/pages/reference/analytics/config.tsx b/apps/docs/pages/reference/analytics/config.tsx deleted file mode 100644 index 4db5c72958f..00000000000 --- a/apps/docs/pages/reference/analytics/config.tsx +++ /dev/null @@ -1,114 +0,0 @@ -import fs from 'fs' -import matter from 'gray-matter' -import components from '~/components/index' -import { MDXRemote } from 'next-mdx-remote' -import { serialize } from 'next-mdx-remote/serialize' - -import specFile from '~/spec/analytics_v0_config.yaml' assert { type: 'yml' } -import { Parameter } from '~/lib/refGenerator/refTypes' - -import ReactMarkdown from 'react-markdown' - -// Parameters are grouped on the page by tag -const TAGS = ['general', 'database'] - -export default function Config(props) { - return ( -
-
-
-

{specFile.info.title} Configuration

- {specFile.info.description} -
-
- {props.docs - .filter((doc) => doc.introPage) - .map((item) => ( - - ))} -
- {TAGS.map((tag) => - specFile.parameters - .filter((param: Parameter) => param.tags[0] === tag) - .map((parameter: Parameter, index) => ( -
- {index === 0 &&

{tag} Settings

} -
-
-

- $ - {parameter.title} -

-
-
-
-

- {parameter.description} -

-
-
- Required: {parameter.required.toString()} -
-
- Default: - - {parameter.default ? parameter.default.toString() : 'None'} - -
-
-
- {parameter.links && - parameter.links.map((link) => ( -
-

See also:

-
  • - {link.name} -
  • -
    - ))} -
    -
    -
    -
    -
    - )) - )} -
    -
    -
    -
    - ) -} -export async function getServerSideProps() { - // an array of ids of the intro sections for this library - const introPages = ['analytics'] - - const pages = [...introPages] - - // Grab custom markdown intro page files - const allMarkdownDocs = await Promise.all( - pages.map(async (x: any, i) => { - const pathName = `docs/ref/analytics/${x}.mdx` - - const markdownExists = fs.existsSync(pathName) - - const fileContents = markdownExists ? fs.readFileSync(pathName, 'utf8') : '' - const { data, content } = matter(fileContents) - - return { - id: x, - title: x, - // ...content, - meta: data, - introPage: introPages.includes(x), - content: content ? await serialize(content || '') : null, - } - }) - ) - - return { - props: { - docs: allMarkdownDocs, - }, - } -} diff --git a/apps/docs/pages/reference/api/[...slug].tsx b/apps/docs/pages/reference/api/[...slug].tsx index 27760ce04d8..d9c72242668 100644 --- a/apps/docs/pages/reference/api/[...slug].tsx +++ b/apps/docs/pages/reference/api/[...slug].tsx @@ -1,18 +1,28 @@ -import apiCommonSections from '~/spec/common-api-sections.json' assert { type: 'json' } -import specFile from '~/spec/transforms/api_v0_openapi_deparsed.json' assert { type: 'json' } +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' import RefSectionHandler from '~/components/reference/RefSectionHandler' import { flattenSections } from '~/lib/helpers' import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' import { gen_v3 } from '~/lib/refGenerator/helpers' +import apiCommonSections from '~/spec/common-api-sections.json' assert { type: 'json' } +import specFile from '~/spec/transforms/api_v0_openapi_deparsed.json' assert { type: 'json' } + // @ts-ignore const generatedSpec = gen_v3(specFile, 'wat', { apiUrl: 'apiv0' }) const sections = flattenSections(apiCommonSections) const libraryPath = '/api' export default function Config(props) { - return + return ( + + ) } export async function getStaticProps() { diff --git a/apps/docs/pages/reference/auth/[...slug].tsx b/apps/docs/pages/reference/auth/[...slug].tsx deleted file mode 100644 index 8664fe97acb..00000000000 --- a/apps/docs/pages/reference/auth/[...slug].tsx +++ /dev/null @@ -1,168 +0,0 @@ -import { CodeBlock, Tabs } from 'ui' -import specFile from '~/spec/transforms/auth_v1_openapi_deparsed.json' assert { type: 'json' } -import { gen_v3 } from '~/lib/refGenerator/helpers' - -import RefSubLayout from '~/layouts/ref/RefSubLayout' - -export type AcceptedValue = { - id: string - name: string - type: 'string' | 'boolean' | 'object' - description?: string -} - -export type Flag = { - id: string - name: string - description: string - default_value: string - accepted_values: AcceptedValue[] -} - -export type ApiParameter = { - example: string - in: string - name: string - required: boolean - schema: { - type: string - example: string - } -} -// @ts-ignore -const generatedSpec = gen_v3(specFile, 'wat', { apiUrl: 'apiv0' }) - -export default function Config() { - return ( - -
    -
    -
    -

    {generatedSpec.info.title}

    -

    {generatedSpec.info.description}

    -
    - -
    - {generatedSpec.operations.map((operation: any) => ( -
    - - -
    - - {operation.operation} - {operation.fullPath} - -
    - {/* Path Parameters */} - {operation.parameters && - operation.parameters.filter((parameter) => parameter.in === 'path').length > - 0 && ( -
    -

    Path parameters

    -
      - {operation.parameters && - operation.parameters - .filter((parameter: any) => parameter.in === 'path') - .map((parameter: any) => ( -
    • -
      -
      - {parameter.name} -
      - {parameter.required && ( -
      - REQUIRED -
      - )} -
      -
      -

      {parameter.description}

      -
      - {parameter.example && ( -
      - Example: - - {parameter.example} - -
      - )} -
    • - ))} -
    -
    - )} - - {/* Header Parameters */} - {operation.parameters && - operation.parameters.filter((parameter) => parameter.in === 'header').length > - 0 && ( -
    -

    Header parameters

    -
      - {operation.parameters && - operation.parameters - .filter((parameter: any) => parameter.in === 'header') - .map((parameter: any) => ( -
    • -
      - {parameter.name} - - {parameter.required && 'required'} - -
      -
      - Example: - - {parameter.example} - -
      -
    • - ))} -
    -
    - )} -
    - - {operation.responseList.length > 0 && ( - <> -

    Responses

    - - {operation.responseList.map((response: any) => ( - -

    {response.description}

    - {response?.content && response?.content['application/json'] && ( -
    - - {JSON.stringify(response.content['application/json'], null, 2)} - -
    - )} -
    - ))} -
    - - )} -
    -
    -
    - ))} -
    -
    -
    -
    - ) -} diff --git a/apps/docs/pages/reference/auth/config.tsx b/apps/docs/pages/reference/auth/config.tsx deleted file mode 100644 index d9c1e5eacbf..00000000000 --- a/apps/docs/pages/reference/auth/config.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import specFile from '~/spec/gotrue_v1_config.yaml' assert { type: 'yml' } -import { Parameter } from '~/lib/refGenerator/refTypes' -import ReactMarkdown from 'react-markdown' -import Head from 'next/head' - -// Parameters are grouped on the page by tag -const TAGS = ['general'] - -export default function Config() { - return ( - <> - - Auth config - -
    -
    -
    -

    {specFile.info.title} Configuration

    - {specFile.info.description} -
    - {TAGS.map((tag) => - specFile.parameters - .filter((param: Parameter) => param.tags[0] === tag) - .map((parameter: Parameter, index) => ( -
    - {index === 0 &&

    {tag}

    } -
    -
    -

    - $ - {parameter.title} -

    -
    -
    -
    -

    - {parameter.description} -

    -
    -
    - Required: {parameter.required.toString()} -
    -
    - Default: - - {parameter.default ? parameter.default.toString() : 'None'} - -
    -
    -
    - {parameter.links && - parameter.links.map((link) => ( -
    -

    See also:

    -
  • - {link.name} -
  • -
    - ))} -
    -
    -
    -
    -
    - )) - )} -
    -
    -
    -
    - - ) -} diff --git a/apps/docs/pages/reference/cli/[...slug].tsx b/apps/docs/pages/reference/cli/[...slug].tsx index 75b9088f7fa..779e04540b6 100644 --- a/apps/docs/pages/reference/cli/[...slug].tsx +++ b/apps/docs/pages/reference/cli/[...slug].tsx @@ -1,17 +1,25 @@ -import spec from '~/spec/cli_v1_commands.yaml' assert { type: 'yml' } - -import { flattenSections } from '~/lib/helpers' - -import cliCommonSections from '~/spec/common-cli-sections.json' assert { type: 'json' } +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' import RefSectionHandler from '~/components/reference/RefSectionHandler' +import { flattenSections } from '~/lib/helpers' import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' +import spec from '~/spec/cli_v1_commands.yaml' assert { type: 'yml' } +import cliCommonSections from '~/spec/common-cli-sections.json' assert { type: 'json' } + const sections = flattenSections(cliCommonSections) const libraryPath = '/cli' export default function CliRef(props) { - return + return ( + + ) } export async function getStaticProps() { diff --git a/apps/docs/pages/reference/csharp/[...slug].tsx b/apps/docs/pages/reference/csharp/[...slug].tsx index 8145e38f7c9..77dba701704 100644 --- a/apps/docs/pages/reference/csharp/[...slug].tsx +++ b/apps/docs/pages/reference/csharp/[...slug].tsx @@ -4,12 +4,21 @@ import RefSectionHandler from '~/components/reference/RefSectionHandler' import { flattenSections } from '~/lib/helpers' import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' const sections = flattenSections(clientLibsCommonSections) const libraryPath = '/csharp' export default function CSharpReference(props) { - return + return ( + + ) } export async function getStaticProps() { diff --git a/apps/docs/pages/reference/csharp/crawlers/[...slug].tsx b/apps/docs/pages/reference/csharp/crawlers/[...slug].tsx index 0d515778deb..aa454e5d162 100644 --- a/apps/docs/pages/reference/csharp/crawlers/[...slug].tsx +++ b/apps/docs/pages/reference/csharp/crawlers/[...slug].tsx @@ -7,6 +7,7 @@ import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' import { useRouter } from 'next/router' import RefSEO from '~/components/reference/RefSEO' +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' const sections = flattenSections(clientLibsCommonSections) const libraryPath = '/csharp' @@ -25,6 +26,7 @@ export default function CSharpReference(props) { + return ( + + ) } export async function getStaticProps() { diff --git a/apps/docs/pages/reference/csharp/v0/crawlers/[...slug].tsx b/apps/docs/pages/reference/csharp/v0/crawlers/[...slug].tsx index 5e20575d173..101c289bddb 100644 --- a/apps/docs/pages/reference/csharp/v0/crawlers/[...slug].tsx +++ b/apps/docs/pages/reference/csharp/v0/crawlers/[...slug].tsx @@ -7,6 +7,7 @@ import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' import { useRouter } from 'next/router' import RefSEO from '~/components/reference/RefSEO' +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' const sections = flattenSections(clientLibsCommonSections) const libraryPath = '/csharp/v0' @@ -24,6 +25,7 @@ export default function JSReference(props) { + return ( + + ) } export async function getStaticProps() { diff --git a/apps/docs/pages/reference/dart/crawlers/[...slug].tsx b/apps/docs/pages/reference/dart/crawlers/[...slug].tsx index faace96a0ba..b18c2eeff9b 100644 --- a/apps/docs/pages/reference/dart/crawlers/[...slug].tsx +++ b/apps/docs/pages/reference/dart/crawlers/[...slug].tsx @@ -7,6 +7,7 @@ import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' import { useRouter } from 'next/router' import RefSEO from '~/components/reference/RefSEO' +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' const sections = flattenSections(clientLibsCommonSections) const libraryPath = '/dart' @@ -25,6 +26,7 @@ export default function DartReference(props) { + return ( + + ) } export async function getStaticProps() { diff --git a/apps/docs/pages/reference/kotlin/crawlers/[...slug].tsx b/apps/docs/pages/reference/kotlin/crawlers/[...slug].tsx index 2a0d1cadc29..2f3885d524b 100644 --- a/apps/docs/pages/reference/kotlin/crawlers/[...slug].tsx +++ b/apps/docs/pages/reference/kotlin/crawlers/[...slug].tsx @@ -7,6 +7,7 @@ import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' import { useRouter } from 'next/router' import RefSEO from '~/components/reference/RefSEO' +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' const sections = flattenSections(clientLibsCommonSections) const libraryPath = '/kotlin' @@ -25,6 +26,7 @@ export default function KotlinReference(props) { + return ( + + ) } export async function getStaticProps() { diff --git a/apps/docs/pages/reference/self-hosting-auth/[...slug].tsx b/apps/docs/pages/reference/self-hosting-auth/[...slug].tsx index 723d11e079b..fbd09b75644 100644 --- a/apps/docs/pages/reference/self-hosting-auth/[...slug].tsx +++ b/apps/docs/pages/reference/self-hosting-auth/[...slug].tsx @@ -1,11 +1,13 @@ -import authSpec from '~/spec/auth_v1_openapi.json' assert { type: 'json' } -import selfHostingAuthCommonSections from '~/spec/common-self-hosting-auth-sections.json' +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' import RefSectionHandler from '~/components/reference/RefSectionHandler' import { flattenSections } from '~/lib/helpers' import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' import { gen_v3 } from '~/lib/refGenerator/helpers' +import authSpec from '~/spec/auth_v1_openapi.json' assert { type: 'json' } +import selfHostingAuthCommonSections from '~/spec/common-self-hosting-auth-sections.json' + const sections = flattenSections(selfHostingAuthCommonSections) const libraryPath = '/self-hosting-auth' @@ -13,7 +15,15 @@ const libraryPath = '/self-hosting-auth' const spec = gen_v3(authSpec, 'wat', { apiUrl: 'apiv0' }) export default function SelfHostAuthReference(props) { - return + return ( + + ) } export async function getStaticProps() { diff --git a/apps/docs/pages/reference/self-hosting-functions/[...slug].tsx b/apps/docs/pages/reference/self-hosting-functions/[...slug].tsx index bbd3f335313..432e1a6cec0 100644 --- a/apps/docs/pages/reference/self-hosting-functions/[...slug].tsx +++ b/apps/docs/pages/reference/self-hosting-functions/[...slug].tsx @@ -1,16 +1,23 @@ -import selfHostingFunctionsCommonSections from '~/spec/common-self-hosting-functions-sections.json' - +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' import RefSectionHandler from '~/components/reference/RefSectionHandler' import { flattenSections } from '~/lib/helpers' import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' -import { gen_v3 } from '~/lib/refGenerator/helpers' + +import selfHostingFunctionsCommonSections from '~/spec/common-self-hosting-functions-sections.json' assert { type: 'json' } const sections = flattenSections(selfHostingFunctionsCommonSections) const libraryPath = '/self-hosting-functions' export default function SelfHostFunctionsReference(props) { - return + return ( + + ) } export async function getStaticProps() { diff --git a/apps/docs/pages/reference/self-hosting-realtime/[...slug].tsx b/apps/docs/pages/reference/self-hosting-realtime/[...slug].tsx index 59c9276e5b7..3b894c15f8b 100644 --- a/apps/docs/pages/reference/self-hosting-realtime/[...slug].tsx +++ b/apps/docs/pages/reference/self-hosting-realtime/[...slug].tsx @@ -1,15 +1,23 @@ -import selfHostingRealtimeCommonSections from '~/spec/common-self-hosting-realtime-sections.json' - +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' import RefSectionHandler from '~/components/reference/RefSectionHandler' import { flattenSections } from '~/lib/helpers' import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' +import selfHostingRealtimeCommonSections from '~/spec/common-self-hosting-realtime-sections.json' assert { type: 'json' } + const sections = flattenSections(selfHostingRealtimeCommonSections) const libraryPath = '/self-hosting-realtime' export default function SelfHostRealtimeReference(props) { - return + return ( + + ) } export async function getStaticProps() { diff --git a/apps/docs/pages/reference/self-hosting-storage/[...slug].tsx b/apps/docs/pages/reference/self-hosting-storage/[...slug].tsx index 1468b40f3a9..13559bdc7dc 100644 --- a/apps/docs/pages/reference/self-hosting-storage/[...slug].tsx +++ b/apps/docs/pages/reference/self-hosting-storage/[...slug].tsx @@ -1,11 +1,13 @@ -import storageSpec from '~/spec/storage_v0_openapi.json' assert { type: 'json' } -import selfHostingStorageCommonSections from '~/spec/common-self-hosting-storage-sections.json' +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' import RefSectionHandler from '~/components/reference/RefSectionHandler' import { flattenSections } from '~/lib/helpers' import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' import { gen_v3 } from '~/lib/refGenerator/helpers' +import storageSpec from '~/spec/storage_v0_openapi.json' assert { type: 'json' } +import selfHostingStorageCommonSections from '~/spec/common-self-hosting-storage-sections.json' assert { type: 'json' } + const sections = flattenSections(selfHostingStorageCommonSections) const libraryPath = '/self-hosting-storage' @@ -13,7 +15,15 @@ const libraryPath = '/self-hosting-storage' const spec = gen_v3(storageSpec, 'wat', { apiUrl: 'apiv0' }) export default function SelfHostStorageReference(props) { - return + return ( + + ) } export async function getStaticProps() { diff --git a/apps/docs/pages/reference/swift/[...slug].tsx b/apps/docs/pages/reference/swift/[...slug].tsx index 6c84806c676..c459f833e11 100644 --- a/apps/docs/pages/reference/swift/[...slug].tsx +++ b/apps/docs/pages/reference/swift/[...slug].tsx @@ -4,12 +4,21 @@ import RefSectionHandler from '~/components/reference/RefSectionHandler' import { flattenSections } from '~/lib/helpers' import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' const sections = flattenSections(clientLibsCommonSections) const libraryPath = '/swift' export default function SwiftReference(props) { - return + return ( + + ) } export async function getStaticProps() { diff --git a/apps/docs/pages/reference/swift/crawlers/[...slug].tsx b/apps/docs/pages/reference/swift/crawlers/[...slug].tsx index d8e3be4f79c..69000ea9674 100644 --- a/apps/docs/pages/reference/swift/crawlers/[...slug].tsx +++ b/apps/docs/pages/reference/swift/crawlers/[...slug].tsx @@ -7,6 +7,7 @@ import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' import { useRouter } from 'next/router' import RefSEO from '~/components/reference/RefSEO' +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' const sections = flattenSections(clientLibsCommonSections) const libraryPath = '/swift' @@ -25,6 +26,7 @@ export default function SwiftReference(props) { + return ( + + ) } export async function getStaticProps() { diff --git a/apps/docs/pages/reference/swift/v0/crawlers/[...slug].tsx b/apps/docs/pages/reference/swift/v1/crawlers/[...slug].tsx similarity index 92% rename from apps/docs/pages/reference/swift/v0/crawlers/[...slug].tsx rename to apps/docs/pages/reference/swift/v1/crawlers/[...slug].tsx index 6c19debf234..1ef50177ac2 100644 --- a/apps/docs/pages/reference/swift/v0/crawlers/[...slug].tsx +++ b/apps/docs/pages/reference/swift/v1/crawlers/[...slug].tsx @@ -7,6 +7,7 @@ import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' import { useRouter } from 'next/router' import RefSEO from '~/components/reference/RefSEO' +import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' const sections = flattenSections(clientLibsCommonSections) const libraryPath = '/swift/v2' @@ -24,6 +25,7 @@ export default function SwiftReference(props) {