1+ import {
2+ OpenIn ,
3+ OpenInChatGPT ,
4+ OpenInClaude ,
5+ OpenInContent ,
6+ OpenInCursor ,
7+ OpenInScira ,
8+ OpenInSeparator ,
9+ OpenInT3 ,
10+ OpenInTrigger ,
11+ OpenInv0 ,
12+ } from "@repo/elements/open-in-chat" ;
13+ import { Button } from "@repo/shadcn-ui/components/ui/button" ;
114import { createRelativeLink } from "fumadocs-ui/mdx" ;
215import {
316 DocsBody ,
417 DocsDescription ,
518 DocsPage ,
619 DocsTitle ,
720} from "fumadocs-ui/page" ;
21+ import { ChevronDownIcon } from "lucide-react" ;
822import type { Metadata } from "next" ;
923import { notFound } from "next/navigation" ;
10- import { LLMCopyButton , ViewOptions } from "@/components/page-actions " ;
24+ import { CopyMarkdown } from "@/components/copy-markdown " ;
1125import { source } from "@/lib/source" ;
1226import { getMDXComponents } from "@/mdx-components" ;
1327
@@ -22,6 +36,12 @@ export default async function Page(props: PageProps<"/[[...slug]]">) {
2236 const MDXContent = page . data . body ;
2337 const parsedUrl = page . url === "/" ? "/index" : page . url ;
2438 const markdownUrl = `/elements${ parsedUrl } .mdx` ;
39+ const protocol = process . env . NODE_ENV === "production" ? "https" : "http" ;
40+ const fullMarkdownUrl = new URL (
41+ markdownUrl ,
42+ `${ protocol } ://${ process . env . VERCEL_PROJECT_PRODUCTION_URL } `
43+ ) ;
44+ const query = `Read ${ fullMarkdownUrl } , I want to ask questions about it.` ;
2545
2646 return (
2747 < DocsPage
@@ -37,11 +57,30 @@ export default async function Page(props: PageProps<"/[[...slug]]">) {
3757 < DocsTitle > { page . data . title } </ DocsTitle >
3858 < DocsDescription > { page . data . description } </ DocsDescription >
3959 < div className = "-mt-8 mb-8 flex flex-row items-center gap-2" >
40- < LLMCopyButton markdownUrl = { markdownUrl } />
41- < ViewOptions
42- githubUrl = { `https://github.com/vercel/ai-elements/blob/main/apps/docs/content/docs/${ page . path } ` }
43- markdownUrl = { markdownUrl }
44- />
60+ < CopyMarkdown markdownUrl = { markdownUrl } />
61+ < OpenIn query = { query } >
62+ < OpenInTrigger >
63+ < Button size = "sm" type = "button" variant = "outline" >
64+ Open in
65+ < ChevronDownIcon className = "size-4" />
66+ </ Button >
67+ </ OpenInTrigger >
68+ < OpenInContent
69+ align = "end"
70+ alignOffset = { - 36 }
71+ collisionPadding = { 8 }
72+ side = "bottom"
73+ sideOffset = { 8 }
74+ >
75+ < OpenInv0 />
76+ < OpenInSeparator />
77+ < OpenInChatGPT />
78+ < OpenInClaude />
79+ < OpenInT3 />
80+ < OpenInScira />
81+ < OpenInCursor />
82+ </ OpenInContent >
83+ </ OpenIn >
4584 </ div >
4685 < DocsBody >
4786 < MDXContent
@@ -57,9 +96,9 @@ export default async function Page(props: PageProps<"/[[...slug]]">) {
5796
5897export const generateStaticParams = ( ) => source . generateParams ( ) ;
5998
60- export async function generateMetadata (
99+ export const generateMetadata = async (
61100 props : PageProps < "/[[...slug]]" >
62- ) : Promise < Metadata > {
101+ ) : Promise < Metadata > => {
63102 const params = await props . params ;
64103 const page = source . getPage ( params . slug ) ;
65104
@@ -102,4 +141,4 @@ export async function generateMetadata(
102141 creator : "@vercel" ,
103142 } ,
104143 } ;
105- }
144+ } ;
0 commit comments