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() { ))} -
+ + + ) } 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 ( +