diff --git a/packages/docs-new/src/components/main-navigation.client.tsx b/packages/docs-new/src/components/main-navigation.client.tsx
new file mode 100644
index 0000000..be42d13
--- /dev/null
+++ b/packages/docs-new/src/components/main-navigation.client.tsx
@@ -0,0 +1,21 @@
+import * as React from "react"
+import { createRoot } from "react-dom"
+import { mainLinks } from "../data/main-links"
+import { AppLink } from "./app-link"
+import type { MainNavigationClientData } from "./main-navigation"
+import { PopoverMenu } from "./popover-menu"
+
+const dataScript = document.querySelector("#main-navigation-popover-data")!
+const data: MainNavigationClientData = JSON.parse(dataScript.innerHTML)
+
+createRoot(document.querySelector("#main-navigation-popover")!).render(
+
+ {mainLinks.map((link) => (
+
+ ))}
+
+ {data.guideLinks.map((link) => (
+
+ ))}
+ ,
+)
diff --git a/packages/docs-new/src/components/main-navigation.tsx b/packages/docs-new/src/components/main-navigation.tsx
index 5168a55..6672154 100644
--- a/packages/docs-new/src/components/main-navigation.tsx
+++ b/packages/docs-new/src/components/main-navigation.tsx
@@ -1,9 +1,38 @@
+import { build } from "esbuild"
+import { readFile } from "node:fs/promises"
+import { dirname } from "node:path"
import React from "react"
import { guideLinks } from "../data/guide-links"
import { mainLinks } from "../data/main-links"
import { linkClass } from "../styles/components"
+import type { AppLinkProps } from "./app-link"
import { AppLink } from "./app-link"
import { PopoverMenu } from "./popover-menu"
+import { Script } from "./script"
+
+const clientSourcePath = new URL(
+ "./main-navigation.client.tsx",
+ import.meta.url,
+).pathname
+
+const clientOutput = await build({
+ bundle: true,
+ stdin: {
+ contents: await readFile(clientSourcePath, "utf-8"),
+ sourcefile: clientSourcePath,
+ loader: "tsx",
+ resolveDir: dirname(clientSourcePath),
+ },
+ target: ["chrome89", "firefox89"],
+ format: "esm",
+ write: false,
+})
+
+export type MainNavigationClientData = {
+ guideLinks: AppLinkProps[]
+}
+
+const data: MainNavigationClientData = { guideLinks }
export function MainNavigation() {
return (
@@ -16,7 +45,7 @@ export function MainNavigation() {
))}
-
+
{mainLinks.map((link) => (
))}
- {guideLinks.map((link) => (
+ {data.guideLinks.map((link) => (
+
+
)
}
diff --git a/packages/docs-new/src/components/script.tsx b/packages/docs-new/src/components/script.tsx
new file mode 100644
index 0000000..dfc647c
--- /dev/null
+++ b/packages/docs-new/src/components/script.tsx
@@ -0,0 +1,16 @@
+import type { ComponentPropsWithoutRef } from "react"
+import React from "react"
+import type { Merge } from "type-fest"
+
+export function Script({
+ children,
+ ...props
+}: Merge
, { children: string }>) {
+ return (
+
+ )
+}
diff --git a/packages/docs-new/src/react.d.ts b/packages/docs-new/src/react.d.ts
new file mode 100644
index 0000000..4ad75aa
--- /dev/null
+++ b/packages/docs-new/src/react.d.ts
@@ -0,0 +1,10 @@
+import "react"
+declare module "react" {
+ export function createContext(): Context
+}
+
+declare module "react-dom" {
+ export function createRoot(element: Element): {
+ render(element: React.ReactNode): void
+ }
+}