specra 0.1.13 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.MD +25 -4
- package/README.md +67 -58
- package/config/specra.config.schema.json +16 -0
- package/config/svelte-config.js +63 -0
- package/dist/api-parser.types.d.ts +59 -0
- package/dist/api-parser.types.js +5 -0
- package/dist/api.types.d.ts +137 -0
- package/dist/api.types.js +5 -0
- package/dist/category.d.ts +21 -0
- package/dist/category.js +48 -0
- package/dist/components/ConfigProvider.svelte +13 -0
- package/dist/components/ConfigProvider.svelte.d.ts +31 -0
- package/dist/components/docs/Accordion.svelte +18 -0
- package/dist/components/docs/Accordion.svelte.d.ts +10 -0
- package/dist/components/docs/AccordionItem.svelte +41 -0
- package/dist/components/docs/AccordionItem.svelte.d.ts +10 -0
- package/dist/components/docs/Badge.svelte +28 -0
- package/dist/components/docs/Badge.svelte.d.ts +9 -0
- package/dist/components/docs/Breadcrumb.svelte +80 -0
- package/dist/components/docs/Breadcrumb.svelte.d.ts +8 -0
- package/dist/components/docs/Callout.svelte +96 -0
- package/dist/components/docs/Callout.svelte.d.ts +10 -0
- package/dist/components/docs/Card.svelte +63 -0
- package/dist/components/docs/Card.svelte.d.ts +12 -0
- package/dist/components/docs/CardGrid.svelte +24 -0
- package/dist/components/docs/CardGrid.svelte.d.ts +8 -0
- package/dist/components/docs/CategoryIndex.svelte +110 -0
- package/dist/components/docs/CategoryIndex.svelte.d.ts +29 -0
- package/dist/components/docs/CodeBlock.svelte +172 -0
- package/dist/components/docs/CodeBlock.svelte.d.ts +8 -0
- package/dist/components/docs/Column.svelte +25 -0
- package/dist/components/docs/Column.svelte.d.ts +8 -0
- package/dist/components/docs/Columns.svelte +38 -0
- package/dist/components/docs/Columns.svelte.d.ts +13 -0
- package/dist/components/docs/DevModeBadge.svelte +15 -0
- package/dist/components/docs/DevModeBadge.svelte.d.ts +18 -0
- package/dist/components/docs/DocBadge.svelte +28 -0
- package/dist/components/docs/DocBadge.svelte.d.ts +9 -0
- package/dist/components/docs/DocLayout.svelte +107 -0
- package/dist/components/docs/DocLayout.svelte.d.ts +32 -0
- package/dist/components/docs/DocLoading.svelte +53 -0
- package/dist/components/docs/DocLoading.svelte.d.ts +18 -0
- package/dist/components/docs/DocMetadata.svelte +106 -0
- package/dist/components/docs/DocMetadata.svelte.d.ts +18 -0
- package/dist/components/docs/DocNavigation.svelte +56 -0
- package/dist/components/docs/DocNavigation.svelte.d.ts +12 -0
- package/dist/components/docs/DocTags.svelte +22 -0
- package/dist/components/docs/DocTags.svelte.d.ts +6 -0
- package/dist/components/docs/DraftBadge.svelte +10 -0
- package/dist/components/docs/DraftBadge.svelte.d.ts +18 -0
- package/dist/components/docs/Footer.svelte +72 -0
- package/dist/components/docs/Footer.svelte.d.ts +7 -0
- package/dist/components/docs/Frame.svelte +27 -0
- package/dist/components/docs/Frame.svelte.d.ts +9 -0
- package/dist/components/docs/Header.svelte +123 -0
- package/dist/components/docs/Header.svelte.d.ts +9 -0
- package/dist/components/docs/HeaderWithMenu.svelte +34 -0
- package/dist/components/docs/HeaderWithMenu.svelte.d.ts +17 -0
- package/dist/components/docs/HotReloadIndicator.svelte +44 -0
- package/dist/components/docs/HotReloadIndicator.svelte.d.ts +3 -0
- package/dist/components/docs/Icon.svelte +103 -0
- package/dist/components/docs/Icon.svelte.d.ts +11 -0
- package/dist/components/docs/Image.svelte +88 -0
- package/dist/components/docs/Image.svelte.d.ts +11 -0
- package/dist/components/docs/ImageCard.svelte +91 -0
- package/dist/components/docs/ImageCard.svelte.d.ts +12 -0
- package/dist/components/docs/ImageCardGrid.svelte +25 -0
- package/dist/components/docs/ImageCardGrid.svelte.d.ts +8 -0
- package/dist/components/docs/LayoutProviders.svelte +57 -0
- package/dist/components/docs/LayoutProviders.svelte.d.ts +9 -0
- package/dist/components/docs/Logo.svelte +25 -0
- package/dist/components/docs/Logo.svelte.d.ts +11 -0
- package/dist/components/docs/Math.svelte +54 -0
- package/dist/components/docs/Math.svelte.d.ts +7 -0
- package/dist/components/docs/MdxContent.svelte +41 -0
- package/dist/components/docs/MdxHotReload.svelte +78 -0
- package/dist/components/docs/MdxHotReload.svelte.d.ts +9 -0
- package/dist/components/docs/MdxLayout.svelte +16 -0
- package/dist/components/docs/MdxLayout.svelte.d.ts +6 -0
- package/dist/components/docs/Mermaid.svelte +88 -0
- package/dist/components/docs/Mermaid.svelte.d.ts +7 -0
- package/dist/components/docs/MobileDocLayout.svelte +211 -0
- package/dist/components/docs/MobileDocLayout.svelte.d.ts +35 -0
- package/dist/components/docs/MobileSidebar.svelte +122 -0
- package/dist/components/docs/MobileSidebar.svelte.d.ts +31 -0
- package/dist/components/docs/MobileSidebarWrapper.svelte +122 -0
- package/dist/components/docs/MobileSidebarWrapper.svelte.d.ts +32 -0
- package/dist/components/docs/NotFoundContent.svelte +40 -0
- package/dist/components/docs/NotFoundContent.svelte.d.ts +6 -0
- package/dist/components/docs/SearchHighlight.svelte +116 -0
- package/dist/components/docs/SearchHighlight.svelte.d.ts +3 -0
- package/dist/components/docs/SearchModal.svelte +239 -0
- package/dist/components/docs/SearchModal.svelte.d.ts +9 -0
- package/dist/components/docs/Sidebar.svelte +69 -0
- package/dist/components/docs/Sidebar.svelte.d.ts +31 -0
- package/dist/components/docs/SidebarMenuItems.svelte +344 -0
- package/dist/components/docs/SidebarMenuItems.svelte.d.ts +33 -0
- package/dist/components/docs/SidebarSkeleton.svelte +50 -0
- package/dist/components/docs/SidebarSkeleton.svelte.d.ts +18 -0
- package/dist/components/docs/SiteBanner.svelte +92 -0
- package/dist/components/docs/SiteBanner.svelte.d.ts +7 -0
- package/dist/components/docs/Step.svelte +44 -0
- package/dist/components/docs/Step.svelte.d.ts +8 -0
- package/dist/components/docs/Steps.svelte +15 -0
- package/dist/components/docs/Steps.svelte.d.ts +7 -0
- package/dist/components/docs/Tab.svelte +40 -0
- package/dist/components/docs/Tab.svelte.d.ts +8 -0
- package/dist/components/docs/TabGroups.svelte +183 -0
- package/dist/components/docs/TabGroups.svelte.d.ts +25 -0
- package/dist/components/docs/TableOfContents.svelte +100 -0
- package/dist/components/docs/TableOfContents.svelte.d.ts +9 -0
- package/dist/components/docs/Tabs.svelte +69 -0
- package/dist/components/docs/Tabs.svelte.d.ts +8 -0
- package/dist/components/docs/ThemeToggle.svelte +16 -0
- package/dist/components/docs/ThemeToggle.svelte.d.ts +18 -0
- package/dist/components/docs/Tooltip.svelte +44 -0
- package/dist/components/docs/Tooltip.svelte.d.ts +10 -0
- package/dist/components/docs/VersionSwitcher.svelte +95 -0
- package/dist/components/docs/VersionSwitcher.svelte.d.ts +7 -0
- package/dist/components/docs/Video.svelte +84 -0
- package/dist/components/docs/Video.svelte.d.ts +12 -0
- package/dist/components/docs/api/ApiEndpoint.svelte +61 -0
- package/dist/components/docs/api/ApiEndpoint.svelte.d.ts +11 -0
- package/dist/components/docs/api/ApiParams.svelte +80 -0
- package/dist/components/docs/api/ApiParams.svelte.d.ts +14 -0
- package/dist/components/docs/api/ApiPlayground.svelte +259 -0
- package/dist/components/docs/api/ApiPlayground.svelte.d.ts +16 -0
- package/dist/components/docs/api/ApiReference.svelte +278 -0
- package/dist/components/docs/api/ApiReference.svelte.d.ts +23 -0
- package/dist/components/docs/api/ApiResponse.svelte +66 -0
- package/dist/components/docs/api/ApiResponse.svelte.d.ts +9 -0
- package/dist/components/docs/api/index.d.ts +5 -0
- package/dist/components/docs/api/index.js +5 -0
- package/dist/components/docs/componentTextProps.d.ts +3 -0
- package/dist/components/docs/componentTextProps.js +61 -0
- package/dist/components/docs/index.d.ts +54 -0
- package/dist/components/docs/index.js +56 -0
- package/dist/components/global/VersionNotFound.svelte +48 -0
- package/dist/components/global/VersionNotFound.svelte.d.ts +7 -0
- package/dist/components/global/index.d.ts +1 -0
- package/dist/components/global/index.js +1 -0
- package/dist/components/index.d.ts +6 -822
- package/dist/components/index.js +11 -3854
- package/dist/components/ui/Badge.svelte +48 -0
- package/dist/components/ui/Badge.svelte.d.ts +15 -0
- package/dist/components/ui/Button.svelte +58 -0
- package/dist/components/ui/Button.svelte.d.ts +17 -0
- package/dist/components/ui/Dialog.svelte +16 -0
- package/dist/components/ui/Dialog.svelte.d.ts +9 -0
- package/dist/components/ui/DialogClose.svelte +16 -0
- package/dist/components/ui/DialogClose.svelte.d.ts +9 -0
- package/dist/components/ui/DialogContent.svelte +43 -0
- package/dist/components/ui/DialogContent.svelte.d.ts +10 -0
- package/dist/components/ui/DialogDescription.svelte +21 -0
- package/dist/components/ui/DialogDescription.svelte.d.ts +9 -0
- package/dist/components/ui/DialogFooter.svelte +20 -0
- package/dist/components/ui/DialogFooter.svelte.d.ts +9 -0
- package/dist/components/ui/DialogHeader.svelte +20 -0
- package/dist/components/ui/DialogHeader.svelte.d.ts +9 -0
- package/dist/components/ui/DialogTitle.svelte +21 -0
- package/dist/components/ui/DialogTitle.svelte.d.ts +9 -0
- package/dist/components/ui/Input.svelte +23 -0
- package/dist/components/ui/Input.svelte.d.ts +8 -0
- package/dist/components/ui/Textarea.svelte +19 -0
- package/dist/components/ui/Textarea.svelte.d.ts +7 -0
- package/dist/components/ui/index.d.ts +11 -0
- package/dist/components/ui/index.js +11 -0
- package/dist/config.d.ts +8 -0
- package/dist/config.js +9 -0
- package/dist/config.schema.json +471 -0
- package/dist/config.server.d.ts +46 -0
- package/dist/config.server.js +149 -0
- package/dist/{mdx-ColN3Cyg.d.mts → config.types.d.ts} +22 -75
- package/dist/config.types.js +39 -0
- package/dist/dev-utils.d.ts +29 -0
- package/dist/dev-utils.js +63 -0
- package/dist/index.d.ts +19 -4
- package/dist/index.js +25 -4861
- package/dist/mdx-cache.d.ts +41 -0
- package/dist/mdx-cache.js +160 -0
- package/dist/mdx-components.js +50 -1931
- package/dist/mdx-security.d.ts +76 -0
- package/dist/mdx-security.js +217 -0
- package/dist/mdx.d.ts +73 -0
- package/dist/mdx.js +1099 -0
- package/dist/middleware/index.d.ts +1 -0
- package/dist/middleware/index.js +2 -0
- package/dist/middleware/security.d.ts +22 -47
- package/dist/middleware/security.js +111 -137
- package/dist/parsers/base-parser.d.ts +14 -0
- package/dist/parsers/base-parser.js +1 -0
- package/dist/parsers/index.d.ts +16 -0
- package/dist/parsers/index.js +51 -0
- package/dist/parsers/openapi-parser.d.ts +18 -0
- package/dist/parsers/openapi-parser.js +209 -0
- package/dist/parsers/postman-parser.d.ts +20 -0
- package/dist/parsers/postman-parser.js +260 -0
- package/dist/parsers/specra-parser.d.ts +10 -0
- package/dist/parsers/specra-parser.js +18 -0
- package/dist/redirects.d.ts +12 -0
- package/dist/redirects.js +30 -0
- package/dist/remark-code-meta.d.ts +6 -0
- package/dist/remark-code-meta.js +21 -0
- package/dist/sidebar-utils.d.ts +59 -0
- package/dist/sidebar-utils.js +144 -0
- package/dist/stores/config.d.ts +20 -0
- package/dist/stores/config.js +45 -0
- package/dist/stores/index.d.ts +4 -0
- package/dist/stores/index.js +4 -0
- package/dist/stores/sidebar.d.ts +7 -0
- package/dist/stores/sidebar.js +12 -0
- package/dist/stores/tabs.d.ts +6 -0
- package/dist/stores/tabs.js +41 -0
- package/dist/stores/theme.d.ts +7 -0
- package/dist/stores/theme.js +75 -0
- package/dist/{styles.css → styles/globals.css} +136 -6
- package/dist/toc.d.ts +9 -0
- package/dist/toc.js +15 -0
- package/dist/utils.d.ts +13 -0
- package/dist/utils.js +30 -0
- package/package.json +47 -90
- package/dist/app/api/mdx-watch/route.d.mts +0 -10
- package/dist/app/api/mdx-watch/route.d.ts +0 -10
- package/dist/app/api/mdx-watch/route.js +0 -118
- package/dist/app/api/mdx-watch/route.js.map +0 -1
- package/dist/app/api/mdx-watch/route.mjs +0 -91
- package/dist/app/api/mdx-watch/route.mjs.map +0 -1
- package/dist/chunk-6S3EJVEO.mjs +0 -259
- package/dist/chunk-6S3EJVEO.mjs.map +0 -1
- package/dist/chunk-BE7EROIW.mjs +0 -212
- package/dist/chunk-BE7EROIW.mjs.map +0 -1
- package/dist/chunk-CWHRZHZO.mjs +0 -168
- package/dist/chunk-CWHRZHZO.mjs.map +0 -1
- package/dist/chunk-D5VDVYFY.mjs +0 -1325
- package/dist/chunk-D5VDVYFY.mjs.map +0 -1
- package/dist/chunk-WMCO2UX5.mjs +0 -585
- package/dist/chunk-WMCO2UX5.mjs.map +0 -1
- package/dist/chunk-XEMGCPZZ.mjs +0 -475
- package/dist/chunk-XEMGCPZZ.mjs.map +0 -1
- package/dist/components/index.d.mts +0 -822
- package/dist/components/index.js.map +0 -1
- package/dist/components/index.mjs +0 -3741
- package/dist/components/index.mjs.map +0 -1
- package/dist/index.d.mts +0 -4
- package/dist/index.js.map +0 -1
- package/dist/index.mjs +0 -1897
- package/dist/index.mjs.map +0 -1
- package/dist/layouts/index.d.mts +0 -34
- package/dist/layouts/index.d.ts +0 -34
- package/dist/layouts/index.js +0 -453
- package/dist/layouts/index.js.map +0 -1
- package/dist/layouts/index.mjs +0 -173
- package/dist/layouts/index.mjs.map +0 -1
- package/dist/lib/index.d.mts +0 -583
- package/dist/lib/index.d.ts +0 -583
- package/dist/lib/index.js +0 -1595
- package/dist/lib/index.js.map +0 -1
- package/dist/lib/index.mjs +0 -111
- package/dist/lib/index.mjs.map +0 -1
- package/dist/mdx-ColN3Cyg.d.ts +0 -352
- package/dist/mdx-components.d.mts +0 -86
- package/dist/mdx-components.d.ts +0 -86
- package/dist/mdx-components.js.map +0 -1
- package/dist/mdx-components.mjs +0 -206
- package/dist/mdx-components.mjs.map +0 -1
- package/dist/middleware/security.d.mts +0 -82
- package/dist/middleware/security.js.map +0 -1
- package/dist/middleware/security.mjs +0 -84
- package/dist/middleware/security.mjs.map +0 -1
- package/dist/styles.css.map +0 -1
- package/dist/styles.d.mts +0 -2
- package/dist/styles.d.ts +0 -2
- package/dist/styles.js +0 -2
- package/dist/styles.js.map +0 -1
- package/dist/styles.mjs +0 -1
- package/dist/styles.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/docs/accordion.tsx","../src/components/docs/badge.tsx","../src/components/docs/callout.tsx","../src/components/docs/icon.tsx","../src/components/docs/card.tsx","../src/components/docs/code-block.tsx","../src/components/docs/columns.tsx","../src/components/docs/frame.tsx","../src/components/docs/image-card.tsx","../src/components/docs/image.tsx","../src/components/docs/math.tsx","../src/components/docs/mermaid.tsx","../src/components/docs/steps.tsx","../src/components/docs/tabs.tsx","../src/components/docs/tooltip.tsx","../src/components/docs/video.tsx","../src/components/docs/api/api-endpoint.tsx","../src/components/docs/api/api-params.tsx","../src/components/docs/api/api-response.tsx","../src/components/ui/button.tsx","../src/components/ui/input.tsx","../src/components/ui/textarea.tsx","../src/components/ui/badge.tsx","../src/components/docs/api/api-playground.tsx","../src/components/docs/api/api-reference.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { ChevronDown } from \"lucide-react\"\n\nexport interface AccordionItemProps {\n title: string | React.ReactNode\n children: React.ReactNode\n defaultOpen?: boolean\n value?: string // For compatibility with radix-ui style API\n}\n\nexport function AccordionItem({ title, children, defaultOpen = false }: AccordionItemProps) {\n const [isOpen, setIsOpen] = React.useState(defaultOpen)\n\n return (\n <div className=\"border border-border rounded-xl overflow-hidden mb-2\">\n <button\n onClick={() => setIsOpen(!isOpen)}\n className=\"w-full flex items-center justify-between p-4 text-left bg-muted/30 hover:bg-muted/50 transition-colors\"\n >\n <span className=\"font-medium text-foreground\">{title}</span>\n <ChevronDown\n className={`h-5 w-5 text-muted-foreground transition-transform ${\n isOpen ? \"rotate-180\" : \"\"\n }`}\n />\n </button>\n {isOpen && (\n <div className=\"p-4 border-t border-border bg-background\">\n <div className=\"prose prose-sm dark:prose-invert max-w-none [&>*:last-child]:mb-0\">\n {children}\n </div>\n </div>\n )}\n </div>\n )\n}\n\nexport interface AccordionProps {\n children: React.ReactNode\n type?: \"single\" | \"multiple\"\n collapsible?: boolean // For compatibility with radix-ui style API\n className?: string\n}\n\nexport function Accordion({ children, type = \"multiple\", className }: AccordionProps) {\n return (\n <div className={className || \"my-6 space-y-2\"}>\n {children}\n </div>\n )\n}\n","interface BadgeProps {\n children: React.ReactNode\n variant?: \"default\" | \"success\" | \"warning\" | \"error\" | \"info\"\n}\n\nexport function Badge({ children, variant = \"default\" }: BadgeProps) {\n const variants = {\n default: \"bg-muted text-foreground border-border\",\n success: \"bg-green-500/10 text-green-600 dark:text-green-400 border-green-500/20\",\n warning: \"bg-yellow-500/10 text-yellow-600 dark:text-yellow-400 border-yellow-500/20\",\n error: \"bg-red-500/10 text-red-600 dark:text-red-400 border-red-500/20\",\n info: \"bg-blue-500/10 text-blue-600 dark:text-blue-400 border-blue-500/20\",\n }\n\n return (\n <span\n className={`inline-flex items-center px-2 py-0.5 rounded-md text-xs font-medium border ${variants[variant]}`}\n >\n {children}\n </span>\n )\n}\n","import type { ReactNode } from \"react\"\nimport { cloneElement, isValidElement } from \"react\"\nimport { Info, AlertTriangle, CheckCircle2, XCircle, Lightbulb } from \"lucide-react\"\n\ninterface CalloutProps {\n children: ReactNode\n type?: \"info\" | \"warning\" | \"success\" | \"error\" | \"tip\" | \"note\" | \"danger\"\n title?: string\n}\n\nexport function Callout({ children, type = \"info\", title }: CalloutProps) {\n const configs = {\n info: {\n icon: Info,\n className: \"bg-blue-500/10 border-blue-500/30 text-blue-900 dark:bg-blue-400/5 dark:border-blue-500/20 dark:text-blue-400\",\n iconClassName: \"text-blue-600 dark:text-blue-400\",\n titleClassName: \"text-blue-700 dark:text-blue-300\",\n defaultTitle: \"Info\",\n },\n note: {\n icon: Info,\n className: \"bg-blue-500/10 border-blue-500/30 text-blue-900 dark:bg-blue-400/5 dark:border-blue-500/20 dark:text-blue-400\",\n iconClassName: \"text-blue-600 dark:text-blue-400\",\n titleClassName: \"text-blue-700 dark:text-blue-300\",\n defaultTitle: \"Note\",\n },\n warning: {\n icon: AlertTriangle,\n className: \"bg-yellow-500/10 border-yellow-500/30 text-yellow-900 dark:bg-yellow-400/5 dark:border-yellow-500/20 dark:text-yellow-400\",\n iconClassName: \"text-yellow-600 dark:text-yellow-400\",\n titleClassName: \"text-yellow-700 dark:text-yellow-300\",\n defaultTitle: \"Warning\",\n },\n success: {\n icon: CheckCircle2,\n className: \"bg-green-500/10 border-green-500/30 text-green-900 dark:bg-green-400/5 dark:border-green-500/20 dark:text-green-400\",\n iconClassName: \"text-green-600 dark:text-green-400\",\n titleClassName: \"text-green-700 dark:text-green-300\",\n defaultTitle: \"Success\",\n },\n error: {\n icon: XCircle,\n className: \"bg-red-500/10 border-red-500/30 text-red-900 dark:bg-red-400/5 dark:border-red-500/20 dark:text-red-400\",\n iconClassName: \"text-red-600 dark:text-red-400\",\n titleClassName: \"text-red-700 dark:text-red-300\",\n defaultTitle: \"Error\",\n },\n danger: {\n icon: XCircle,\n className: \"bg-red-500/10 border-red-500/30 text-red-900 dark:bg-red-400/5 dark:border-red-500/20 dark:text-red-400\",\n iconClassName: \"text-red-600 dark:text-red-400\",\n titleClassName: \"text-red-700 dark:text-red-300\",\n defaultTitle: \"Danger\",\n }, \n tip: {\n icon: Lightbulb,\n className: \"bg-purple-500/10 border-purple-500/30 text-purple-900 dark:bg-purple-400/5 dark:border-purple-500/20 dark:text-purple-400\",\n iconClassName: \"text-purple-600 dark:text-purple-400\",\n titleClassName: \"text-purple-700 dark:text-purple-300\",\n defaultTitle: \"Tip\",\n },\n }\n\n const config = configs[type]\n const Icon = config.icon\n\n // Extract title from strong/bold text if present, but ONLY if no explicit title prop was provided\n let _title = title || config.defaultTitle\n let content = children\n\n if (!title && children && typeof children === \"object\") {\n const childArray = Array.isArray(children) ? children : [children]\n const firstElement = childArray[0]\n\n // Check if first child is a paragraph with a strong element\n if (firstElement && typeof firstElement === \"object\" && \"props\" in firstElement) {\n const props = (firstElement as any).props\n if (props.children && Array.isArray(props.children)) {\n const strongChild = props.children.find(\n (child: any) => child && typeof child === \"object\" && child.type === \"strong\",\n )\n if (strongChild) {\n _title = strongChild.props.children\n // Remove the title from content\n content = childArray.map((child, idx) => {\n if (idx === 0 && isValidElement(child)) {\n const newChildren = (child.props as any).children.filter((c: any) => c !== strongChild)\n const childProps = child.props as Record<string, any>\n return cloneElement(child, { ...childProps, children: newChildren } as any)\n }\n return child\n })\n }\n }\n }\n }\n\n return (\n <div className={`flex gap-3 p-4 rounded-xl border my-2 ${config.className}`}>\n <div className=\"flex-shrink-0 mt-0.5\">\n <Icon className={`h-5 w-5 ${config.iconClassName}`} />\n </div>\n <div className=\"flex-1 space-y-0\">\n <div className={`font-semibold text-sm ${config.titleClassName}`}>{_title}</div>\n <div className=\"text-sm leading-relaxed [&>p]:mb-0 [&>p]:text-current\">{content}</div>\n </div>\n </div>\n )\n}\n","\"use client\"\n\nimport * as LucideIcons from \"lucide-react\"\n\nexport interface IconProps {\n icon: string | React.ReactNode\n iconType?: \"regular\" | \"solid\" | \"light\" | \"thin\" | \"sharp-solid\" | \"duotone\" | \"brands\"\n color?: string\n size?: number\n className?: string\n}\n\nexport function Icon({ icon, iconType = \"regular\", color, size = 20, className = \"\" }: IconProps) {\n // If icon is a React node (custom SVG), render it directly\n if (typeof icon !== \"string\") {\n return <span className={`inline-flex items-center ${className}`} style={{ color }}>{icon}</span>\n }\n\n // Check if it's a URL (external or local file)\n if (icon.startsWith(\"http\") || icon.startsWith(\"/\")) {\n return (\n <img\n src={icon}\n alt=\"\"\n width={size}\n height={size}\n className={`inline-block ${className}`}\n style={{ color }}\n />\n )\n }\n\n // Check if it's a Font Awesome icon (starts with fa-)\n if (icon.startsWith(\"fa-\")) {\n const faClass = `fa-${iconType} ${icon}`\n return (\n <i\n className={`${faClass} ${className}`}\n style={{ fontSize: size, color }}\n aria-hidden=\"true\"\n />\n )\n }\n\n // Try to find Lucide icon\n const iconName = icon\n .split(\"-\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\"\")\n\n const LucideIcon = (LucideIcons as any)[iconName]\n\n if (LucideIcon) {\n return (\n <LucideIcon\n size={size}\n className={`inline-block ${className}`}\n style={{ color }}\n aria-hidden=\"true\"\n />\n )\n }\n\n // Fallback: render the icon name\n return (\n <span className={`inline-flex items-center font-mono text-xs ${className}`} style={{ color }}>\n [{icon}]\n </span>\n )\n}\n","import { ArrowRight, ExternalLink } from \"lucide-react\"\nimport Link from \"next/link\"\nimport { Icon } from \"./icon\"\n\ninterface CardProps {\n title: string\n description?: string\n href?: string\n icon?: string | React.ReactNode\n children?: React.ReactNode\n external?: boolean\n}\n\nexport function Card({ title, description, href, icon, children, external = false }: CardProps) {\n const content = (\n <>\n <div className=\"flex items-center gap-3\">\n {icon && (\n <div className=\"shrink-0 w-10 h-10 rounded-xl bg-primary/10 flex items-center justify-center text-primary\">\n {typeof icon === \"string\" ? <Icon icon={icon} size={20} /> : icon}\n </div>\n )}\n <div className=\"flex-1 min-w-0\">\n <h3 className={`font-semibold text-foreground mb-1 no-underline ${href ? 'group-hover:text-primary transition-colors' : ''}`}>\n {title}\n </h3>\n {description && (\n <p className=\"text-sm text-muted-foreground line-clamp-2 no-underline\">{description}</p>\n )}\n {children && (\n <div className=\"mt-2 text-sm text-muted-foreground no-underline\">{children}</div>\n )}\n </div>\n {href && (\n <div className=\"shrink-0 self-start mt-1\">\n {external ? (\n <ExternalLink className=\"h-4 w-4 text-muted-foreground group-hover:text-primary transition-colors\" />\n ) : (\n <ArrowRight className=\"h-4 w-4 text-muted-foreground group-hover:text-primary group-hover:translate-x-1 transition-all\" />\n )}\n </div>\n )}\n </div>\n </>\n )\n\n if (href) {\n const Component = external ? \"a\" : Link\n return (\n <Component\n href={href}\n className=\"card-link group block p-4 rounded-xl border border-border hover:border-primary/50 hover:bg-muted/50 transition-all\"\n {...(external ? { target: \"_blank\", rel: \"noopener noreferrer\" } : {})}\n >\n {content}\n </Component>\n )\n }\n\n return (\n <div className=\"p-4 rounded-xl border border-border bg-muted/30 no-underline\">\n {content}\n </div>\n )\n}\n\ninterface CardGridProps {\n children: React.ReactNode\n cols?: 1 | 2 | 3\n}\n\nexport function CardGrid({ children, cols = 2 }: CardGridProps) {\n const gridCols = {\n 1: \"grid-cols-1\",\n 2: \"grid-cols-1 md:grid-cols-2\",\n 3: \"grid-cols-1 md:grid-cols-2 lg:grid-cols-3\",\n }\n\n return (\n <div className={`grid ${gridCols[cols]} gap-4 my-6`}>\n {children}\n </div>\n )\n}\n","\"use client\"\n\nimport { useState } from \"react\"\nimport { Check, Copy } from \"lucide-react\"\n\nexport interface CodeBlockProps {\n code: string\n language: string\n filename?: string\n}\n\nexport function CodeBlock({ code, language, filename }: CodeBlockProps) {\n const [copied, setCopied] = useState(false)\n\n const handleCopy = async () => {\n await navigator.clipboard.writeText(code)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n }\n\n const highlightCode = (code: string, lang: string) => {\n const lines = code.split(\"\\n\")\n\n return lines.map((line, i) => {\n // Detect diff markers\n const isDeletion = line.startsWith(\"-\")\n const isAddition = line.startsWith(\"+\")\n const isDiff = isDeletion || isAddition\n\n // Get the line background class based on diff type\n const diffBgClass = isDeletion\n ? \"bg-red-500/5 dark:bg-red-500/10\"\n : isAddition\n ? \"bg-green-500/5 dark:bg-green-500/10\"\n : \"\"\n\n // Get the diff marker color\n const diffMarkerClass = isDeletion\n ? \"text-red-600 dark:text-red-400\"\n : isAddition\n ? \"text-green-600 dark:text-green-400\"\n : \"\"\n\n const tokens: Array<{ type: string; value: string }> = []\n let currentPos = 0\n\n // Regex patterns for different token types\n const patterns = [\n { type: \"comment\", regex: /(\\/\\/.*$|\\/\\*[\\s\\S]*?\\*\\/|#.*$)/ },\n { type: \"string\", regex: /(\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'|`(?:[^`\\\\]|\\\\.)*`)/ },\n {\n type: \"keyword\",\n regex:\n /\\b(const|let|var|function|return|if|else|for|while|do|break|continue|switch|case|default|import|export|from|as|class|extends|implements|interface|type|enum|namespace|async|await|try|catch|finally|throw|new|this|super|static|public|private|protected|readonly|abstract|void|null|undefined|true|false|typeof|instanceof|delete|in|of)\\b/,\n },\n { type: \"operator\", regex: /([+\\-*/%=<>!&|^~?:]+)/ },\n { type: \"number\", regex: /\\b(0x[a-fA-F0-9]+|0b[01]+|\\d+\\.?\\d*(?:e[+-]?\\d+)?)\\b/ },\n { type: \"function\", regex: /\\b([a-zA-Z_$][\\w$]*)\\s*(?=\\()/ },\n { type: \"property\", regex: /\\.([a-zA-Z_$][\\w$]*)/ },\n { type: \"punctuation\", regex: /([{}[\\]();,])/ },\n ]\n\n while (currentPos < line.length) {\n let matched = false\n\n for (const { type, regex } of patterns) {\n const match = line.slice(currentPos).match(regex)\n if (match && match.index === 0) {\n tokens.push({ type, value: match[0] })\n currentPos += match[0].length\n matched = true\n break\n }\n }\n\n if (!matched) {\n // Regular text or whitespace\n const nextSpecialChar = line.slice(currentPos).search(/[\"'`/\\w.+\\-*/%=<>!&|^~?:;,()[\\]{}#]/)\n if (nextSpecialChar === -1) {\n tokens.push({ type: \"text\", value: line.slice(currentPos) })\n break\n } else if (nextSpecialChar > 0) {\n tokens.push({ type: \"text\", value: line.slice(currentPos, currentPos + nextSpecialChar) })\n currentPos += nextSpecialChar\n } else {\n tokens.push({ type: \"text\", value: line[currentPos] })\n currentPos++\n }\n }\n }\n\n return (\n <div key={i} className={`table-row ${diffBgClass}`}>\n <span className=\"table-cell pr-4 text-right select-none text-muted-foreground/40 w-8 align-top\">{i + 1}</span>\n <span className=\"table-cell align-top\">\n {tokens.length === 0 ? (\n <span> </span>\n ) : (\n tokens.map((token, j) => {\n // Special handling for diff markers (first character)\n if (j === 0 && isDiff && token.value.length > 0 && (token.value[0] === '+' || token.value[0] === '-')) {\n const marker = token.value[0]\n const rest = token.value.slice(1)\n return (\n <span key={j}>\n <span className={`${diffMarkerClass} font-bold`}>{marker}</span>\n {rest && <span className={`token-${token.type}`}>{rest}</span>}\n </span>\n )\n }\n return (\n <span key={j} className={`token-${token.type}`}>\n {token.value}\n </span>\n )\n })\n )}\n </span>\n </div>\n )\n })\n }\n\n return (\n <div className=\"relative group my-2\">\n {/* Header - always visible */}\n <div className=\"bg-muted/50 dark:bg-muted/30 px-4 py-2 rounded-t-xl border border-b-0 border-border/50 flex items-center justify-between\">\n {/* Left section: Safari-style dots + filename */}\n <div className=\"flex items-center gap-3\">\n {/* Safari-style window controls */}\n <div className=\"flex items-center gap-1.5\">\n <div className=\"w-3 h-3 rounded-full bg-red-500/80 dark:bg-red-500/60\" />\n <div className=\"w-3 h-3 rounded-full bg-yellow-500/80 dark:bg-yellow-500/60\" />\n <div className=\"w-3 h-3 rounded-full bg-green-500/80 dark:bg-green-500/60\" />\n </div>\n {/* Filename or \"Code\" */}\n <span className=\"text-xs font-mono text-foreground\">{filename || \"Code\"}</span>\n </div>\n \n {/* Right section: Language + Copy button */}\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs text-muted-foreground/60 font-mono uppercase tracking-wide\">{language}</span>\n <button\n onClick={handleCopy}\n className=\"p-1.5 rounded-md hover:bg-muted/50 transition-colors\"\n aria-label=\"Copy code\"\n >\n {copied ? <Check className=\"h-4 w-4 text-green-400\" /> : <Copy className=\"h-4 w-4 text-muted-foreground\" />}\n </button>\n </div>\n </div>\n \n {/* Code content */}\n <div className=\"bg-gray-200/50 dark:bg-[#0d1117] rounded-b-xl overflow-x-auto border border-border/50\">\n <pre className=\"p-2 text-[13px] font-mono leading-relaxed text-gray-800 dark:text-gray-200\">\n <code className=\"table w-full\">{highlightCode(code, language)}</code>\n </pre>\n </div>\n </div>\n )\n}\n","interface ColumnsProps {\n children: React.ReactNode\n cols?: {\n sm?: 1 | 2 | 3 | 4\n md?: 1 | 2 | 3 | 4\n lg?: 1 | 2 | 3 | 4\n xl?: 1 | 2 | 3 | 4\n }\n}\n\nexport function Columns({ children, cols = { sm: 1, md: 2, lg: 3 } }: ColumnsProps) {\n const colClasses = {\n 1: \"grid-cols-1\",\n 2: \"grid-cols-2\",\n 3: \"grid-cols-3\",\n 4: \"grid-cols-4\",\n }\n\n const smClass = cols.sm ? colClasses[cols.sm] : \"grid-cols-1\"\n const mdClass = cols.md ? `md:${colClasses[cols.md]}` : \"\"\n const lgClass = cols.lg ? `lg:${colClasses[cols.lg]}` : \"\"\n const xlClass = cols.xl ? `xl:${colClasses[cols.xl]}` : \"\"\n\n return (\n <div className={`grid ${smClass} ${mdClass} ${lgClass} ${xlClass} gap-4 my-6`}>\n {children}\n </div>\n )\n}\n\ninterface ColumnProps {\n children: React.ReactNode\n span?: 1 | 2 | 3 | 4\n}\n\nexport function Column({ children, span = 1 }: ColumnProps) {\n const spanClass = {\n 1: \"col-span-1\",\n 2: \"col-span-2\",\n 3: \"col-span-3\",\n 4: \"col-span-4\",\n }\n\n return <div className={spanClass[span]}>{children}</div>\n}\n","interface FrameProps {\n src: string\n title?: string\n height?: number | string\n width?: string\n}\n\nexport function Frame({ src, title = \"Embedded content\", height = 500, width = \"100%\" }: FrameProps) {\n return (\n <div className=\"my-6 rounded-xl border border-border overflow-hidden bg-muted/30\">\n <iframe\n src={src}\n title={title}\n width={width}\n height={height}\n className=\"w-full\"\n loading=\"lazy\"\n sandbox=\"allow-scripts allow-same-origin allow-forms allow-popups\"\n />\n </div>\n )\n}\n","import NextImage from \"next/image\"\nimport Link from \"next/link\"\n\ninterface ImageCardProps {\n src: string\n alt: string\n title?: string\n description?: string\n href?: string\n external?: boolean\n aspectRatio?: \"square\" | \"video\" | \"portrait\"\n}\n\nexport function ImageCard({\n src,\n alt,\n title,\n description,\n href,\n external = false,\n aspectRatio = \"video\",\n}: ImageCardProps) {\n const aspectRatios = {\n square: \"aspect-square\",\n video: \"aspect-video\",\n portrait: \"aspect-[3/4]\",\n }\n\n const content = (\n <div className=\"flex flex-col gap-0 p-0\">\n <div className={`w-full ${aspectRatios[aspectRatio]} overflow-hidden ${(title || description) ? 'rounded-t-xl' : 'rounded-xl'} bg-muted relative`}>\n <NextImage\n src={src}\n alt={alt}\n fill\n sizes=\"(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw\"\n className=\"object-cover transition-transform duration-300 group-hover:scale-105\"\n />\n </div>\n {(title || description) && (\n <div className=\"p-3 flex flex-col gap-1\">\n {title && (\n <h3 className={`font-semibold text-foreground mb-0 no-underline ${href ? 'group-hover:text-primary transition-colors' : ''}`}>\n {title}\n </h3>\n )}\n {description && (\n <p className=\"text-sm text-muted-foreground line-clamp-2 no-underline mb-0\">\n {description}\n </p>\n )}\n </div>\n )}\n </div>\n )\n\n if (href) {\n const Component = external ? \"a\" : Link\n return (\n <Component\n href={href}\n className=\"image-card-link group block rounded-xl border border-border hover:border-primary/50 hover:shadow-lg transition-all overflow-hidden p-0\"\n {...(external ? { target: \"_blank\", rel: \"noopener noreferrer\" } : {})}\n >\n {content}\n </Component>\n )\n }\n\n return (\n <div className=\"block rounded-xl border border-border overflow-hidden bg-card p-0\">\n {content}\n </div>\n )\n}\n\ninterface ImageCardGridProps {\n children: React.ReactNode\n cols?: 1 | 2 | 3 | 4\n}\n\nexport function ImageCardGrid({ children, cols = 3 }: ImageCardGridProps) {\n const gridCols = {\n 1: \"grid-cols-1\",\n 2: \"grid-cols-1 md:grid-cols-2\",\n 3: \"grid-cols-1 md:grid-cols-2 lg:grid-cols-3\",\n 4: \"grid-cols-1 md:grid-cols-2 lg:grid-cols-4\",\n }\n\n return (\n <div className={`grid ${gridCols[cols]} gap-4 my-6`}>\n {children}\n </div>\n )\n}\n","\"use client\"\n\nimport NextImage from \"next/image\"\nimport { useState } from \"react\"\nimport { ZoomIn, X } from \"lucide-react\"\n\nexport interface ImageProps {\n src: string\n alt: string\n caption?: string\n width?: number\n height?: number\n zoom?: boolean\n}\n\nexport function Image({ src, alt, caption, width, height, zoom = true }: ImageProps) {\n const [isZoomed, setIsZoomed] = useState(false)\n\n return (\n <>\n <figure className=\"my-6\">\n <div className=\"relative group rounded-xl border border-border overflow-hidden bg-muted/30\">\n <NextImage\n src={src}\n alt={alt}\n width={width || 1200}\n height={height || 675}\n className=\"w-full h-auto\"\n />\n {zoom && (\n <button\n onClick={() => setIsZoomed(true)}\n className=\"absolute top-3 right-3 p-2 rounded-md bg-background/80 backdrop-blur-sm border border-border opacity-0 group-hover:opacity-100 transition-opacity hover:bg-background\"\n aria-label=\"Zoom image\"\n >\n <ZoomIn className=\"h-4 w-4 text-foreground\" />\n </button>\n )}\n </div>\n {caption && (\n <figcaption className=\"mt-2 text-center text-sm text-muted-foreground italic\">\n {caption}\n </figcaption>\n )}\n </figure>\n\n {/* Zoom Modal */}\n {isZoomed && (\n <div\n className=\"fixed inset-0 z-50 bg-background/95 backdrop-blur-sm flex items-center justify-center p-4\"\n onClick={() => setIsZoomed(false)}\n >\n <button\n onClick={() => setIsZoomed(false)}\n className=\"absolute top-4 right-4 p-2 rounded-md bg-muted hover:bg-muted/80 transition-colors\"\n aria-label=\"Close\"\n >\n <X className=\"h-5 w-5 text-foreground\" />\n </button>\n <div className=\"max-w-7xl max-h-[90vh] overflow-auto\">\n <NextImage\n src={src}\n alt={alt}\n width={width || 1920}\n height={height || 1080}\n className=\"w-full h-auto\"\n />\n </div>\n </div>\n )}\n </>\n )\n}\n","\"use client\"\n\nimport { useEffect, useRef } from \"react\"\n\nexport interface MathProps {\n children: string\n block?: boolean\n}\n\nexport function Math({ children, block = false }: MathProps) {\n const containerRef = useRef<HTMLSpanElement | HTMLDivElement>(null)\n\n useEffect(() => {\n const renderMath = async () => {\n try {\n // Dynamically import KaTeX\n const katex = (await import(\"katex\")).default\n\n if (containerRef.current) {\n katex.render(children, containerRef.current, {\n throwOnError: false,\n displayMode: block,\n })\n }\n } catch (err) {\n console.error(\"KaTeX rendering error:\", err)\n if (containerRef.current) {\n containerRef.current.textContent = children\n }\n }\n }\n\n renderMath()\n }, [children, block])\n\n if (block) {\n return (\n <div\n ref={containerRef as React.RefObject<HTMLDivElement>}\n className=\"my-6 overflow-x-auto text-center\"\n />\n )\n }\n\n return <span ref={containerRef as React.RefObject<HTMLSpanElement>} className=\"inline-block\" />\n}\n","\"use client\"\n\nimport { useEffect, useRef, useState } from \"react\"\n\nexport interface MermaidProps {\n chart: string\n caption?: string\n}\n\nexport function Mermaid({ chart, caption }: MermaidProps) {\n const containerRef = useRef<HTMLDivElement>(null)\n const [error, setError] = useState<string | null>(null)\n\n useEffect(() => {\n const renderChart = async () => {\n try {\n // Dynamically import mermaid\n const mermaid = (await import(\"mermaid\")).default\n\n mermaid.initialize({\n startOnLoad: false,\n theme: document.documentElement.classList.contains(\"dark\") ? \"dark\" : \"default\",\n securityLevel: \"loose\",\n fontFamily: \"inherit\",\n })\n\n if (containerRef.current) {\n const id = `mermaid-${Math.random().toString(36).substr(2, 9)}`\n const { svg } = await mermaid.render(id, chart)\n containerRef.current.innerHTML = svg\n }\n } catch (err) {\n console.error(\"Mermaid rendering error:\", err)\n setError(err instanceof Error ? err.message : \"Failed to render diagram\")\n }\n }\n\n renderChart()\n\n // Re-render on theme change\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.attributeName === \"class\") {\n renderChart()\n }\n })\n })\n\n observer.observe(document.documentElement, { attributes: true })\n\n return () => observer.disconnect()\n }, [chart])\n\n if (error) {\n return (\n <div className=\"my-6 p-4 rounded-xl border border-red-500/50 bg-red-500/10\">\n <p className=\"text-sm text-red-600 dark:text-red-400 font-mono\">\n Mermaid Error: {error}\n </p>\n </div>\n )\n }\n\n return (\n <figure className=\"my-6\">\n <div\n ref={containerRef}\n className=\"flex justify-center items-center p-6 rounded-xl border border-border bg-muted/30 overflow-x-auto\"\n />\n {caption && (\n <figcaption className=\"mt-2 text-center text-sm text-muted-foreground italic\">\n {caption}\n </figcaption>\n )}\n </figure>\n )\n}\n","interface StepsProps {\n children: React.ReactNode\n}\n\ninterface StepProps {\n title: string\n children: React.ReactNode\n}\n\nexport function Steps({ children }: StepsProps) {\n return (\n <div className=\"my-6 ml-4 space-y-6 [counter-reset:step]\">\n {children}\n </div>\n )\n}\n\nexport function Step({ title, children }: StepProps) {\n return (\n <div className=\"relative pl-8 pb-6 border-l-2 border-border last:border-l-0 last:pb-0 [counter-increment:step] before:content-[counter(step)] before:absolute before:left-0 before:-translate-x-1/2 before:w-8 before:h-8 before:rounded-full before:bg-primary before:text-primary-foreground before:flex before:items-center before:justify-center before:text-sm before:font-semibold before:z-10\">\n <div className=\"mb-2\">\n <h3 className=\"text-lg font-semibold text-foreground\">{title}</h3>\n </div>\n <div className=\"prose prose-sm dark:prose-invert max-w-none [&>*:last-child]:mb-0\">\n {children}\n </div>\n </div>\n )\n}\n","\"use client\"\n\nimport React, { useState, Children, isValidElement } from \"react\"\n\nexport interface TabProps {\n label: string\n children: React.ReactNode\n}\n\nexport interface TabsProps {\n children: React.ReactElement<TabProps> | React.ReactElement<TabProps>[]\n defaultValue?: string\n}\n\nexport function Tab({ children }: TabProps) {\n return <>{children}</>\n}\n\nexport function Tabs({ children, defaultValue }: TabsProps) {\n const tabs = Children.toArray(children).filter(isValidElement) as React.ReactElement<TabProps>[]\n\n // Use defaultValue or first tab label as initial active tab\n const firstTabLabel = tabs[0]?.props.label || \"\"\n const [activeTab, setActiveTab] = useState(defaultValue || firstTabLabel)\n\n return (\n <div className=\"my-6\">\n {/* Tab buttons */}\n <div className=\"flex items-center gap-1 border-b border-border mb-4\">\n {tabs.map((tab) => {\n const label = tab.props.label\n const isActive = activeTab === label\n\n return (\n <button\n key={label}\n onClick={() => setActiveTab(label)}\n className={`px-4 py-2 text-sm font-medium transition-colors border-b-2 -mb-px ${\n isActive\n ? \"border-primary text-primary\"\n : \"border-transparent text-muted-foreground hover:text-foreground hover:border-border\"\n }`}\n >\n {label}\n </button>\n )\n })}\n </div>\n\n {/* Tab content */}\n {tabs.map((tab) => {\n const label = tab.props.label\n if (activeTab !== label) return null\n\n return (\n <div key={label} className=\"prose prose-slate dark:prose-invert max-w-none [&>*:first-child]:mt-0\">\n {tab.props.children}\n </div>\n )\n })}\n </div>\n )\n}\n","\n\nimport { useState } from \"react\"\n\ninterface TooltipProps {\n children: React.ReactNode\n content: string\n position?: \"top\" | \"bottom\" | \"left\" | \"right\"\n}\n\nexport function Tooltip({ children, content, position = \"top\" }: TooltipProps) {\n const [isVisible, setIsVisible] = useState(false)\n\n const positions = {\n top: \"bottom-full left-1/2 -translate-x-1/2 mb-2\",\n bottom: \"top-full left-1/2 -translate-x-1/2 mt-2\",\n left: \"right-full top-1/2 -translate-y-1/2 mr-2\",\n right: \"left-full top-1/2 -translate-y-1/2 ml-2\",\n }\n\n return (\n <span\n className=\"relative inline-flex underline decoration-dotted cursor-help\"\n onMouseEnter={() => setIsVisible(true)}\n onMouseLeave={() => setIsVisible(false)}\n >\n {children}\n {isVisible && (\n <span\n className={`absolute ${positions[position]} z-50 px-2 py-1 text-xs text-white bg-gray-900 dark:bg-gray-700 rounded whitespace-nowrap pointer-events-none`}\n >\n {content}\n </span>\n )}\n </span>\n )\n}\n","interface VideoProps {\n src: string\n caption?: string\n autoplay?: boolean\n loop?: boolean\n muted?: boolean\n controls?: boolean\n poster?: string\n}\n\nexport function Video({\n src,\n caption,\n autoplay = false,\n loop = false,\n muted = false,\n controls = true,\n poster,\n}: VideoProps) {\n // Check if it's a YouTube or Vimeo URL\n const isYouTube = src.includes(\"youtube.com\") || src.includes(\"youtu.be\")\n const isVimeo = src.includes(\"vimeo.com\")\n\n const getYouTubeId = (url: string) => {\n const match = url.match(/(?:youtube\\.com\\/(?:[^\\/]+\\/.+\\/|(?:v|e(?:mbed)?)\\/|.*[?&]v=)|youtu\\.be\\/)([^\"&?\\/\\s]{11})/)\n return match ? match[1] : null\n }\n\n const getVimeoId = (url: string) => {\n const match = url.match(/vimeo\\.com\\/(\\d+)/)\n return match ? match[1] : null\n }\n\n return (\n <figure className=\"my-6\">\n <div className=\"relative rounded-xl border border-border overflow-hidden bg-muted/30\">\n {isYouTube ? (\n <div className=\"relative w-full\" style={{ paddingBottom: \"56.25%\" }}>\n <iframe\n className=\"absolute top-0 left-0 w-full h-full\"\n src={`https://www.youtube.com/embed/${getYouTubeId(src)}${autoplay ? \"?autoplay=1\" : \"\"}`}\n title=\"YouTube video\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n />\n </div>\n ) : isVimeo ? (\n <div className=\"relative w-full\" style={{ paddingBottom: \"56.25%\" }}>\n <iframe\n className=\"absolute top-0 left-0 w-full h-full\"\n src={`https://player.vimeo.com/video/${getVimeoId(src)}${autoplay ? \"?autoplay=1\" : \"\"}`}\n title=\"Vimeo video\"\n allow=\"autoplay; fullscreen; picture-in-picture\"\n allowFullScreen\n />\n </div>\n ) : (\n <video\n src={src}\n controls={controls}\n autoPlay={autoplay}\n loop={loop}\n muted={muted}\n poster={poster}\n className=\"w-full h-auto\"\n >\n Your browser does not support the video tag.\n </video>\n )}\n </div>\n {caption && (\n <figcaption className=\"mt-2 text-center text-sm text-muted-foreground italic\">\n {caption}\n </figcaption>\n )}\n </figure>\n )\n}\n","\n\nimport { type ReactNode, useState } from \"react\"\nimport { ChevronDown } from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\n\nexport interface ApiEndpointProps {\n method: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\"\n path: string\n summary?: string\n children?: ReactNode\n defaultOpen?: boolean\n}\n\nconst methodColors = {\n GET: \"bg-blue-500/10 text-blue-600 dark:text-blue-400\",\n POST: \"bg-green-500/10 text-green-600 dark:text-green-400\",\n PUT: \"bg-orange-500/10 text-orange-600 dark:text-orange-400\",\n PATCH: \"bg-purple-500/10 text-purple-600 dark:text-purple-400\",\n DELETE: \"bg-red-500/10 text-red-600 dark:text-red-400\",\n}\n\nexport function ApiEndpoint({ method, path, summary, children, defaultOpen = false }: ApiEndpointProps) {\n const [isOpen, setIsOpen] = useState(defaultOpen)\n\n return (\n <div className=\"not-prose mb-4 rounded-xl border border-border overflow-hidden\">\n {/* Accordion Header */}\n <button\n onClick={() => setIsOpen(!isOpen)}\n className=\"w-full flex items-center gap-3 px-4 py-3 text-left bg-muted/30 hover:bg-muted/50 transition-colors\"\n >\n <span\n className={cn(\n \"text-xs font-semibold px-2 py-0.5 rounded\",\n methodColors[method]\n )}\n >\n {method}\n </span>\n <code className=\"text-sm font-mono\">{path}</code>\n {summary && <span className=\"text-sm text-muted-foreground ml-auto mr-2\">{summary}</span>}\n <ChevronDown\n className={cn(\n \"h-5 w-5 text-muted-foreground transition-transform flex-shrink-0\",\n isOpen ? \"rotate-180\" : \"\"\n )}\n />\n </button>\n\n {/* Accordion Content */}\n {isOpen && children && (\n <div className=\"border-t border-border bg-background\">\n <div className=\"px-4 py-4 space-y-6\">{children}</div>\n </div>\n )}\n </div>\n )\n}\n","export interface ApiParam {\n name: string\n type: string\n required?: boolean\n description?: string\n default?: string\n}\n\nexport interface ApiParamsProps {\n title?: string\n params: ApiParam[]\n}\n\nexport function ApiParams({ title = \"Parameters\", params }: ApiParamsProps) {\n if (!params || params.length === 0) return null\n\n return (\n <div className=\"mb-6\">\n <h4 className=\"text-sm font-semibold text-foreground mb-3\">{title}</h4>\n <div className=\"overflow-x-auto\">\n <table className=\"w-full border-collapse\">\n <thead>\n <tr className=\"border-b border-border\">\n <th className=\"text-left py-2 px-3 text-xs font-semibold text-muted-foreground uppercase tracking-wider\">\n Property\n </th>\n <th className=\"text-left py-2 px-3 text-xs font-semibold text-muted-foreground uppercase tracking-wider\">\n Type\n </th>\n <th className=\"text-left py-2 px-3 text-xs font-semibold text-muted-foreground uppercase tracking-wider\">\n Required\n </th>\n <th className=\"text-left py-2 px-3 text-xs font-semibold text-muted-foreground uppercase tracking-wider\">\n Default\n </th>\n <th className=\"text-left py-2 px-3 text-xs font-semibold text-muted-foreground uppercase tracking-wider\">\n Description\n </th>\n </tr>\n </thead>\n <tbody>\n {params.map((param, index) => (\n <tr\n key={param.name}\n className={index !== params.length - 1 ? \"border-b border-border/50\" : \"\"}\n >\n <td className=\"py-2.5 px-3\">\n <code className=\"text-sm font-mono text-foreground\">{param.name}</code>\n </td>\n <td className=\"py-2.5 px-3\">\n <span className=\"text-sm text-muted-foreground font-mono\">{param.type}</span>\n </td>\n <td className=\"py-2.5 px-3\">\n {param.required ? (\n <span className=\"text-sm text-red-600 dark:text-red-400\">Yes</span>\n ) : (\n <span className=\"text-sm text-muted-foreground\">No</span>\n )}\n </td>\n <td className=\"py-2.5 px-3\">\n {param.default ? (\n <code className=\"text-sm font-mono text-muted-foreground\">{param.default}</code>\n ) : (\n <span className=\"text-sm text-muted-foreground\">-</span>\n )}\n </td>\n <td className=\"py-2.5 px-3\">\n {param.description ? (\n <span className=\"text-sm text-muted-foreground\">{param.description}</span>\n ) : (\n <span className=\"text-sm text-muted-foreground\">-</span>\n )}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n )\n}\n","import { CodeBlock } from \"../code-block\"\n\nexport interface ApiResponseProps {\n status: number\n description?: string\n example?: any\n schema?: any\n}\n\nconst statusColors: Record<string, string> = {\n \"2\": \"text-green-600 dark:text-green-400\",\n \"3\": \"text-blue-600 dark:text-blue-400\",\n \"4\": \"text-orange-600 dark:text-orange-400\",\n \"5\": \"text-red-600 dark:text-red-400\",\n}\n\nexport function ApiResponse({ status, description, example, schema }: ApiResponseProps) {\n const statusClass = statusColors[String(status)[0]] || \"text-muted-foreground\"\n\n return (\n <div className=\"mb-4\">\n <div className=\"flex items-center gap-2 mb-2\">\n <span className={`text-sm font-semibold ${statusClass}`}>{status}</span>\n {description && <span className=\"text-sm text-muted-foreground\">{description}</span>}\n </div>\n\n {example && (\n <div className=\"mb-3\">\n <p className=\"text-xs font-semibold text-muted-foreground mb-2\">Example Response</p>\n <CodeBlock\n code={typeof example === \"string\" ? example : JSON.stringify(example, null, 2)}\n language=\"json\"\n />\n </div>\n )}\n\n {schema && (\n <div>\n <p className=\"text-xs font-semibold text-muted-foreground mb-2\">Schema</p>\n <CodeBlock\n code={typeof schema === \"string\" ? schema : JSON.stringify(schema, null, 2)}\n language=\"json\"\n />\n </div>\n )}\n </div>\n )\n}\n","import * as React from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@/lib/utils'\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90',\n destructive:\n 'bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',\n outline:\n 'border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50',\n secondary:\n 'bg-secondary text-secondary-foreground hover:bg-secondary/80',\n ghost:\n 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n default: 'h-9 px-4 py-2 has-[>svg]:px-3',\n sm: 'h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5',\n lg: 'h-10 rounded-md px-6 has-[>svg]:px-4',\n icon: 'size-9',\n 'icon-sm': 'size-8',\n 'icon-lg': 'size-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n)\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<'button'> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot : 'button'\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst badgeVariants = cva(\n \"inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n destructive:\n \"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Badge({\n className,\n variant,\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> &\n VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"span\"\n\n return (\n <Comp\n data-slot=\"badge\"\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nexport { Badge, badgeVariants }\n","\"use client\"\n\nimport { useState, useMemo } from \"react\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Textarea } from \"@/components/ui/textarea\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { CodeBlock } from \"../code-block\"\nimport { Play, Loader2 } from \"lucide-react\"\n\nexport interface PathParam {\n name: string\n type: string\n example?: any\n}\n\nexport interface ApiPlaygroundProps {\n method: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\"\n path: string\n baseUrl?: string\n headers?: Record<string, string>\n defaultBody?: string\n pathParams?: PathParam[]\n}\n\nexport function ApiPlayground({\n method,\n path,\n baseUrl = \"\",\n headers = {},\n defaultBody,\n pathParams = []\n}: ApiPlaygroundProps) {\n const [loading, setLoading] = useState(false)\n const [response, setResponse] = useState<any>(null)\n const [error, setError] = useState<string | null>(null)\n const [requestBody, setRequestBody] = useState(defaultBody || \"\")\n\n // Initialize headers with empty strings if not provided\n const initialHeaders = useMemo(() => {\n const cleanHeaders: Record<string, string> = {}\n Object.entries(headers).forEach(([key, value]) => {\n cleanHeaders[key] = value || \"\"\n })\n return cleanHeaders\n }, [headers])\n\n const [requestHeaders, setRequestHeaders] = useState(JSON.stringify(initialHeaders, null, 2))\n\n // Extract path parameters and initialize with defaults\n const extractedParams = useMemo(() => {\n const params: Record<string, string> = {}\n const pathParamPattern = /:(\\w+)/g\n let match\n\n while ((match = pathParamPattern.exec(path)) !== null) {\n const paramName = match[1]\n const paramConfig = pathParams.find(p => p.name === paramName)\n\n // Set default value based on example or type\n if (paramConfig?.example !== undefined) {\n params[paramName] = String(paramConfig.example)\n } else if (paramConfig?.type === \"number\") {\n params[paramName] = \"1\"\n } else {\n params[paramName] = \"\"\n }\n }\n\n return params\n }, [path, pathParams])\n\n const [pathParamValues, setPathParamValues] = useState<Record<string, string>>(extractedParams)\n\n // Build the final URL with path params replaced\n const buildUrl = () => {\n let finalPath = path\n Object.entries(pathParamValues).forEach(([key, value]) => {\n finalPath = finalPath.replace(`:${key}`, value)\n })\n return `${baseUrl}${finalPath}`\n }\n\n const handleSend = async () => {\n setLoading(true)\n setError(null)\n setResponse(null)\n\n try {\n const url = buildUrl()\n const parsedHeaders = JSON.parse(requestHeaders)\n\n const options: RequestInit = {\n method,\n headers: {\n \"Content-Type\": \"application/json\",\n ...parsedHeaders,\n },\n }\n\n if (method !== \"GET\" && method !== \"DELETE\" && requestBody) {\n options.body = requestBody\n }\n\n const res = await fetch(url, options)\n const data = await res.json()\n\n setResponse({\n status: res.status,\n statusText: res.statusText,\n headers: Object.fromEntries(res.headers.entries()),\n body: data,\n })\n } catch (err) {\n setError(err instanceof Error ? err.message : \"An error occurred\")\n } finally {\n setLoading(false)\n }\n }\n\n return (\n <div className=\"not-prose border border-border rounded-lg overflow-hidden bg-card/30\">\n <div className=\"bg-muted/50 px-4 py-2 border-b border-border\">\n <h4 className=\"text-sm font-semibold text-foreground\">API Playground</h4>\n </div>\n\n <div className=\"p-4 space-y-4\">\n {/* Path Parameters */}\n {Object.keys(pathParamValues).length > 0 && (\n <div>\n <label className=\"text-xs font-semibold text-muted-foreground mb-2 block\">\n Path Parameters\n </label>\n <div className=\"space-y-2\">\n {Object.entries(pathParamValues).map(([paramName, paramValue]) => {\n const paramConfig = pathParams.find(p => p.name === paramName)\n return (\n <div key={paramName} className=\"flex items-center gap-2\">\n <span className=\"text-xs text-muted-foreground min-w-[80px]\">\n :{paramName}\n </span>\n <Input\n value={paramValue}\n onChange={(e) =>\n setPathParamValues((prev) => ({ ...prev, [paramName]: e.target.value }))\n }\n placeholder={paramConfig?.example || paramConfig?.type || \"value\"}\n className=\"font-mono text-sm\"\n />\n </div>\n )\n })}\n </div>\n </div>\n )}\n\n {/* URL */}\n <div>\n <label className=\"text-xs font-semibold text-muted-foreground mb-2 block\">\n Request URL\n </label>\n <div className=\"flex items-center gap-2\">\n <Badge variant=\"outline\" className=\"font-mono\">\n {method}\n </Badge>\n <Input value={buildUrl()} readOnly className=\"font-mono text-sm\" />\n </div>\n </div>\n\n {/* Headers */}\n <div>\n <label className=\"text-xs font-semibold text-muted-foreground mb-2 block\">\n Headers (JSON)\n </label>\n <Textarea\n value={requestHeaders}\n onChange={(e) => setRequestHeaders(e.target.value)}\n className=\"font-mono text-sm\"\n rows={4}\n />\n </div>\n\n {/* Body (for POST, PUT, PATCH) */}\n {method !== \"GET\" && method !== \"DELETE\" && (\n <div>\n <label className=\"text-xs font-semibold text-muted-foreground mb-2 block\">\n Request Body (JSON)\n </label>\n <Textarea\n value={requestBody}\n onChange={(e) => setRequestBody(e.target.value)}\n className=\"font-mono text-sm\"\n rows={6}\n placeholder='{\\n \"key\": \"value\"\\n}'\n />\n </div>\n )}\n\n {/* Send Button */}\n <Button onClick={handleSend} disabled={loading} className=\"w-full\">\n {loading ? (\n <>\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n Sending...\n </>\n ) : (\n <>\n <Play className=\"mr-2 h-4 w-4\" />\n Send Request\n </>\n )}\n </Button>\n\n {/* Response */}\n {response && (\n <div className=\"mt-4\">\n <label className=\"text-xs font-semibold text-muted-foreground mb-2 block\">\n Response ({response.status} {response.statusText})\n </label>\n <CodeBlock code={JSON.stringify(response.body, null, 2)} language=\"json\" />\n </div>\n )}\n\n {/* Error */}\n {error && (\n <div className=\"mt-4 p-3 bg-red-500/10 border border-red-500/20 rounded-md\">\n <p className=\"text-sm text-red-600 dark:text-red-400\">{error}</p>\n </div>\n )}\n </div>\n </div>\n )\n}\n","\"use client\"\n\nimport { useState, useEffect } from \"react\"\nimport type { SpecraApiSpec } from \"@/lib/api-parser.types\"\nimport { parseApiSpec, type ParserType } from \"@/lib/parsers\"\nimport { Accordion, AccordionItem } from \"../accordion\"\nimport { ApiEndpoint } from \"./api-endpoint\"\nimport { ApiParams } from \"./api-params\"\nimport { ApiResponse } from \"./api-response\"\nimport { ApiPlayground } from \"./api-playground\"\nimport { CodeBlock } from \"../code-block\"\nimport { Loader2 } from \"lucide-react\"\n\nexport interface ApiReferenceProps {\n /**\n * Path to the API spec JSON file (relative to /public)\n * Example: \"/api-specs/my-api.json\"\n */\n spec: string\n\n /**\n * Parser type - auto-detect by default\n * - \"auto\": Auto-detect format (Specra, OpenAPI, or Postman)\n * - \"specra\": Native Specra format\n * - \"openapi\": OpenAPI 3.x / Swagger\n * - \"postman\": Postman Collection v2.x\n */\n parser?: ParserType\n\n /**\n * Show API playground for testing\n */\n showPlayground?: boolean\n}\n\nexport function ApiReference({ spec, parser = \"auto\", showPlayground = true }: ApiReferenceProps) {\n const [apiSpec, setApiSpec] = useState<SpecraApiSpec | null>(null)\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<string | null>(null)\n\n useEffect(() => {\n async function loadSpec() {\n try {\n const response = await fetch(spec)\n if (!response.ok) {\n throw new Error(`Failed to load API spec: ${response.statusText}`)\n }\n const data = await response.json()\n\n // Parse using the appropriate parser\n const parsedSpec = parseApiSpec(data, parser)\n setApiSpec(parsedSpec)\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to load API spec\")\n } finally {\n setLoading(false)\n }\n }\n\n loadSpec()\n }, [spec, parser])\n\n // Replace environment variables in text\n const interpolateEnv = (text: string, env?: Record<string, string>): string => {\n if (!env) return text\n return text.replace(/\\{(\\w+)\\}/g, (match, key) => {\n return env[key] || match\n })\n }\n\n if (loading) {\n return (\n <div className=\"flex items-center justify-center py-12\">\n <Loader2 className=\"h-6 w-6 animate-spin text-muted-foreground\" />\n <span className=\"ml-2 text-muted-foreground\">Loading API specification...</span>\n </div>\n )\n }\n\n if (error) {\n return (\n <div className=\"rounded-lg border border-red-500/20 bg-red-500/10 p-4\">\n <p className=\"text-sm text-red-600 dark:text-red-400\">Error: {error}</p>\n </div>\n )\n }\n\n if (!apiSpec) {\n return null\n }\n\n return (\n <div className=\"space-y-6\">\n {/* API Info */}\n {(apiSpec.title || apiSpec.description) && (\n <div className=\"mb-8\">\n {apiSpec.title && (\n <h2 className=\"text-2xl font-semibold mb-2 text-foreground\">{apiSpec.title}</h2>\n )}\n {apiSpec.description && (\n <p className=\"text-muted-foreground\">{apiSpec.description}</p>\n )}\n {apiSpec.baseUrl && (\n <div className=\"mt-4\">\n <p className=\"text-sm font-semibold text-muted-foreground mb-1\">Base URL</p>\n <code className=\"text-sm px-2 py-1 bg-muted rounded\">{apiSpec.baseUrl}</code>\n </div>\n )}\n </div>\n )}\n\n {/* Authentication */}\n {apiSpec.auth && (\n <div className=\"rounded-lg border border-border bg-card/30 p-4 mb-6\">\n <h3 className=\"text-lg font-semibold mb-2 text-foreground\">Authentication</h3>\n <p className=\"text-sm text-muted-foreground mb-2\">\n {apiSpec.auth.description || `This API uses ${apiSpec.auth.type} authentication.`}\n </p>\n {apiSpec.auth.type === \"bearer\" && (\n <CodeBlock\n code={`Authorization: ${apiSpec.auth.tokenPrefix || \"Bearer\"} {YOUR_TOKEN}`}\n language=\"bash\"\n />\n )}\n {apiSpec.auth.type === \"apiKey\" && (\n <CodeBlock\n code={`${apiSpec.auth.headerName || \"X-API-Key\"}: {YOUR_API_KEY}`}\n language=\"bash\"\n />\n )}\n </div>\n )}\n\n {/* Endpoints as Accordion */}\n <Accordion type=\"single\" collapsible className=\"space-y-4\">\n {apiSpec.endpoints.map((endpoint, index) => {\n // Merge global and endpoint-specific headers\n const allHeaders = [\n ...(apiSpec.globalHeaders || []),\n ...(endpoint.headers || []),\n ].map((header) => ({\n ...header,\n value: interpolateEnv(header.value, apiSpec.env),\n }))\n\n return (\n <AccordionItem\n key={index}\n value={`endpoint-${index}`}\n title={\n <div className=\"flex items-center gap-3\">\n <span\n className={`text-xs font-semibold px-2 py-0.5 rounded ${\n endpoint.method === \"GET\"\n ? \"bg-blue-500/10 text-blue-600 dark:text-blue-400\"\n : endpoint.method === \"POST\"\n ? \"bg-green-500/10 text-green-600 dark:text-green-400\"\n : endpoint.method === \"PUT\"\n ? \"bg-orange-500/10 text-orange-600 dark:text-orange-400\"\n : endpoint.method === \"PATCH\"\n ? \"bg-purple-500/10 text-purple-600 dark:text-purple-400\"\n : \"bg-red-500/10 text-red-600 dark:text-red-400\"\n }`}\n >\n {endpoint.method}\n </span>\n <code className=\"text-sm font-mono\">{endpoint.path}</code>\n <span className=\"text-sm text-muted-foreground ml-auto\">{endpoint.title}</span>\n </div>\n }\n >\n <div className=\"space-y-6 pt-4\">\n {/* Description */}\n {endpoint.description && (\n <p className=\"text-sm text-muted-foreground\">{endpoint.description}</p>\n )}\n\n {/* Path Parameters */}\n {endpoint.pathParams && endpoint.pathParams.length > 0 && (\n <ApiParams title=\"Path Parameters\" params={endpoint.pathParams} />\n )}\n\n {/* Query Parameters */}\n {endpoint.queryParams && endpoint.queryParams.length > 0 && (\n <ApiParams title=\"Query Parameters\" params={endpoint.queryParams} />\n )}\n\n {/* Headers */}\n {allHeaders.length > 0 && (\n <div>\n <h4 className=\"text-sm font-semibold text-foreground mb-3\">Headers</h4>\n <div className=\"space-y-2\">\n {allHeaders.map((header, idx) => (\n <div key={idx} className=\"flex flex-col gap-1\">\n <div className=\"flex items-center gap-2\">\n <code className=\"text-sm font-mono text-foreground\">{header.name}</code>\n <span className=\"text-xs text-muted-foreground\">{header.value}</span>\n </div>\n {header.description && (\n <p className=\"text-sm text-muted-foreground\">{header.description}</p>\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Request Body */}\n {endpoint.body && (\n <div>\n <h4 className=\"text-sm font-semibold text-foreground mb-3\">Request Body</h4>\n {endpoint.body.description && (\n <p className=\"text-sm text-muted-foreground mb-2\">\n {endpoint.body.description}\n </p>\n )}\n {endpoint.body.example && (\n <CodeBlock\n code={\n typeof endpoint.body.example === \"string\"\n ? endpoint.body.example\n : JSON.stringify(endpoint.body.example, null, 2)\n }\n language=\"json\"\n />\n )}\n </div>\n )}\n\n {/* Responses */}\n <div>\n <h4 className=\"text-sm font-semibold text-foreground mb-3\">Responses</h4>\n {endpoint.successResponse && (\n <ApiResponse\n status={endpoint.successResponse.status}\n description={endpoint.successResponse.description}\n example={endpoint.successResponse.example}\n schema={endpoint.successResponse.schema}\n />\n )}\n {endpoint.errorResponses?.map((response, idx) => (\n <ApiResponse\n key={idx}\n status={response.status}\n description={response.description}\n example={response.example}\n schema={response.schema}\n />\n ))}\n </div>\n\n {/* Code Examples */}\n {endpoint.examples && endpoint.examples.length > 0 && (\n <div>\n <h4 className=\"text-sm font-semibold text-foreground mb-3\">Examples</h4>\n {endpoint.examples.map((example, idx) => (\n <div key={idx} className=\"mb-3\">\n <p className=\"text-xs font-semibold text-muted-foreground mb-2\">\n {example.title}\n </p>\n <CodeBlock code={example.code} language={example.language} />\n </div>\n ))}\n </div>\n )}\n\n {/* API Playground */}\n {showPlayground && (\n <ApiPlayground\n method={endpoint.method}\n path={endpoint.path}\n baseUrl={apiSpec.baseUrl}\n headers={Object.fromEntries(allHeaders.map((h) => [h.name, h.value]))}\n pathParams={endpoint.pathParams}\n defaultBody={\n endpoint.body?.example\n ? typeof endpoint.body.example === \"string\"\n ? endpoint.body.example\n : JSON.stringify(endpoint.body.example, null, 2)\n : undefined\n }\n />\n )}\n </div>\n </AccordionItem>\n )\n })}\n </Accordion>\n </div>\n )\n}\n"],"mappings":"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","names":["jsx","jsx","jsxs","Icon","jsx","jsxs","jsx","jsxs","useState","jsx","jsxs","code","jsx","jsx","Link","jsx","jsxs","NextImage","useState","Fragment","jsx","jsxs","jsx","Math","useEffect","useRef","useState","jsx","jsxs","jsx","jsxs","useState","isValidElement","Fragment","jsx","jsxs","useState","jsx","jsxs","jsx","jsxs","useState","ChevronDown","jsx","jsxs","useState","ChevronDown","jsx","jsxs","jsx","jsxs","jsx","jsx","jsx","Slot","cva","jsx","cva","Badge","Slot","useState","Fragment","jsx","jsxs","useState","Badge","useState","useEffect","Loader2","jsx","jsxs","useState","useEffect"]}
|