@clarify-labs/renderer 0.6.7 → 0.7.1
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/output/{OpenApiOperation-CxQQyEHK.cjs → OpenApiOperation-C4xZu4i0.cjs} +154 -79
- package/output/OpenApiOperation-C4xZu4i0.cjs.map +1 -0
- package/output/{OpenApiOperation-CI_PeMSy.js → OpenApiOperation-LIL7bqxW.js} +129 -60
- package/output/OpenApiOperation-LIL7bqxW.js.map +1 -0
- package/output/{shell-D4tS8Jts.cjs → PageActions-1RDCHcUY.cjs} +597 -160
- package/output/PageActions-1RDCHcUY.cjs.map +1 -0
- package/output/{shell-DvTfFx6M.js → PageActions-yoDRjkq8.js} +531 -148
- package/output/PageActions-yoDRjkq8.js.map +1 -0
- package/output/{ThemeRoot-DErmHskn.js → ThemeRoot-CLa0yvRQ.js} +302 -106
- package/output/ThemeRoot-CLa0yvRQ.js.map +1 -0
- package/output/{ThemeRoot-BhP5M3Hd.cjs → ThemeRoot-DYS-lcK-.cjs} +349 -129
- package/output/ThemeRoot-DYS-lcK-.cjs.map +1 -0
- package/output/app/AppShell.d.ts +5 -2
- package/output/app/PageActions.d.ts +12 -0
- package/output/app/PageBanner.d.ts +7 -0
- package/output/app/PageFooter.d.ts +5 -1
- package/output/app/SectionProvider.d.ts +1 -0
- package/output/client.cjs +14 -4
- package/output/client.d.ts +4 -1
- package/output/client.js +4 -3
- package/output/components/LocalizedLink.d.ts +6 -0
- package/output/components/WebFrame.d.ts +11 -0
- package/output/components/index.d.ts +4 -0
- package/output/context.d.ts +1 -1
- package/output/core/context.d.ts +5 -5
- package/output/core/index.d.ts +1 -1
- package/output/core/types.d.ts +74 -59
- package/output/index.cjs +57 -28
- package/output/index.cjs.map +1 -1
- package/output/index.d.ts +9 -7
- package/output/index.js +37 -12
- package/output/index.js.map +1 -1
- package/output/mdx/components.d.ts +2 -0
- package/output/mdx/primitives.d.ts +3 -2
- package/output/preview.cjs +66 -28
- package/output/preview.cjs.map +1 -1
- package/output/preview.js +63 -25
- package/output/preview.js.map +1 -1
- package/output/{render-C_NHO3rz.cjs → render-CRTqZzyY.cjs} +10 -8
- package/output/render-CRTqZzyY.cjs.map +1 -0
- package/output/{render-HeCAMIGm.js → render-D0ls3d2j.js} +8 -6
- package/output/render-D0ls3d2j.js.map +1 -0
- package/output/renderer.css +575 -280
- package/output/server.cjs +10 -8
- package/output/server.cjs.map +1 -1
- package/output/server.js +7 -5
- package/output/server.js.map +1 -1
- package/output/shell/ContentActions.d.ts +0 -1
- package/output/shell/Header.d.ts +3 -2
- package/output/shell/Search.d.ts +4 -0
- package/output/shell/SiteLogo.d.ts +2 -2
- package/output/shell/mobile.d.ts +2 -2
- package/output/shell/search/Highlight.d.ts +11 -0
- package/output/shell/search/SearchDialog.d.ts +13 -0
- package/output/shell/search/SearchInput.d.ts +8 -0
- package/output/shell/search/SearchResult.d.ts +10 -0
- package/output/shell/search/items.d.ts +3 -0
- package/output/shell/search/pagefind.d.ts +5 -0
- package/output/shell/search/types.d.ts +37 -0
- package/output/shell/search/useSearchProps.d.ts +10 -0
- package/output/theme/ThemeEditor.d.ts +53 -17
- package/output/theme/ThemeProvider.d.ts +2 -1
- package/output/theme/ThemeRoot.d.ts +2 -2
- package/output/theme/cookies.d.ts +11 -0
- package/output/theme/randomTheme.d.ts +2 -2
- package/output/theme/variables.d.ts +58 -18
- package/output/utils/href.d.ts +3 -3
- package/package.json +1 -1
- package/output/OpenApiOperation-CI_PeMSy.js.map +0 -1
- package/output/OpenApiOperation-CxQQyEHK.cjs.map +0 -1
- package/output/ThemeRoot-BhP5M3Hd.cjs.map +0 -1
- package/output/ThemeRoot-DErmHskn.js.map +0 -1
- package/output/render-C_NHO3rz.cjs.map +0 -1
- package/output/render-HeCAMIGm.js.map +0 -1
- package/output/shell-D4tS8Jts.cjs.map +0 -1
- package/output/shell-DvTfFx6M.js.map +0 -1
package/output/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../source/openapi/lib/spec-path.ts","../source/openapi/lib/utils.ts","../source/openapi/entry.tsx","../source/mdx/components.ts","../source/mdx/DocShell.tsx"],"sourcesContent":["import { useLocation } from 'react-router-dom'\n\nimport { useClarifyConfig, useOpenApis } from '../../core/context'\n\nimport type { OpenAPISpec } from './utils'\n\nconst VIRTUAL_PREFIX = 'virtual:clarify-page/'\n\nfunction resolveRelativePath(fromDir: string, to: string): string {\n const parts = (fromDir + '/' + to).split('/').filter(Boolean)\n const stack: string[] = []\n for (const part of parts) {\n if (part === '..') {\n stack.pop()\n } else if (part !== '.') {\n stack.push(part)\n }\n }\n return stack.join('/')\n}\n\nfunction normalizeSpecPath(specPath: string, currentRoutePath?: string, routePrefix = ''): string {\n if (specPath.startsWith(VIRTUAL_PREFIX)) return specPath\n\n const normalizedRoutePrefix = routePrefix.replace(/^\\/+|\\/+$/g, '')\n const normalizedSpecPath = specPath.startsWith('/') && normalizedRoutePrefix && specPath.slice(1).startsWith(`${normalizedRoutePrefix}/`)\n ? '/' + specPath.slice(normalizedRoutePrefix.length + 2)\n : specPath\n\n if (normalizedSpecPath.startsWith('/')) {\n return VIRTUAL_PREFIX + normalizedSpecPath.replace(/^\\//, '')\n }\n const fromDir = currentRoutePath === '/' ? '' : currentRoutePath?.replace(/^\\//, '').replace(/\\/[^/]*$/, '') ?? ''\n const normalizedFromDir = normalizedRoutePrefix && fromDir.startsWith(`${normalizedRoutePrefix}/`)\n ? fromDir.slice(normalizedRoutePrefix.length + 1)\n : fromDir\n return VIRTUAL_PREFIX + resolveRelativePath(normalizedFromDir, normalizedSpecPath)\n}\n\nexport function useOpenApiSpec(spec?: OpenAPISpec, specPath?: string): OpenAPISpec | null {\n const specs = useOpenApis()\n const location = useLocation()\n const config = useClarifyConfig()\n\n if (spec) return spec\n if (!specPath) return null\n\n const normalized = normalizeSpecPath(specPath, location.pathname, config.routePrefix)\n return specs[normalized] ?? null\n}\n","import type { OpenAPIV3, OpenAPIV3_1 } from 'openapi-types'\n\nimport type { OpenApiRecord } from '../types'\n\nexport type OpenAPISpec = OpenAPIV3.Document | OpenAPIV3_1.Document\nexport type OpenAPIOperation = OpenAPIV3.OperationObject | OpenAPIV3_1.OperationObject\n\nexport const OPENAPI_HTTP_METHODS = ['get', 'put', 'post', 'delete', 'options', 'head', 'patch', 'trace'] as const\n\nexport type OpenAPIHttpMethod = typeof OPENAPI_HTTP_METHODS[number]\n\nexport function isOpenAPIHttpMethod(method: string): method is OpenAPIHttpMethod {\n return (OPENAPI_HTTP_METHODS as readonly string[]).includes(method.toLowerCase())\n}\n\nfunction isRecord(value: unknown): value is OpenApiRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction resolveOpenApiRef(spec: OpenAPISpec, ref: string): unknown {\n if (!ref.startsWith('#/')) return undefined\n\n return ref\n .slice(2)\n .split('/')\n .map((part) => part.replace(/~1/g, '/').replace(/~0/g, '~'))\n .reduce<unknown>((current, part) => (isRecord(current) ? current[part] : undefined), spec)\n}\n\nfunction getPathItem(spec: OpenAPISpec, path: string): OpenApiRecord | undefined {\n const pathItem = spec.paths?.[path]\n const resolved = isRecord(pathItem) && typeof pathItem.$ref === 'string' ? resolveOpenApiRef(spec, pathItem.$ref) : pathItem\n return isRecord(resolved) ? resolved : undefined\n}\n\nexport function getOpenApiOperation(spec: OpenAPISpec, path: string, method: string): OpenAPIOperation | undefined {\n if (!isOpenAPIHttpMethod(method)) return undefined\n return getPathItem(spec, path)?.[method.toLowerCase() as OpenAPIHttpMethod] as OpenAPIOperation | undefined\n}\n\nexport function listOpenApiOperations(spec: OpenAPISpec): Array<{ path: string; method: OpenAPIHttpMethod; operation: OpenAPIOperation }> {\n const paths = spec.paths ?? {}\n const operations: Array<{ path: string; method: OpenAPIHttpMethod; operation: OpenAPIOperation }> = []\n\n for (const path of Object.keys(paths)) {\n const pathItem = getPathItem(spec, path)\n if (!pathItem) continue\n for (const method of OPENAPI_HTTP_METHODS) {\n const operation = pathItem[method]\n if (operation) operations.push({ path, method, operation: operation as OpenAPIOperation })\n }\n }\n\n return operations\n}\n","import type { ReactNode } from 'react'\n\nimport { Prose } from '../components/Prose'\nimport { useBuiltInText } from '../core/i18n'\nimport { Markdown } from '../mdx/Markdown'\n\nimport { OpenApiOperation as OpenApiOperationComponent } from './components/OpenApiOperation'\nimport { useOpenApiSpec } from './lib/spec-path'\nimport { getOpenApiOperation, listOpenApiOperations } from './lib/utils'\nimport type { OpenAPISpec } from './lib/utils'\n\ntype OpenApiPathsProps = { spec: OpenAPISpec; tagFilter?: string[] }\n\ntype OpenApiHeaderProps = { spec: OpenAPISpec }\n\ntype WarningBoxProps = {\n children: ReactNode\n tone?: 'amber' | 'red'\n}\n\nexport type OpenApiDocumentProps = {\n spec?: OpenAPISpec\n specPath?: string\n tagFilter?: string[]\n}\n\ntype OpenApiOperationWithSpecProps = {\n spec: OpenAPISpec\n path: string\n method: string\n}\n\nexport type OpenApiOperationProps = {\n specPath: string\n path: string\n method: string\n}\n\nfunction OpenApiHeader(arg0: OpenApiHeaderProps): ReactNode {\n const { spec } = arg0\n\n const t = useBuiltInText()\n return (\n <header className=\"mb-16\">\n <p className=\"mb-3 text-xs/6 font-medium tracking-widest text-emerald-500 uppercase dark:text-emerald-400\">\n {t('openapi.openApiReference')}\n </p>\n <h1>{spec.info?.title ?? t('openapi.apiDocumentation')}</h1>\n {spec.info?.description ? <Markdown className=\"lead *:first:mt-0 *:last:mb-0\">{spec.info.description}</Markdown> : null}\n {spec.info?.version ? <p className=\"text-sm text-zinc-500 dark:text-zinc-400\">{t('openapi.version', { version: spec.info.version })}</p> : null}\n </header>\n )\n}\n\nfunction operationMatchesTags(operationTags: string[] | undefined, filterTags: string[] | undefined): boolean {\n if (!filterTags?.length) return true\n return operationTags?.some(tag => filterTags.includes(tag)) ?? false\n}\n\nfunction OpenApiPaths(arg0: OpenApiPathsProps): ReactNode {\n const { spec, tagFilter } = arg0\n\n const entries = listOpenApiOperations(spec)\n .filter(({ operation }) => operationMatchesTags(operation.tags, tagFilter))\n .map(({ path, method, operation }) => ({\n path,\n method: method.toUpperCase(),\n operation,\n }))\n\n return (\n <div className=\"clarify-api-endpoints divide-y divide-zinc-200/70 dark:divide-white/10\">\n {entries.map(({ path, method, operation }) => (\n <OpenApiOperationComponent key={`${method}-${path}`} spec={spec} path={path} method={method} operation={operation} />\n ))}\n </div>\n )\n}\n\nfunction WarningBox(arg0: WarningBoxProps): ReactNode {\n const { children, tone = 'amber' } = arg0\n\n const classes = tone === 'red'\n ? 'rounded-lg border border-red-200 bg-red-50 p-4 text-sm text-red-700 dark:border-red-500/30 dark:bg-red-500/10 dark:text-red-200'\n : 'rounded-lg border border-amber-200 bg-amber-50 p-4 text-sm text-amber-700 dark:border-amber-500/30 dark:bg-amber-500/10 dark:text-amber-200'\n\n return <div className={`clarify-warning ${classes}`}>{children}</div>\n}\n\nexport function OpenApiDocument(arg0: OpenApiDocumentProps): ReactNode {\n const { spec, specPath, tagFilter } = arg0\n const t = useBuiltInText()\n const resolved = useOpenApiSpec(spec, specPath)\n\n if (!resolved) {\n return <WarningBox>{t('openapi.specNotFound', { specPath: specPath ?? t('openapi.specPathMissing') })}</WarningBox>\n }\n\n return (\n <article className=\"clarify-openapi-page flex h-full flex-col pt-16 pb-10\">\n <Prose className=\"flex-auto\">\n <OpenApiHeader spec={resolved} />\n <OpenApiPaths spec={resolved} tagFilter={tagFilter} />\n </Prose>\n </article>\n )\n}\n\nfunction OpenApiOperationWithSpec(arg0: OpenApiOperationWithSpecProps): ReactNode {\n const { spec, path, method } = arg0\n const t = useBuiltInText()\n const op = getOpenApiOperation(spec, path, method)\n\n if (!op) {\n return <WarningBox tone=\"red\">{t('openapi.endpointNotFound', { endpoint: `${method.toUpperCase()} ${path}` })}</WarningBox>\n }\n\n const normalizedMethod = method.toUpperCase()\n return <OpenApiOperationComponent key={`${normalizedMethod}-${path}`} spec={spec} path={path} method={normalizedMethod} operation={op} />\n}\n\nexport function OpenApiOperation(arg0: OpenApiOperationProps): ReactNode {\n const { specPath, path, method } = arg0\n const t = useBuiltInText()\n const spec = useOpenApiSpec(undefined, specPath)\n\n if (!spec) {\n return <WarningBox>{t('openapi.specNotFound', { specPath })}</WarningBox>\n }\n\n return <OpenApiOperationWithSpec spec={spec} path={path} method={method} />\n}\n","import { Collapse } from '../components/Collapse'\nimport { OpenApiDocument, OpenApiOperation } from '../openapi'\n\nimport { Markdown } from './Markdown'\nimport * as mdxPrimitives from './primitives'\n\nconst builtInMDXComponents = {\n ...mdxPrimitives,\n Markdown,\n Collapse,\n}\n\nconst builtInOpenAPIComponents = {\n OpenApiDocument,\n OpenApiOperation,\n}\n\nexport function useMDXComponents(components: Record<string, unknown> = {}) {\n return {\n ...components,\n ...builtInMDXComponents,\n ...builtInOpenAPIComponents,\n }\n}\n","import type { ReactNode } from 'react'\n\nimport { Prose } from '../components/Prose'\n\nexport type DocShellProps = {\n title: string\n subtitle?: string\n children: ReactNode\n}\n\nexport function DocShell(arg0: DocShellProps) {\n const { title, subtitle, children } = arg0\n\n return (\n <main className=\"clarify-doc-shell min-h-screen bg-(--clarify-theme-tokens-colors-background) px-6 py-10 text-(--clarify-theme-tokens-colors-foreground) md:px-10\">\n <div className=\"mx-auto max-w-6xl\">\n <header className=\"mb-10\">\n <h1 className=\"text-3xl font-bold tracking-tight md:text-5xl\">{title}</h1>\n {subtitle ? <p className=\"mt-3 max-w-2xl text-(--clarify-ui-text-soft)\">{subtitle}</p> : null}\n </header>\n <Prose>{children}</Prose>\n </div>\n </main>\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../source/openapi/lib/spec-path.ts","../source/openapi/lib/utils.ts","../source/openapi/entry.tsx","../source/mdx/components.ts","../source/mdx/DocShell.tsx"],"sourcesContent":["import { useLocation } from 'react-router-dom'\n\nimport { useConfig, useLocale, useOpenApis } from '../../core/context'\n\nimport type { OpenAPISpec } from './utils'\n\nconst VIRTUAL_PREFIX = 'virtual:clarify-page/'\n\nfunction resolveRelativePath(fromDir: string, to: string): string {\n const parts = (fromDir + '/' + to).split('/').filter(Boolean)\n const stack: string[] = []\n for (const part of parts) {\n if (part === '..') {\n stack.pop()\n } else if (part !== '.') {\n stack.push(part)\n }\n }\n return stack.join('/')\n}\n\nfunction normalizeSpecPath(specPath: string, currentRoutePath?: string, routePrefix = ''): string {\n if (specPath.startsWith(VIRTUAL_PREFIX)) return specPath\n\n const normalizedRoutePrefix = routePrefix.replace(/^\\/+|\\/+$/g, '')\n const normalizedSpecPath = specPath.startsWith('/') && normalizedRoutePrefix && specPath.slice(1).startsWith(`${normalizedRoutePrefix}/`)\n ? '/' + specPath.slice(normalizedRoutePrefix.length + 2)\n : specPath\n\n if (normalizedSpecPath.startsWith('/')) {\n return VIRTUAL_PREFIX + normalizedSpecPath.replace(/^\\//, '')\n }\n const fromDir = currentRoutePath === '/' ? '' : currentRoutePath?.replace(/^\\//, '').replace(/\\/[^/]*$/, '') ?? ''\n const normalizedFromDir = normalizedRoutePrefix && fromDir.startsWith(`${normalizedRoutePrefix}/`)\n ? fromDir.slice(normalizedRoutePrefix.length + 1)\n : fromDir\n return VIRTUAL_PREFIX + resolveRelativePath(normalizedFromDir, normalizedSpecPath)\n}\n\n/**\n * 为绝对 specPath 生成带 locale 前缀的候选模块 ID。\n *\n * 局部嵌入(OpenApiOperation / OpenApiDocument)通常使用 `/api` 这样的绝对路径。\n * 默认 locale 的 spec 注册在 `virtual:clarify-page/api`,而其他 locale 的 spec\n * 注册在 `virtual:clarify-page/<locale>/api`。相对路径会因为当前路由已含 locale 前缀\n * 而自动解析到正确的 spec,但绝对路径不会,因此这里显式注入 locale 前缀。\n */\nfunction localizeSpecModuleId(moduleId: string, specPath: string, locale: string | undefined, defaultLocale: string | undefined): string | undefined {\n if (!locale || locale === defaultLocale) return undefined\n // 仅处理绝对路径;相对路径已经基于含 locale 前缀的当前路由解析。\n if (!specPath.startsWith('/') || specPath.startsWith(VIRTUAL_PREFIX)) return undefined\n const rest = moduleId.slice(VIRTUAL_PREFIX.length)\n if (rest.startsWith(`${locale}/`) || rest === locale) return undefined\n return `${VIRTUAL_PREFIX}${locale}/${rest}`\n}\n\nexport function useOpenApiSpec(spec?: OpenAPISpec, specPath?: string): OpenAPISpec | null {\n const specs = useOpenApis()\n const location = useLocation()\n const config = useConfig()\n const locale = useLocale()\n\n if (spec) return spec\n if (!specPath) return null\n\n const normalized = normalizeSpecPath(specPath, location.pathname, config.routePrefix)\n const localized = localizeSpecModuleId(normalized, specPath, locale, config.i18n?.defaultLocale)\n\n if (localized && specs[localized]) return specs[localized]\n return specs[normalized] ?? null\n}\n","import type { OpenAPIV3, OpenAPIV3_1 } from 'openapi-types'\n\nimport type { OpenApiRecord } from '../types'\n\nexport type OpenAPISpec = OpenAPIV3.Document | OpenAPIV3_1.Document\nexport type OpenAPIOperation = OpenAPIV3.OperationObject | OpenAPIV3_1.OperationObject\n\nexport const OPENAPI_HTTP_METHODS = ['get', 'put', 'post', 'delete', 'options', 'head', 'patch', 'trace'] as const\n\nexport type OpenAPIHttpMethod = typeof OPENAPI_HTTP_METHODS[number]\n\nexport function isOpenAPIHttpMethod(method: string): method is OpenAPIHttpMethod {\n return (OPENAPI_HTTP_METHODS as readonly string[]).includes(method.toLowerCase())\n}\n\nfunction isRecord(value: unknown): value is OpenApiRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction resolveOpenApiRef(spec: OpenAPISpec, ref: string): unknown {\n if (!ref.startsWith('#/')) return undefined\n\n return ref\n .slice(2)\n .split('/')\n .map((part) => part.replace(/~1/g, '/').replace(/~0/g, '~'))\n .reduce<unknown>((current, part) => (isRecord(current) ? current[part] : undefined), spec)\n}\n\nfunction getPathItem(spec: OpenAPISpec, path: string): OpenApiRecord | undefined {\n const pathItem = spec.paths?.[path]\n const resolved = isRecord(pathItem) && typeof pathItem.$ref === 'string' ? resolveOpenApiRef(spec, pathItem.$ref) : pathItem\n return isRecord(resolved) ? resolved : undefined\n}\n\nexport function getOpenApiOperation(spec: OpenAPISpec, path: string, method: string): OpenAPIOperation | undefined {\n if (!isOpenAPIHttpMethod(method)) return undefined\n return getPathItem(spec, path)?.[method.toLowerCase() as OpenAPIHttpMethod] as OpenAPIOperation | undefined\n}\n\nexport function listOpenApiOperations(spec: OpenAPISpec): Array<{ path: string; method: OpenAPIHttpMethod; operation: OpenAPIOperation }> {\n const paths = spec.paths ?? {}\n const operations: Array<{ path: string; method: OpenAPIHttpMethod; operation: OpenAPIOperation }> = []\n\n for (const path of Object.keys(paths)) {\n const pathItem = getPathItem(spec, path)\n if (!pathItem) continue\n for (const method of OPENAPI_HTTP_METHODS) {\n const operation = pathItem[method]\n if (operation) operations.push({ path, method, operation: operation as OpenAPIOperation })\n }\n }\n\n return operations\n}\n","import type { ReactNode } from 'react'\n\nimport { PageTitleActions } from '../app/PageActions'\nimport { Prose } from '../components/Prose'\nimport { useBuiltInText } from '../core/i18n'\nimport { Markdown } from '../mdx/Markdown'\n\nimport { OpenApiOperation as OpenApiOperationComponent } from './components/OpenApiOperation'\nimport { useOpenApiSpec } from './lib/spec-path'\nimport { getOpenApiOperation, listOpenApiOperations } from './lib/utils'\nimport type { OpenAPISpec } from './lib/utils'\n\ntype OpenApiPathsProps = { spec: OpenAPISpec; tagFilter?: string[] }\n\ntype OpenApiHeaderProps = { spec: OpenAPISpec }\n\ntype WarningBoxProps = {\n children: ReactNode\n tone?: 'amber' | 'red'\n}\n\nexport type OpenApiDocumentProps = {\n spec?: OpenAPISpec\n specPath?: string\n tagFilter?: string[]\n}\n\ntype OpenApiOperationWithSpecProps = {\n spec: OpenAPISpec\n path: string\n method: string\n}\n\nexport type OpenApiOperationProps = {\n specPath: string\n path: string\n method: string\n}\n\nfunction OpenApiHeader(arg0: OpenApiHeaderProps): ReactNode {\n const { spec } = arg0\n\n const t = useBuiltInText()\n return (\n <header className=\"clarify-openapi-header mb-16 border-b border-(--clarify-theme-tokens-colors-border) pb-8\">\n <p className=\"mb-3 text-xs/6 font-medium tracking-widest text-(--clarify-ui-accent-text) uppercase\">\n {t('openapi.openApiReference')}\n </p>\n <div className=\"clarify-page-title-row flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between\">\n <h1 className=\"clarify-page-title min-w-0 flex-1\">{spec.info?.title ?? t('openapi.apiDocumentation')}</h1>\n <PageTitleActions />\n </div>\n {spec.info?.description ? <Markdown className=\"lead mt-4 *:first:mt-0 *:last:mb-0\">{spec.info.description}</Markdown> : null}\n {spec.info?.version ? <p className=\"mt-4 text-sm text-(--clarify-ui-text-faint)\">{t('openapi.version', { version: spec.info.version })}</p> : null}\n </header>\n )\n}\n\nfunction operationMatchesTags(operationTags: string[] | undefined, filterTags: string[] | undefined): boolean {\n if (!filterTags?.length) return true\n return operationTags?.some(tag => filterTags.includes(tag)) ?? false\n}\n\nfunction OpenApiPaths(arg0: OpenApiPathsProps): ReactNode {\n const { spec, tagFilter } = arg0\n\n const entries = listOpenApiOperations(spec)\n .filter(({ operation }) => operationMatchesTags(operation.tags, tagFilter))\n .map(({ path, method, operation }) => ({\n path,\n method: method.toUpperCase(),\n operation,\n }))\n\n return (\n <div className=\"clarify-api-endpoints divide-y divide-zinc-200/70 dark:divide-white/10\">\n {entries.map(({ path, method, operation }) => (\n <OpenApiOperationComponent key={`${method}-${path}`} spec={spec} path={path} method={method} operation={operation} />\n ))}\n </div>\n )\n}\n\nfunction WarningBox(arg0: WarningBoxProps): ReactNode {\n const { children, tone = 'amber' } = arg0\n\n const classes = tone === 'red'\n ? 'rounded-lg border border-red-200 bg-red-50 p-4 text-sm text-red-700 dark:border-red-500/30 dark:bg-red-500/10 dark:text-red-200'\n : 'rounded-lg border border-amber-200 bg-amber-50 p-4 text-sm text-amber-700 dark:border-amber-500/30 dark:bg-amber-500/10 dark:text-amber-200'\n\n return <div className={`clarify-warning ${classes}`}>{children}</div>\n}\n\nexport function OpenApiDocument(arg0: OpenApiDocumentProps): ReactNode {\n const { spec, specPath, tagFilter } = arg0\n const t = useBuiltInText()\n const resolved = useOpenApiSpec(spec, specPath)\n\n if (!resolved) {\n return <WarningBox>{t('openapi.specNotFound', { specPath: specPath ?? t('openapi.specPathMissing') })}</WarningBox>\n }\n\n return (\n <article className=\"clarify-openapi-page flex h-full flex-col pt-16 pb-10\">\n <Prose className=\"flex-auto\">\n <OpenApiHeader spec={resolved} />\n <OpenApiPaths spec={resolved} tagFilter={tagFilter} />\n </Prose>\n </article>\n )\n}\n\nfunction OpenApiOperationWithSpec(arg0: OpenApiOperationWithSpecProps): ReactNode {\n const { spec, path, method } = arg0\n const t = useBuiltInText()\n const op = getOpenApiOperation(spec, path, method)\n\n if (!op) {\n return <WarningBox tone=\"red\">{t('openapi.endpointNotFound', { endpoint: `${method.toUpperCase()} ${path}` })}</WarningBox>\n }\n\n const normalizedMethod = method.toUpperCase()\n return <OpenApiOperationComponent key={`${normalizedMethod}-${path}`} spec={spec} path={path} method={normalizedMethod} operation={op} />\n}\n\nexport function OpenApiOperation(arg0: OpenApiOperationProps): ReactNode {\n const { specPath, path, method } = arg0\n const t = useBuiltInText()\n const spec = useOpenApiSpec(undefined, specPath)\n\n if (!spec) {\n return <WarningBox>{t('openapi.specNotFound', { specPath })}</WarningBox>\n }\n\n return <OpenApiOperationWithSpec spec={spec} path={path} method={method} />\n}\n","import { Collapse } from '../components/Collapse'\nimport { OpenApiDocument, OpenApiOperation } from '../openapi'\n\nimport { Markdown } from './Markdown'\nimport * as mdxPrimitives from './primitives'\n\nconst builtInMDXComponents = {\n ...mdxPrimitives,\n Markdown,\n Collapse,\n}\n\nconst builtInOpenAPIComponents = {\n OpenApiDocument,\n OpenApiOperation,\n}\n\nexport function useMDXComponents(components: Record<string, unknown> = {}) {\n return {\n ...components,\n ...builtInMDXComponents,\n ...builtInOpenAPIComponents,\n }\n}\n","import type { ReactNode } from 'react'\n\nimport { Prose } from '../components/Prose'\n\nexport type DocShellProps = {\n title: string\n subtitle?: string\n children: ReactNode\n}\n\nexport function DocShell(arg0: DocShellProps) {\n const { title, subtitle, children } = arg0\n\n return (\n <main className=\"clarify-doc-shell min-h-screen bg-(--clarify-theme-tokens-colors-background) px-6 py-10 text-(--clarify-theme-tokens-colors-foreground) md:px-10\">\n <div className=\"mx-auto max-w-6xl\">\n <header className=\"mb-10\">\n <h1 className=\"text-3xl font-bold tracking-tight md:text-5xl\">{title}</h1>\n {subtitle ? <p className=\"mt-3 max-w-2xl text-(--clarify-ui-text-soft)\">{subtitle}</p> : null}\n </header>\n <Prose>{children}</Prose>\n </div>\n </main>\n )\n}\n"],"mappings":"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"}
|
|
@@ -11,6 +11,7 @@ export declare function useMDXComponents(components?: Record<string, unknown>):
|
|
|
11
11
|
children: import('react').ReactNode;
|
|
12
12
|
}): import("react").JSX.Element;
|
|
13
13
|
a(arg0: import('react').ComponentPropsWithoutRef<"a">): import("react").JSX.Element;
|
|
14
|
+
h1(arg0: import('react').ComponentPropsWithoutRef<"h1">): import("react").JSX.Element;
|
|
14
15
|
h2(props: Omit<import('react').ComponentPropsWithoutRef<typeof import('..').Heading>, "level">): import('react').FunctionComponentElement<Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>, "ref"> & {
|
|
15
16
|
id: string;
|
|
16
17
|
tag?: string;
|
|
@@ -50,4 +51,5 @@ export declare function useMDXComponents(components?: Record<string, unknown>):
|
|
|
50
51
|
Card: typeof mdxPrimitives.Card;
|
|
51
52
|
CardGroup: typeof mdxPrimitives.CardGroup;
|
|
52
53
|
CodeGroup: typeof mdxPrimitives.CodeGroup;
|
|
54
|
+
WebFrame: typeof mdxPrimitives.WebFrame;
|
|
53
55
|
};
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { ComponentPropsWithoutRef, ReactNode } from 'react';
|
|
2
|
-
import { Button, Callout, Card, CardGroup, Heading } from '../components';
|
|
2
|
+
import { Button, Callout, Card, CardGroup, Heading, WebFrame } from '../components';
|
|
3
3
|
import { Code, CodeGroup, Pre } from '../components/Code';
|
|
4
4
|
type WrapperProps = {
|
|
5
5
|
children: ReactNode;
|
|
6
6
|
};
|
|
7
7
|
export declare function wrapper(arg0: WrapperProps): import("react").JSX.Element;
|
|
8
8
|
export declare function a(arg0: ComponentPropsWithoutRef<'a'>): import("react").JSX.Element;
|
|
9
|
+
export declare function h1(arg0: ComponentPropsWithoutRef<'h1'>): import("react").JSX.Element;
|
|
9
10
|
export declare const code: typeof Code;
|
|
10
11
|
export declare const pre: typeof Pre;
|
|
11
|
-
export { Button, Callout, Card, CardGroup, CodeGroup };
|
|
12
|
+
export { Button, Callout, Card, CardGroup, CodeGroup, WebFrame };
|
|
12
13
|
export declare function h2(props: Omit<ComponentPropsWithoutRef<typeof Heading>, 'level'>): import('react').FunctionComponentElement<Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>, "ref"> & {
|
|
13
14
|
id: string;
|
|
14
15
|
tag?: string;
|
package/output/preview.cjs
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const
|
|
3
|
-
const require_OpenApiOperation = require("./OpenApiOperation-
|
|
2
|
+
const require_PageActions = require("./PageActions-1RDCHcUY.cjs");
|
|
3
|
+
const require_OpenApiOperation = require("./OpenApiOperation-C4xZu4i0.cjs");
|
|
4
4
|
let react = require("react");
|
|
5
5
|
let react_router_dom = require("react-router-dom");
|
|
6
|
+
let lucide_react = require("lucide-react");
|
|
6
7
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
8
|
//#region source/preview/openapi.tsx
|
|
8
9
|
function schemaFromType(type) {
|
|
@@ -391,13 +392,13 @@ function PreviewEnvironment(arg0) {
|
|
|
391
392
|
const { children, initialEntry = "/preview", sections = [] } = arg0;
|
|
392
393
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_router_dom.MemoryRouter, {
|
|
393
394
|
initialEntries: [initialEntry],
|
|
394
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
395
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_PageActions.ConfigContext.Provider, {
|
|
395
396
|
value: previewConfig,
|
|
396
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
397
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_PageActions.LocaleContext.Provider, {
|
|
397
398
|
value: previewConfig.i18n.defaultLocale,
|
|
398
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
399
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_PageActions.OpenApisContext.Provider, {
|
|
399
400
|
value: {},
|
|
400
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
401
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_PageActions.SectionProvider, {
|
|
401
402
|
sections,
|
|
402
403
|
children
|
|
403
404
|
})
|
|
@@ -407,7 +408,7 @@ function PreviewEnvironment(arg0) {
|
|
|
407
408
|
});
|
|
408
409
|
}
|
|
409
410
|
function Chrome(arg0) {
|
|
410
|
-
const { title, status, children } = arg0;
|
|
411
|
+
const { title, status, headerAction, children } = arg0;
|
|
411
412
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
412
413
|
className: "clarify-app clarify-preview h-full overflow-hidden bg-(--clarify-theme-tokens-colors-background) text-(--clarify-ui-text) shadow-2xl ring-1 ring-(--clarify-theme-tokens-colors-border) dark:bg-zinc-950 dark:text-white dark:ring-white/10",
|
|
413
414
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
@@ -417,13 +418,14 @@ function Chrome(arg0) {
|
|
|
417
418
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: "size-2 rounded-full bg-amber-400" }),
|
|
418
419
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: "size-2 rounded-full bg-emerald-400" }),
|
|
419
420
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
420
|
-
className: "ml-2 truncate font-medium text-(--clarify-ui-text-soft)",
|
|
421
|
+
className: "ml-2 min-w-0 flex-1 truncate font-medium text-(--clarify-ui-text-soft)",
|
|
421
422
|
children: title
|
|
422
423
|
}),
|
|
423
424
|
status ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
424
|
-
className: "
|
|
425
|
+
className: "hidden rounded-full bg-emerald-400/15 px-2 py-0.5 font-medium text-emerald-700 sm:inline dark:text-emerald-300",
|
|
425
426
|
children: status
|
|
426
|
-
}) : null
|
|
427
|
+
}) : null,
|
|
428
|
+
headerAction
|
|
427
429
|
]
|
|
428
430
|
}), children]
|
|
429
431
|
});
|
|
@@ -479,15 +481,32 @@ function createPreviewNavigation(arg0) {
|
|
|
479
481
|
];
|
|
480
482
|
}
|
|
481
483
|
function PreviewNavigation(arg0) {
|
|
482
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
484
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_PageActions.Navigation, {
|
|
483
485
|
navigation: createPreviewNavigation(arg0),
|
|
484
486
|
className: "px-2"
|
|
485
487
|
});
|
|
486
488
|
}
|
|
489
|
+
function MainPreviewMobileNavigation(arg0) {
|
|
490
|
+
const { isOpen, onClose, ...navigationProps } = arg0;
|
|
491
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
492
|
+
className: "clarify-preview-mobile-navigation pointer-events-none absolute inset-0 z-20",
|
|
493
|
+
children: [isOpen ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
494
|
+
type: "button",
|
|
495
|
+
className: "absolute inset-0 bg-zinc-950/20 backdrop-blur-[1px] dark:bg-black/30",
|
|
496
|
+
"aria-label": "Close documentation menu",
|
|
497
|
+
onClick: onClose
|
|
498
|
+
}) : null, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("aside", {
|
|
499
|
+
id: "clarify-main-preview-mobile-navigation",
|
|
500
|
+
className: "pointer-events-auto absolute top-0 bottom-0 left-0 w-64 max-w-[82%] overflow-y-auto border-r border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-background) px-1 py-4 text-sm/7 shadow-2xl shadow-zinc-900/20 transition-transform duration-200 ease-out data-closed:-translate-x-full dark:border-white/10 dark:bg-zinc-950 dark:shadow-black/40",
|
|
501
|
+
"data-closed": !isOpen ? "true" : void 0,
|
|
502
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PreviewNavigation, { ...navigationProps })
|
|
503
|
+
})]
|
|
504
|
+
});
|
|
505
|
+
}
|
|
487
506
|
function PreviewMetricGrid(arg0) {
|
|
488
507
|
const { metrics } = arg0;
|
|
489
508
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
490
|
-
className: "grid grid-cols-
|
|
509
|
+
className: "grid grid-cols-1 gap-2 sm:grid-cols-3",
|
|
491
510
|
children: metrics.map((metric) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
492
511
|
className: "rounded-xl border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-surface) p-2.5 shadow-sm dark:border-white/10 dark:bg-zinc-900/50",
|
|
493
512
|
children: [
|
|
@@ -620,22 +639,41 @@ function MainContentPreview() {
|
|
|
620
639
|
});
|
|
621
640
|
}
|
|
622
641
|
function MainPreview() {
|
|
642
|
+
const [isMobileNavigationOpen, setMobileNavigationOpen] = (0, react.useState)(false);
|
|
643
|
+
const navigationProps = {
|
|
644
|
+
endpoint: embeddedEndpoint,
|
|
645
|
+
guide: embeddedGuide,
|
|
646
|
+
outputs: embeddedGuide.outputs ?? []
|
|
647
|
+
};
|
|
623
648
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PreviewEnvironment, {
|
|
624
649
|
initialEntry: mainPreviewPath,
|
|
625
650
|
sections: mainPreviewSections,
|
|
626
651
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Chrome, {
|
|
627
652
|
title: "source/en-US/openapi/embedding.mdx",
|
|
628
653
|
status: "Rendered from OpenAPI + MDX",
|
|
654
|
+
headerAction: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
655
|
+
type: "button",
|
|
656
|
+
className: "clarify-preview-mobile-menu-button -my-1 flex size-7 items-center justify-center rounded-(--clarify-theme-tokens-radius-md) text-(--clarify-ui-text-strong) transition hover:bg-(--clarify-ui-hover-background)",
|
|
657
|
+
"aria-controls": "clarify-main-preview-mobile-navigation",
|
|
658
|
+
"aria-expanded": isMobileNavigationOpen,
|
|
659
|
+
"aria-label": isMobileNavigationOpen ? "Close documentation menu" : "Open documentation menu",
|
|
660
|
+
onClick: () => setMobileNavigationOpen((value) => !value),
|
|
661
|
+
children: isMobileNavigationOpen ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.X, { className: "h-4 w-4 shrink-0" }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Menu, { className: "h-4 w-4 shrink-0" })
|
|
662
|
+
}),
|
|
629
663
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
630
|
-
className: "clarify-preview-shell grid",
|
|
631
|
-
children: [
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
664
|
+
className: "clarify-preview-shell relative grid overflow-hidden",
|
|
665
|
+
children: [
|
|
666
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(MainPreviewMobileNavigation, {
|
|
667
|
+
...navigationProps,
|
|
668
|
+
isOpen: isMobileNavigationOpen,
|
|
669
|
+
onClose: () => setMobileNavigationOpen(false)
|
|
670
|
+
}),
|
|
671
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("aside", {
|
|
672
|
+
className: "clarify-preview-sidebar border-r border-(--clarify-theme-tokens-colors-border) px-1 py-4 text-sm/7 dark:border-white/10 dark:bg-white/5",
|
|
673
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PreviewNavigation, { ...navigationProps })
|
|
674
|
+
}),
|
|
675
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(MainContentPreview, {})
|
|
676
|
+
]
|
|
639
677
|
})
|
|
640
678
|
})
|
|
641
679
|
});
|
|
@@ -645,7 +683,7 @@ function MdxPreview() {
|
|
|
645
683
|
title: "source/started/index.mdx",
|
|
646
684
|
status: "Rendered by renderer",
|
|
647
685
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
648
|
-
className: "clarify-preview-body overflow-hidden bg-(--clarify-theme-tokens-colors-background) p-5 dark:bg-zinc-950",
|
|
686
|
+
className: "clarify-preview-body overflow-x-hidden overflow-y-auto bg-(--clarify-theme-tokens-colors-background) p-4 sm:p-5 dark:bg-zinc-950",
|
|
649
687
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("article", {
|
|
650
688
|
className: "max-w-3xl text-sm/7 text-(--clarify-ui-text-soft)",
|
|
651
689
|
children: [
|
|
@@ -654,7 +692,7 @@ function MdxPreview() {
|
|
|
654
692
|
children: "MDX page"
|
|
655
693
|
}),
|
|
656
694
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h2", {
|
|
657
|
-
className: "mt-3 text-
|
|
695
|
+
className: "mt-3 text-xl/7 font-semibold tracking-tight text-(--clarify-ui-text-strong) sm:text-2xl/8",
|
|
658
696
|
children: "Get Started"
|
|
659
697
|
}),
|
|
660
698
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
@@ -662,7 +700,7 @@ function MdxPreview() {
|
|
|
662
700
|
children: "Write pages in source/. Clarify turns MDX, config, and OpenAPI files into routes."
|
|
663
701
|
}),
|
|
664
702
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
665
|
-
className: "mt-
|
|
703
|
+
className: "mt-4 rounded-2xl border border-(--clarify-ui-accent-border) bg-(--clarify-ui-accent-background) p-4 text-sm/6 text-(--clarify-ui-text-strong) sm:mt-5",
|
|
666
704
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
667
705
|
className: "font-semibold text-(--clarify-ui-text-strong)",
|
|
668
706
|
children: "Static output ready"
|
|
@@ -672,7 +710,7 @@ function MdxPreview() {
|
|
|
672
710
|
})]
|
|
673
711
|
}),
|
|
674
712
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
675
|
-
className: "mt-
|
|
713
|
+
className: "mt-4 grid gap-3 sm:mt-5 sm:grid-cols-2 sm:gap-4",
|
|
676
714
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
677
715
|
className: "rounded-2xl border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-surface) p-5 shadow-sm dark:border-white/10 dark:bg-zinc-900/50",
|
|
678
716
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
|
|
@@ -716,11 +754,11 @@ function OpenApiPreview() {
|
|
|
716
754
|
title: "source/api.openapi.json",
|
|
717
755
|
status: "Endpoint + examples",
|
|
718
756
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
719
|
-
className: "clarify-preview-openapi-window overflow-hidden bg-(--clarify-theme-tokens-colors-background) px-4 py-4 dark:bg-zinc-950",
|
|
757
|
+
className: "clarify-preview-openapi-window overflow-x-hidden overflow-y-auto bg-(--clarify-theme-tokens-colors-background) px-3 py-3 sm:px-4 sm:py-4 dark:bg-zinc-950",
|
|
720
758
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
721
|
-
className: "clarify-preview-openapi-mask h-full
|
|
759
|
+
className: "clarify-preview-openapi-mask min-h-full",
|
|
722
760
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
723
|
-
className: "clarify-preview-api-content clarify-preview-api-content-openapi origin-top pb-10",
|
|
761
|
+
className: "clarify-preview-api-content clarify-preview-api-content-openapi origin-top pb-6 sm:pb-10",
|
|
724
762
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(OpenApiExamplesPreview, { endpoint: staticOutputEndpoint })
|
|
725
763
|
})
|
|
726
764
|
})
|
package/output/preview.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview.cjs","names":[],"sources":["../source/preview/openapi.tsx","../source/preview.tsx"],"sourcesContent":["import { useState } from 'react'\n\nimport { authPlaceholder, defaultServerVariables, getAuthOptions, getServerKey, getServers, RequestExamplesPanel, ResponseExamplesPanel } from '../openapi/components/ExamplePanels'\nimport { EndpointIdentity } from '../openapi/components/OpenApiOperation'\nimport { getMediaTypeEntries, getRequestBody } from '../openapi/lib/helpers'\nimport type { OpenAPIOperation, OpenAPISpec } from '../openapi/lib/utils'\nimport type { OpenApiParameter, RequestAuthInput } from '../openapi/types'\n\nexport type PreviewParameter = {\n name: string\n in: string\n type: string\n required?: boolean\n description?: string\n schema?: unknown\n}\n\nexport type PreviewEndpoint = {\n method: string\n path: string\n summary: string\n description: string\n parameters?: PreviewParameter[]\n requestDescription?: string\n requestSchema?: unknown\n requestExample?: unknown\n response?: string\n responseStatus?: string\n responseDescription?: string\n responseSchema?: unknown\n responseExample?: unknown\n}\n\ntype CreatePreviewOpenApiResult = {\n operation: OpenAPIOperation\n spec: OpenAPISpec\n parameters: OpenApiParameter[]\n}\n\ntype OpenApiExamplesPreviewProps = { endpoint: PreviewEndpoint }\n\nfunction schemaFromType(type: string): unknown {\n if (type.endsWith('[]')) return { type: 'array', items: schemaFromType(type.slice(0, -2)) }\n if (type === 'number' || type === 'integer' || type === 'boolean' || type === 'object') return { type }\n return { type: 'string' }\n}\n\nfunction parseResponseExample(endpoint: PreviewEndpoint): unknown {\n if (typeof endpoint.responseExample !== 'undefined') return endpoint.responseExample\n if (!endpoint.response) return undefined\n\n try {\n return JSON.parse(endpoint.response)\n } catch {\n return endpoint.response\n }\n}\n\nfunction inferSchemaFromExample(example: unknown): unknown {\n if (Array.isArray(example)) {\n return { type: 'array', items: inferSchemaFromExample(example[0]) ?? { type: 'object' } }\n }\n\n if (typeof example === 'object' && example !== null) {\n return {\n type: 'object',\n properties: Object.fromEntries(Object.entries(example).map(([key, value]) => [key, inferSchemaFromExample(value)])),\n }\n }\n\n if (typeof example === 'number') return { type: Number.isInteger(example) ? 'integer' : 'number' }\n if (typeof example === 'boolean') return { type: 'boolean' }\n return typeof example === 'undefined' ? undefined : { type: 'string' }\n}\n\nfunction normalizeParameterLocation(location: string): string {\n return location === 'route' ? 'path' : location\n}\n\nfunction toOpenApiParameter(parameter: PreviewParameter): OpenApiParameter {\n return {\n name: parameter.name,\n in: normalizeParameterLocation(parameter.in),\n required: parameter.required,\n description: parameter.description,\n schema: parameter.schema ?? schemaFromType(parameter.type),\n }\n}\n\nfunction createPreviewOpenApi(endpoint: PreviewEndpoint): CreatePreviewOpenApiResult {\n const method = endpoint.method.toLowerCase()\n const parameters = (endpoint.parameters ?? []).map(toOpenApiParameter)\n const responseExample = parseResponseExample(endpoint)\n const responseSchema = endpoint.responseSchema ?? inferSchemaFromExample(responseExample)\n const requestSchema = endpoint.requestSchema ?? inferSchemaFromExample(endpoint.requestExample)\n const operation = {\n summary: endpoint.summary,\n description: endpoint.description,\n parameters,\n requestBody: requestSchema\n ? {\n description: endpoint.requestDescription,\n required: true,\n content: {\n 'application/json': {\n schema: requestSchema,\n example: endpoint.requestExample,\n },\n },\n }\n : undefined,\n responses: {\n [endpoint.responseStatus ?? '200']: {\n description: endpoint.responseDescription ?? 'OK',\n content: {\n 'application/json': {\n schema: responseSchema,\n example: responseExample,\n },\n },\n },\n },\n } as OpenAPIOperation\n const spec = {\n openapi: '3.1.0',\n info: {\n title: 'Clarify Build API',\n version: '2026-06-20',\n description: 'API reference generated from OpenAPI and rendered as static documentation.',\n },\n servers: [\n {\n url: 'https://server',\n description: 'Production',\n },\n {\n url: 'https://test-server',\n description: 'Test',\n },\n ],\n components: {\n securitySchemes: {\n bearerAuth: {\n type: 'http',\n scheme: 'bearer',\n bearerFormat: 'JWT',\n },\n },\n },\n security: [{ bearerAuth: [] }],\n paths: {\n [endpoint.path]: {\n [method]: operation,\n },\n },\n } as OpenAPISpec\n\n return { operation, spec, parameters }\n}\n\nexport function OpenApiExamplesPreview(arg0: OpenApiExamplesPreviewProps) {\n const { endpoint } = arg0\n const { operation, spec, parameters } = createPreviewOpenApi(endpoint)\n const method = endpoint.method.toUpperCase()\n const requestBody = getRequestBody(spec, operation)\n const requestContents = getMediaTypeEntries(requestBody?.content, spec)\n const [selectedRequestMediaType, setSelectedRequestMediaType] = useState(requestContents[0]?.mediaType ?? '')\n const selectedRequestContent = requestContents.find((content) => content.mediaType === selectedRequestMediaType) ?? requestContents[0]\n const servers = getServers(spec, operation, endpoint.path)\n const [selectedServerKey, setSelectedServerKey] = useState(getServerKey(servers[0], 0))\n const selectedServer = servers.find((server, index) => getServerKey(server, index) === selectedServerKey) ?? servers[0]\n const [serverVariables, setServerVariables] = useState(defaultServerVariables(selectedServer))\n const [serverOpen, setServerOpen] = useState(false)\n const authOptions = getAuthOptions(spec, operation)\n const [selectedAuthName, setSelectedAuthName] = useState(authOptions[0]?.name ?? '')\n const selectedAuth = authOptions.find((option) => option.name === selectedAuthName)\n const [authValues, setAuthValues] = useState<Record<string, string>>({})\n const [authOpen, setAuthOpen] = useState(false)\n const authInput: RequestAuthInput | undefined = selectedAuth\n ? { name: selectedAuth.name, scheme: selectedAuth.scheme, value: authValues[selectedAuth.name] ?? authPlaceholder(selectedAuth) }\n : undefined\n\n return (\n <div className=\"space-y-4\">\n <EndpointIdentity\n method={method}\n path={endpoint.path}\n servers={servers}\n selectedServerKey={selectedServerKey}\n selectedServer={selectedServer}\n serverVariables={serverVariables}\n serverOpen={serverOpen}\n authOptions={authOptions}\n selectedAuthName={selectedAuthName}\n selectedAuth={selectedAuth}\n authValues={authValues}\n authOpen={authOpen}\n onSelectServer={(value) => {\n const nextServer = servers.find((server, index) => getServerKey(server, index) === value) ?? servers[0]\n setSelectedServerKey(value)\n setServerVariables(defaultServerVariables(nextServer))\n }}\n onChangeServerVariable={(name, value) => setServerVariables((current) => ({ ...current, [name]: value }))}\n onToggleServer={() => {\n setServerOpen((current) => !current)\n setAuthOpen(false)\n }}\n onToggleAuth={() => {\n setAuthOpen((current) => !current)\n setServerOpen(false)\n }}\n onSelectAuth={setSelectedAuthName}\n onChangeAuthValue={(name, value) => setAuthValues((current) => ({ ...current, [name]: value }))}\n />\n <div className=\"grid min-w-0 gap-4 lg:grid-cols-2\">\n <RequestExamplesPanel\n spec={spec}\n path={endpoint.path}\n method={method}\n parameters={parameters}\n requestContents={requestContents}\n selectedMediaType={selectedRequestContent?.mediaType ?? ''}\n onSelectMediaType={setSelectedRequestMediaType}\n selectedServer={selectedServer}\n serverVariables={serverVariables}\n auth={authInput}\n />\n <ResponseExamplesPanel operation={operation} spec={spec} />\n </div>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { MemoryRouter } from 'react-router-dom'\n\nimport { SectionProvider } from './app/SectionProvider'\nimport type { Section } from './app/SectionProvider'\nimport { ClarifyConfigContext, ClarifyLocaleContext, OpenApisContext } from './context'\nimport { OpenApiExamplesPreview } from './preview/openapi'\nimport type { PreviewEndpoint } from './preview/openapi'\nimport { Navigation } from './shell'\nimport type { ClarifyConfig, NavigationNode } from './types'\n\nexport type PreviewGuide = {\n label: string\n title: string\n body: string\n embed: string\n outputs?: string[]\n}\n\nexport type PreviewMetric = {\n label: string\n value: string\n hint?: string\n}\n\nexport type PreviewCard = {\n title: string\n description: string\n}\n\nconst embeddedEndpoint = {\n method: 'GET',\n path: '/examples/basic-request',\n summary: 'Basic request',\n description: 'Rendered from api.openapi.json inside the MDX guide.',\n parameters: [\n { name: 'cursor', in: 'query', type: 'string', description: 'Start after this cursor.' },\n { name: 'limit', in: 'query', type: 'integer', description: 'Max items to return.' },\n { name: 'X-Trace-Id', in: 'header', type: 'string', description: 'Optional request trace.' },\n ],\n responseDescription: 'A page of example records.',\n responseSchema: {\n type: 'object',\n required: ['items'],\n properties: {\n items: { type: 'array', items: { type: 'object' } },\n next: { type: 'string' },\n },\n },\n responseExample: {\n items: [],\n next: 'cursor_2',\n },\n} satisfies PreviewEndpoint\n\nconst embeddedGuide = {\n label: 'source/en-US/openapi/embedding.mdx',\n title: 'Embed OpenAPI in MDX',\n body: 'Use MDX for workflow context, then render the exact operation from the spec.',\n embed: '<OpenApiOperation specPath=\"/api\" path=\"/examples/basic-request\" method=\"get\" />',\n outputs: ['/openapi/embedding', '/api', '/api.openapi.json', '/llms.txt'],\n} satisfies PreviewGuide\n\nconst staticOutputEndpoint = {\n method: 'POST',\n path: '/api/{id}/path',\n summary: 'Create static build',\n description: 'Build static docs from MDX and OpenAPI sources.',\n parameters: [\n { name: 'id', in: 'path', type: 'string', required: true, description: 'Project ID.' }\n ],\n responseDescription: 'Build metadata and static outputs.',\n responseSchema: {\n type: 'object',\n required: ['id', 'status', 'outputs'],\n properties: {\n id: { type: 'string', description: 'Build identifier.' },\n status: { type: 'string', enum: ['queued', 'running', 'ready'], description: 'Current build state.' },\n outputs: {\n type: 'array',\n description: 'Generated static artifacts.',\n items: {\n type: 'object',\n required: ['path', 'kind'],\n properties: {\n path: { type: 'string' },\n kind: { type: 'string', enum: ['html', 'asset', 'openapi', 'llms'] },\n },\n },\n },\n },\n },\n requestDescription: 'Static build options.',\n requestSchema: {\n type: 'object',\n required: ['source', 'output'],\n properties: {\n source: { type: 'string', description: 'MDX source root.' },\n output: { type: 'string', description: 'Static output root.' },\n includeSearchIndex: { type: 'boolean', description: 'Generate search data.' },\n },\n },\n requestExample: {\n source: 'source',\n output: 'output',\n includeSearchIndex: true,\n },\n responseExample: {\n id: 'build_01HY',\n status: 'ready',\n outputs: [\n { path: '/openapi/index.html', kind: 'html' },\n { path: '/api.openapi.json', kind: 'openapi' },\n { path: '/llms.txt', kind: 'llms' },\n ],\n },\n} satisfies PreviewEndpoint\n\nconst previewConfig = {\n title: 'Clarify preview',\n description: 'Renderer preview environment',\n rootDirectory: 'source',\n routePrefix: '/',\n outputDirectory: 'output',\n theme: {\n preset: 'default',\n tokens: {\n colors: {\n primary: '#2563eb',\n accent: '#60a5fa',\n background: '#ffffff',\n foreground: '#18181b',\n surface: '#ffffff',\n muted: '#71717a',\n border: 'rgb(24 24 27 / 0.1)',\n codeBackground: '#f4f4f5',\n },\n radius: {\n sm: '0.375rem',\n md: '0.5rem',\n lg: '0.75rem',\n xl: '1rem',\n },\n },\n layout: {\n maxWidth: '88rem',\n },\n editor: false,\n },\n i18n: {\n defaultLocale: 'en',\n missing: 'fallback',\n locales: [{ code: 'en', label: 'English' }],\n },\n} satisfies ClarifyConfig\n\nconst methodStyles: Record<string, string> = {\n GET: 'bg-emerald-400/15 text-emerald-600 dark:bg-emerald-400/20 dark:text-emerald-300',\n POST: 'bg-sky-400/15 text-sky-600 dark:bg-sky-400/20 dark:text-sky-300',\n PUT: 'bg-amber-400/15 text-amber-600 dark:bg-amber-400/20 dark:text-amber-300',\n PATCH: 'bg-amber-400/15 text-amber-600 dark:bg-amber-400/20 dark:text-amber-300',\n DELETE: 'bg-rose-400/15 text-rose-600 dark:bg-rose-400/20 dark:text-rose-300',\n}\n\nconst mainPreviewPath = '/openapi/embedding'\n\nconst mainPreviewSections = [\n { id: 'overview', title: 'Overview' },\n { id: 'request-example', title: 'Request example' }\n] satisfies Section[]\n\ntype PreviewEnvironmentProps = { children: ReactNode; initialEntry?: string; sections?: Section[] }\n\nfunction PreviewEnvironment(arg0: PreviewEnvironmentProps) {\n const { children, initialEntry = '/preview', sections = [] } = arg0\n\n return (\n <MemoryRouter initialEntries={[initialEntry]}>\n <ClarifyConfigContext.Provider value={previewConfig}>\n <ClarifyLocaleContext.Provider value={previewConfig.i18n.defaultLocale}>\n <OpenApisContext.Provider value={{}}>\n <SectionProvider sections={sections}>\n {children}\n </SectionProvider>\n </OpenApisContext.Provider>\n </ClarifyLocaleContext.Provider>\n </ClarifyConfigContext.Provider>\n </MemoryRouter>\n )\n}\n\ntype ChromeProps = { title: string; status?: string; children: ReactNode }\n\nfunction Chrome(arg0: ChromeProps) {\n const { title, status, children } = arg0\n\n return (\n <div className=\"clarify-app clarify-preview h-full overflow-hidden bg-(--clarify-theme-tokens-colors-background) text-(--clarify-ui-text) shadow-2xl ring-1 ring-(--clarify-theme-tokens-colors-border) dark:bg-zinc-950 dark:text-white dark:ring-white/10\">\n <div className=\"flex items-center gap-3 border-b border-(--clarify-theme-tokens-colors-border) px-4 py-3 text-xs/6 text-(--clarify-ui-text-faint) dark:border-white/10\">\n <span className=\"size-2 rounded-full bg-rose-400\" />\n <span className=\"size-2 rounded-full bg-amber-400\" />\n <span className=\"size-2 rounded-full bg-emerald-400\" />\n <span className=\"ml-2 truncate font-medium text-(--clarify-ui-text-soft)\">{title}</span>\n {status ? <span className=\"ml-auto hidden rounded-full bg-emerald-400/15 px-2 py-0.5 font-medium text-emerald-700 sm:inline dark:text-emerald-300\">{status}</span> : null}\n </div>\n {children}\n </div>\n )\n}\n\ntype MethodBadgeProps = { method: string }\n\nfunction MethodBadge(arg0: MethodBadgeProps) {\n const method = arg0.method.toUpperCase()\n\n return (\n <span className={`rounded-md px-2.5 py-0.5 text-xs/6 font-black tracking-wide ${methodStyles[method] ?? 'bg-(--clarify-ui-subtle-background) text-(--clarify-ui-text-soft)'}`}>\n {method}\n </span>\n )\n}\n\ntype CreatePreviewNavigationProps = { endpoint: PreviewEndpoint; guide?: PreviewGuide; outputs: string[] }\n\nfunction createPreviewNavigation(arg0: CreatePreviewNavigationProps): NavigationNode[] {\n const { endpoint, guide, outputs } = arg0\n\n return [\n {\n title: 'Guides',\n path: '/guides',\n icon: 'BookOpenText',\n children: [\n { title: guide?.title ?? 'MDX guide', path: mainPreviewPath, icon: 'FileText' },\n { title: 'Getting started', path: '/getting-started', icon: 'Rocket' },\n ],\n },\n {\n title: 'API Reference',\n path: '/api',\n icon: 'Braces',\n children: [\n { title: endpoint.summary, path: endpoint.path, icon: 'Cable' },\n { title: 'Generate static output', path: staticOutputEndpoint.path, icon: 'UploadCloud' },\n ],\n },\n {\n title: 'Build Output',\n path: '/output',\n icon: 'PackageCheck',\n children: [\n { title: `Routes (${outputs.length})`, path: '/output/routes', icon: 'ListTree' }\n ],\n },\n ] satisfies NavigationNode[]\n}\n\ntype PreviewNavigationProps = { endpoint: PreviewEndpoint; guide?: PreviewGuide; outputs: string[] }\n\nfunction PreviewNavigation(arg0: PreviewNavigationProps) {\n return <Navigation navigation={createPreviewNavigation(arg0)} className=\"px-2\" />\n}\n\ntype PreviewMetricGridProps = { metrics: PreviewMetric[] }\n\nfunction PreviewMetricGrid(arg0: PreviewMetricGridProps) {\n const { metrics } = arg0\n\n return (\n <div className=\"grid grid-cols-3 gap-2\">\n {metrics.map((metric) => (\n <div key={metric.label} className=\"rounded-xl border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-surface) p-2.5 shadow-sm dark:border-white/10 dark:bg-zinc-900/50\">\n <div className=\"text-xs/5 text-(--clarify-ui-text-faint)\">{metric.label}</div>\n <div className=\"text-base/6 font-semibold text-(--clarify-ui-text-strong)\">{metric.value}</div>\n {metric.hint ? <div className=\"text-xs/5 text-(--clarify-ui-text-faint)\">{metric.hint}</div> : null}\n </div>\n ))}\n </div>\n )\n}\n\ntype PreviewLabelProps = { children: ReactNode }\n\nfunction PreviewLabel(arg0: PreviewLabelProps) {\n return <div className=\"text-xs/5 font-semibold uppercase tracking-wider text-(--clarify-ui-text-faint)\">{arg0.children}</div>\n}\n\ntype GuideSummaryPreviewProps = { guide: PreviewGuide }\n\nfunction GuideSummaryPreview(arg0: GuideSummaryPreviewProps) {\n const { guide } = arg0\n\n return (\n <header className=\"border-b border-(--clarify-theme-tokens-colors-border) pb-4 dark:border-white/10\">\n <PreviewLabel>{guide.label}</PreviewLabel>\n <h2 className=\"mt-1 text-xl/7 font-semibold tracking-tight text-(--clarify-ui-text-strong)\">{guide.title}</h2>\n <p className=\"mt-2 max-w-2xl text-sm/6 text-(--clarify-ui-text-soft)\">{guide.body}</p>\n <pre className=\"mt-3 overflow-hidden rounded-xl bg-zinc-950 px-3 py-2 text-xs/5 whitespace-pre-wrap text-zinc-300\">{guide.embed}</pre>\n </header>\n )\n}\n\ntype EndpointSummaryPreviewProps = { endpoint: PreviewEndpoint }\n\nfunction EndpointSummaryPreview(arg0: EndpointSummaryPreviewProps) {\n const { endpoint } = arg0\n\n return (\n <div className=\"min-w-0\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <MethodBadge method={endpoint.method} />\n <code className=\"text-sm font-medium text-(--clarify-ui-text)\">{endpoint.path}</code>\n </div>\n <h3 className=\"mt-3 text-lg/7 font-semibold tracking-tight text-(--clarify-ui-text-strong)\">{endpoint.summary}</h3>\n <p className=\"mt-1 text-sm/6 text-(--clarify-ui-text-soft)\">{endpoint.description}</p>\n </div>\n )\n}\n\ntype EmbeddedApiPreviewProps = { endpoint: PreviewEndpoint }\n\nfunction EmbeddedApiPreview(arg0: EmbeddedApiPreviewProps) {\n const { endpoint } = arg0\n\n return (\n <div className=\"clarify-preview-api-frame min-w-0 overflow-hidden border-t border-(--clarify-theme-tokens-colors-border) pt-4 dark:border-white/10\">\n <div className=\"clarify-preview-api-content clarify-preview-api-content-embedded\">\n <OpenApiExamplesPreview endpoint={endpoint} />\n </div>\n </div>\n )\n}\n\ntype OutputListPreviewProps = { outputs: string[] }\n\nfunction OutputListPreview(arg0: OutputListPreviewProps) {\n const { outputs } = arg0\n\n return (\n <div className=\"border-t border-(--clarify-theme-tokens-colors-border) pt-4 dark:border-white/10\">\n <PreviewLabel>Static output</PreviewLabel>\n <div className=\"mt-3 grid gap-2 sm:grid-cols-2 xl:grid-cols-4\">\n {outputs.map((output) => (\n <div key={output} className=\"flex items-center gap-2 rounded-lg bg-(--clarify-ui-subtle-background) px-3 py-2 text-xs/5 text-(--clarify-ui-text-soft) dark:bg-white/5\">\n <span className=\"size-1.5 rounded-full bg-emerald-400\" />\n <span className=\"truncate font-mono\">{output}</span>\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nfunction MainContentPreview() {\n return (\n <section className=\"min-w-0 bg-(--clarify-theme-tokens-colors-background) px-5 py-4 dark:bg-zinc-950\">\n <div className=\"clarify-preview-content-window overflow-hidden\">\n <div className=\"space-y-4\">\n <GuideSummaryPreview guide={embeddedGuide} />\n <PreviewMetricGrid metrics={[\n { label: 'MDX', value: 'Guide', hint: 'context' },\n { label: 'Spec', value: 'OpenAPI', hint: 'source' },\n { label: 'Out', value: 'Static', hint: 'CDN' },\n ]} />\n <div className=\"clarify-preview-endpoint-grid grid gap-4\">\n <EndpointSummaryPreview endpoint={embeddedEndpoint} />\n <EmbeddedApiPreview endpoint={embeddedEndpoint} />\n </div>\n <OutputListPreview outputs={embeddedGuide.outputs ?? []} />\n </div>\n </div>\n </section>\n )\n}\n\nexport function MainPreview() {\n return (\n <PreviewEnvironment initialEntry={mainPreviewPath} sections={mainPreviewSections}>\n <Chrome title=\"source/en-US/openapi/embedding.mdx\" status=\"Rendered from OpenAPI + MDX\">\n <div className=\"clarify-preview-shell grid\">\n <aside className=\"border-r border-(--clarify-theme-tokens-colors-border) px-1 py-4 text-sm/7 dark:border-white/10 dark:bg-white/5\">\n <PreviewNavigation endpoint={embeddedEndpoint} guide={embeddedGuide} outputs={embeddedGuide.outputs ?? []} />\n </aside>\n <MainContentPreview />\n </div>\n </Chrome>\n </PreviewEnvironment>\n )\n}\n\nexport function MdxPreview() {\n return (\n <PreviewEnvironment>\n <Chrome title=\"source/started/index.mdx\" status=\"Rendered by renderer\">\n <div className=\"clarify-preview-body overflow-hidden bg-(--clarify-theme-tokens-colors-background) p-5 dark:bg-zinc-950\">\n <article className=\"max-w-3xl text-sm/7 text-(--clarify-ui-text-soft)\">\n <div className=\"inline-flex rounded-full bg-(--clarify-ui-accent-background) px-3 py-1 text-xs/5 font-semibold text-(--clarify-ui-accent-text)\">MDX page</div>\n <h2 className=\"mt-3 text-2xl/8 font-semibold tracking-tight text-(--clarify-ui-text-strong)\">Get Started</h2>\n <p className=\"mt-3\">Write pages in source/. Clarify turns MDX, config, and OpenAPI files into routes.</p>\n <div className=\"mt-5 rounded-2xl border border-(--clarify-ui-accent-border) bg-(--clarify-ui-accent-background) p-4 text-sm/6 text-(--clarify-ui-text-strong)\">\n <div className=\"font-semibold text-(--clarify-ui-text-strong)\">Static output ready</div>\n <p className=\"mt-1\">output/ is plain static files.</p>\n </div>\n <div className=\"mt-5 grid gap-4 sm:grid-cols-2\">\n <div className=\"rounded-2xl border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-surface) p-5 shadow-sm dark:border-white/10 dark:bg-zinc-900/50\">\n <h3 className=\"text-base/6 font-semibold text-(--clarify-ui-text-strong)\">MDX pages</h3>\n <p className=\"mt-2 text-sm/6\">Guides live beside code.</p>\n </div>\n <div className=\"rounded-2xl border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-surface) p-5 shadow-sm dark:border-white/10 dark:bg-zinc-900/50\">\n <h3 className=\"text-base/6 font-semibold text-(--clarify-ui-text-strong)\">API embeds</h3>\n <p className=\"mt-2 text-sm/6\">Specs render inline.</p>\n </div>\n </div>\n <div className=\"mt-5 rounded-2xl border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-surface) p-5 shadow-sm dark:border-white/10 dark:bg-zinc-900/50\">\n <div className=\"flex items-center gap-3\">\n <MethodBadge method={embeddedEndpoint.method} />\n <code className=\"text-sm font-medium text-(--clarify-ui-text)\">{embeddedEndpoint.path}</code>\n </div>\n <p className=\"mt-3 text-sm/6\">{embeddedEndpoint.description}</p>\n </div>\n </article>\n </div>\n </Chrome>\n </PreviewEnvironment>\n )\n}\n\nexport function OpenApiPreview() {\n return (\n <PreviewEnvironment>\n <Chrome title=\"source/api.openapi.json\" status=\"Endpoint + examples\">\n <div className=\"clarify-preview-openapi-window overflow-hidden bg-(--clarify-theme-tokens-colors-background) px-4 py-4 dark:bg-zinc-950\">\n <div className=\"clarify-preview-openapi-mask h-full overflow-hidden\">\n <div className=\"clarify-preview-api-content clarify-preview-api-content-openapi origin-top pb-10\">\n <OpenApiExamplesPreview endpoint={staticOutputEndpoint} />\n </div>\n </div>\n </div>\n </Chrome>\n </PreviewEnvironment>\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"preview.cjs","names":[],"sources":["../source/preview/openapi.tsx","../source/preview.tsx"],"sourcesContent":["import { useState } from 'react'\n\nimport { authPlaceholder, defaultServerVariables, getAuthOptions, getServerKey, getServers, RequestExamplesPanel, ResponseExamplesPanel } from '../openapi/components/ExamplePanels'\nimport { EndpointIdentity } from '../openapi/components/OpenApiOperation'\nimport { getMediaTypeEntries, getRequestBody } from '../openapi/lib/helpers'\nimport type { OpenAPIOperation, OpenAPISpec } from '../openapi/lib/utils'\nimport type { OpenApiParameter, RequestAuthInput } from '../openapi/types'\n\nexport type PreviewParameter = {\n name: string\n in: string\n type: string\n required?: boolean\n description?: string\n schema?: unknown\n}\n\nexport type PreviewEndpoint = {\n method: string\n path: string\n summary: string\n description: string\n parameters?: PreviewParameter[]\n requestDescription?: string\n requestSchema?: unknown\n requestExample?: unknown\n response?: string\n responseStatus?: string\n responseDescription?: string\n responseSchema?: unknown\n responseExample?: unknown\n}\n\ntype CreatePreviewOpenApiResult = {\n operation: OpenAPIOperation\n spec: OpenAPISpec\n parameters: OpenApiParameter[]\n}\n\ntype OpenApiExamplesPreviewProps = { endpoint: PreviewEndpoint }\n\nfunction schemaFromType(type: string): unknown {\n if (type.endsWith('[]')) return { type: 'array', items: schemaFromType(type.slice(0, -2)) }\n if (type === 'number' || type === 'integer' || type === 'boolean' || type === 'object') return { type }\n return { type: 'string' }\n}\n\nfunction parseResponseExample(endpoint: PreviewEndpoint): unknown {\n if (typeof endpoint.responseExample !== 'undefined') return endpoint.responseExample\n if (!endpoint.response) return undefined\n\n try {\n return JSON.parse(endpoint.response)\n } catch {\n return endpoint.response\n }\n}\n\nfunction inferSchemaFromExample(example: unknown): unknown {\n if (Array.isArray(example)) {\n return { type: 'array', items: inferSchemaFromExample(example[0]) ?? { type: 'object' } }\n }\n\n if (typeof example === 'object' && example !== null) {\n return {\n type: 'object',\n properties: Object.fromEntries(Object.entries(example).map(([key, value]) => [key, inferSchemaFromExample(value)])),\n }\n }\n\n if (typeof example === 'number') return { type: Number.isInteger(example) ? 'integer' : 'number' }\n if (typeof example === 'boolean') return { type: 'boolean' }\n return typeof example === 'undefined' ? undefined : { type: 'string' }\n}\n\nfunction normalizeParameterLocation(location: string): string {\n return location === 'route' ? 'path' : location\n}\n\nfunction toOpenApiParameter(parameter: PreviewParameter): OpenApiParameter {\n return {\n name: parameter.name,\n in: normalizeParameterLocation(parameter.in),\n required: parameter.required,\n description: parameter.description,\n schema: parameter.schema ?? schemaFromType(parameter.type),\n }\n}\n\nfunction createPreviewOpenApi(endpoint: PreviewEndpoint): CreatePreviewOpenApiResult {\n const method = endpoint.method.toLowerCase()\n const parameters = (endpoint.parameters ?? []).map(toOpenApiParameter)\n const responseExample = parseResponseExample(endpoint)\n const responseSchema = endpoint.responseSchema ?? inferSchemaFromExample(responseExample)\n const requestSchema = endpoint.requestSchema ?? inferSchemaFromExample(endpoint.requestExample)\n const operation = {\n summary: endpoint.summary,\n description: endpoint.description,\n parameters,\n requestBody: requestSchema\n ? {\n description: endpoint.requestDescription,\n required: true,\n content: {\n 'application/json': {\n schema: requestSchema,\n example: endpoint.requestExample,\n },\n },\n }\n : undefined,\n responses: {\n [endpoint.responseStatus ?? '200']: {\n description: endpoint.responseDescription ?? 'OK',\n content: {\n 'application/json': {\n schema: responseSchema,\n example: responseExample,\n },\n },\n },\n },\n } as OpenAPIOperation\n const spec = {\n openapi: '3.1.0',\n info: {\n title: 'Clarify Build API',\n version: '2026-06-20',\n description: 'API reference generated from OpenAPI and rendered as static documentation.',\n },\n servers: [\n {\n url: 'https://server',\n description: 'Production',\n },\n {\n url: 'https://test-server',\n description: 'Test',\n },\n ],\n components: {\n securitySchemes: {\n bearerAuth: {\n type: 'http',\n scheme: 'bearer',\n bearerFormat: 'JWT',\n },\n },\n },\n security: [{ bearerAuth: [] }],\n paths: {\n [endpoint.path]: {\n [method]: operation,\n },\n },\n } as OpenAPISpec\n\n return { operation, spec, parameters }\n}\n\nexport function OpenApiExamplesPreview(arg0: OpenApiExamplesPreviewProps) {\n const { endpoint } = arg0\n const { operation, spec, parameters } = createPreviewOpenApi(endpoint)\n const method = endpoint.method.toUpperCase()\n const requestBody = getRequestBody(spec, operation)\n const requestContents = getMediaTypeEntries(requestBody?.content, spec)\n const [selectedRequestMediaType, setSelectedRequestMediaType] = useState(requestContents[0]?.mediaType ?? '')\n const selectedRequestContent = requestContents.find((content) => content.mediaType === selectedRequestMediaType) ?? requestContents[0]\n const servers = getServers(spec, operation, endpoint.path)\n const [selectedServerKey, setSelectedServerKey] = useState(getServerKey(servers[0], 0))\n const selectedServer = servers.find((server, index) => getServerKey(server, index) === selectedServerKey) ?? servers[0]\n const [serverVariables, setServerVariables] = useState(defaultServerVariables(selectedServer))\n const [serverOpen, setServerOpen] = useState(false)\n const authOptions = getAuthOptions(spec, operation)\n const [selectedAuthName, setSelectedAuthName] = useState(authOptions[0]?.name ?? '')\n const selectedAuth = authOptions.find((option) => option.name === selectedAuthName)\n const [authValues, setAuthValues] = useState<Record<string, string>>({})\n const [authOpen, setAuthOpen] = useState(false)\n const authInput: RequestAuthInput | undefined = selectedAuth\n ? { name: selectedAuth.name, scheme: selectedAuth.scheme, value: authValues[selectedAuth.name] ?? authPlaceholder(selectedAuth) }\n : undefined\n\n return (\n <div className=\"space-y-4\">\n <EndpointIdentity\n method={method}\n path={endpoint.path}\n servers={servers}\n selectedServerKey={selectedServerKey}\n selectedServer={selectedServer}\n serverVariables={serverVariables}\n serverOpen={serverOpen}\n authOptions={authOptions}\n selectedAuthName={selectedAuthName}\n selectedAuth={selectedAuth}\n authValues={authValues}\n authOpen={authOpen}\n onSelectServer={(value) => {\n const nextServer = servers.find((server, index) => getServerKey(server, index) === value) ?? servers[0]\n setSelectedServerKey(value)\n setServerVariables(defaultServerVariables(nextServer))\n }}\n onChangeServerVariable={(name, value) => setServerVariables((current) => ({ ...current, [name]: value }))}\n onToggleServer={() => {\n setServerOpen((current) => !current)\n setAuthOpen(false)\n }}\n onToggleAuth={() => {\n setAuthOpen((current) => !current)\n setServerOpen(false)\n }}\n onSelectAuth={setSelectedAuthName}\n onChangeAuthValue={(name, value) => setAuthValues((current) => ({ ...current, [name]: value }))}\n />\n <div className=\"grid min-w-0 gap-4 lg:grid-cols-2\">\n <RequestExamplesPanel\n spec={spec}\n path={endpoint.path}\n method={method}\n parameters={parameters}\n requestContents={requestContents}\n selectedMediaType={selectedRequestContent?.mediaType ?? ''}\n onSelectMediaType={setSelectedRequestMediaType}\n selectedServer={selectedServer}\n serverVariables={serverVariables}\n auth={authInput}\n />\n <ResponseExamplesPanel operation={operation} spec={spec} />\n </div>\n </div>\n )\n}\n","import { Menu, X } from 'lucide-react'\nimport type { ReactNode } from 'react'\nimport { useState } from 'react'\nimport { MemoryRouter } from 'react-router-dom'\n\nimport { SectionProvider } from './app/SectionProvider'\nimport type { Section } from './app/SectionProvider'\nimport { ConfigContext, LocaleContext, OpenApisContext } from './context'\nimport { OpenApiExamplesPreview } from './preview/openapi'\nimport type { PreviewEndpoint } from './preview/openapi'\nimport { Navigation } from './shell'\nimport type { Config, NavigationNode } from './types'\n\nexport type PreviewGuide = {\n label: string\n title: string\n body: string\n embed: string\n outputs?: string[]\n}\n\nexport type PreviewMetric = {\n label: string\n value: string\n hint?: string\n}\n\nexport type PreviewCard = {\n title: string\n description: string\n}\n\nconst embeddedEndpoint = {\n method: 'GET',\n path: '/examples/basic-request',\n summary: 'Basic request',\n description: 'Rendered from api.openapi.json inside the MDX guide.',\n parameters: [\n { name: 'cursor', in: 'query', type: 'string', description: 'Start after this cursor.' },\n { name: 'limit', in: 'query', type: 'integer', description: 'Max items to return.' },\n { name: 'X-Trace-Id', in: 'header', type: 'string', description: 'Optional request trace.' },\n ],\n responseDescription: 'A page of example records.',\n responseSchema: {\n type: 'object',\n required: ['items'],\n properties: {\n items: { type: 'array', items: { type: 'object' } },\n next: { type: 'string' },\n },\n },\n responseExample: {\n items: [],\n next: 'cursor_2',\n },\n} satisfies PreviewEndpoint\n\nconst embeddedGuide = {\n label: 'source/en-US/openapi/embedding.mdx',\n title: 'Embed OpenAPI in MDX',\n body: 'Use MDX for workflow context, then render the exact operation from the spec.',\n embed: '<OpenApiOperation specPath=\"/api\" path=\"/examples/basic-request\" method=\"get\" />',\n outputs: ['/openapi/embedding', '/api', '/api.openapi.json', '/llms.txt'],\n} satisfies PreviewGuide\n\nconst staticOutputEndpoint = {\n method: 'POST',\n path: '/api/{id}/path',\n summary: 'Create static build',\n description: 'Build static docs from MDX and OpenAPI sources.',\n parameters: [\n { name: 'id', in: 'path', type: 'string', required: true, description: 'Project ID.' }\n ],\n responseDescription: 'Build metadata and static outputs.',\n responseSchema: {\n type: 'object',\n required: ['id', 'status', 'outputs'],\n properties: {\n id: { type: 'string', description: 'Build identifier.' },\n status: { type: 'string', enum: ['queued', 'running', 'ready'], description: 'Current build state.' },\n outputs: {\n type: 'array',\n description: 'Generated static artifacts.',\n items: {\n type: 'object',\n required: ['path', 'kind'],\n properties: {\n path: { type: 'string' },\n kind: { type: 'string', enum: ['html', 'asset', 'openapi', 'llms'] },\n },\n },\n },\n },\n },\n requestDescription: 'Static build options.',\n requestSchema: {\n type: 'object',\n required: ['source', 'output'],\n properties: {\n source: { type: 'string', description: 'MDX source root.' },\n output: { type: 'string', description: 'Static output root.' },\n includeSearchIndex: { type: 'boolean', description: 'Generate search data.' },\n },\n },\n requestExample: {\n source: 'source',\n output: 'output',\n includeSearchIndex: true,\n },\n responseExample: {\n id: 'build_01HY',\n status: 'ready',\n outputs: [\n { path: '/openapi/index.html', kind: 'html' },\n { path: '/api.openapi.json', kind: 'openapi' },\n { path: '/llms.txt', kind: 'llms' },\n ],\n },\n} satisfies PreviewEndpoint\n\nconst previewConfig = {\n title: 'Clarify preview',\n description: 'Renderer preview environment',\n rootDirectory: 'source',\n routePrefix: '/',\n outputDirectory: 'output',\n theme: {\n preset: 'default',\n tokens: {\n colors: {\n primary: '#2563eb',\n accent: '#60a5fa',\n background: '#ffffff',\n foreground: '#18181b',\n surface: '#ffffff',\n muted: '#71717a',\n border: 'rgb(24 24 27 / 0.1)',\n codeBackground: '#f4f4f5',\n },\n radius: {\n sm: '0.375rem',\n md: '0.5rem',\n lg: '0.75rem',\n xl: '1rem',\n },\n },\n layout: {\n maxWidth: '88rem',\n },\n editor: false,\n },\n i18n: {\n defaultLocale: 'en',\n missing: 'fallback',\n locales: [{ code: 'en', label: 'English' }],\n },\n} satisfies Config\n\nconst methodStyles: Record<string, string> = {\n GET: 'bg-emerald-400/15 text-emerald-600 dark:bg-emerald-400/20 dark:text-emerald-300',\n POST: 'bg-sky-400/15 text-sky-600 dark:bg-sky-400/20 dark:text-sky-300',\n PUT: 'bg-amber-400/15 text-amber-600 dark:bg-amber-400/20 dark:text-amber-300',\n PATCH: 'bg-amber-400/15 text-amber-600 dark:bg-amber-400/20 dark:text-amber-300',\n DELETE: 'bg-rose-400/15 text-rose-600 dark:bg-rose-400/20 dark:text-rose-300',\n}\n\nconst mainPreviewPath = '/openapi/embedding'\n\nconst mainPreviewSections = [\n { id: 'overview', title: 'Overview' },\n { id: 'request-example', title: 'Request example' }\n] satisfies Section[]\n\ntype PreviewEnvironmentProps = { children: ReactNode; initialEntry?: string; sections?: Section[] }\n\nfunction PreviewEnvironment(arg0: PreviewEnvironmentProps) {\n const { children, initialEntry = '/preview', sections = [] } = arg0\n\n return (\n <MemoryRouter initialEntries={[initialEntry]}>\n <ConfigContext.Provider value={previewConfig}>\n <LocaleContext.Provider value={previewConfig.i18n.defaultLocale}>\n <OpenApisContext.Provider value={{}}>\n <SectionProvider sections={sections}>\n {children}\n </SectionProvider>\n </OpenApisContext.Provider>\n </LocaleContext.Provider>\n </ConfigContext.Provider>\n </MemoryRouter>\n )\n}\n\ntype ChromeProps = { title: string; status?: string; headerAction?: ReactNode; children: ReactNode }\n\nfunction Chrome(arg0: ChromeProps) {\n const { title, status, headerAction, children } = arg0\n\n return (\n <div className=\"clarify-app clarify-preview h-full overflow-hidden bg-(--clarify-theme-tokens-colors-background) text-(--clarify-ui-text) shadow-2xl ring-1 ring-(--clarify-theme-tokens-colors-border) dark:bg-zinc-950 dark:text-white dark:ring-white/10\">\n <div className=\"flex items-center gap-3 border-b border-(--clarify-theme-tokens-colors-border) px-4 py-3 text-xs/6 text-(--clarify-ui-text-faint) dark:border-white/10\">\n <span className=\"size-2 rounded-full bg-rose-400\" />\n <span className=\"size-2 rounded-full bg-amber-400\" />\n <span className=\"size-2 rounded-full bg-emerald-400\" />\n <span className=\"ml-2 min-w-0 flex-1 truncate font-medium text-(--clarify-ui-text-soft)\">{title}</span>\n {status ? <span className=\"hidden rounded-full bg-emerald-400/15 px-2 py-0.5 font-medium text-emerald-700 sm:inline dark:text-emerald-300\">{status}</span> : null}\n {headerAction}\n </div>\n {children}\n </div>\n )\n}\n\ntype MethodBadgeProps = { method: string }\n\nfunction MethodBadge(arg0: MethodBadgeProps) {\n const method = arg0.method.toUpperCase()\n\n return (\n <span className={`rounded-md px-2.5 py-0.5 text-xs/6 font-black tracking-wide ${methodStyles[method] ?? 'bg-(--clarify-ui-subtle-background) text-(--clarify-ui-text-soft)'}`}>\n {method}\n </span>\n )\n}\n\ntype CreatePreviewNavigationProps = { endpoint: PreviewEndpoint; guide?: PreviewGuide; outputs: string[] }\n\nfunction createPreviewNavigation(arg0: CreatePreviewNavigationProps): NavigationNode[] {\n const { endpoint, guide, outputs } = arg0\n\n return [\n {\n title: 'Guides',\n path: '/guides',\n icon: 'BookOpenText',\n children: [\n { title: guide?.title ?? 'MDX guide', path: mainPreviewPath, icon: 'FileText' },\n { title: 'Getting started', path: '/getting-started', icon: 'Rocket' },\n ],\n },\n {\n title: 'API Reference',\n path: '/api',\n icon: 'Braces',\n children: [\n { title: endpoint.summary, path: endpoint.path, icon: 'Cable' },\n { title: 'Generate static output', path: staticOutputEndpoint.path, icon: 'UploadCloud' },\n ],\n },\n {\n title: 'Build Output',\n path: '/output',\n icon: 'PackageCheck',\n children: [\n { title: `Routes (${outputs.length})`, path: '/output/routes', icon: 'ListTree' }\n ],\n },\n ] satisfies NavigationNode[]\n}\n\ntype PreviewNavigationProps = { endpoint: PreviewEndpoint; guide?: PreviewGuide; outputs: string[] }\n\nfunction PreviewNavigation(arg0: PreviewNavigationProps) {\n return <Navigation navigation={createPreviewNavigation(arg0)} className=\"px-2\" />\n}\n\ntype MainPreviewMobileNavigationProps = PreviewNavigationProps & { isOpen: boolean; onClose: () => void }\n\nfunction MainPreviewMobileNavigation(arg0: MainPreviewMobileNavigationProps) {\n const { isOpen, onClose, ...navigationProps } = arg0\n const navigationId = 'clarify-main-preview-mobile-navigation'\n\n return (\n <div className=\"clarify-preview-mobile-navigation pointer-events-none absolute inset-0 z-20\">\n {isOpen ? (\n <button\n type=\"button\"\n className=\"absolute inset-0 bg-zinc-950/20 backdrop-blur-[1px] dark:bg-black/30\"\n aria-label=\"Close documentation menu\"\n onClick={onClose}\n />\n ) : null}\n <aside\n id={navigationId}\n className=\"pointer-events-auto absolute top-0 bottom-0 left-0 w-64 max-w-[82%] overflow-y-auto border-r border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-background) px-1 py-4 text-sm/7 shadow-2xl shadow-zinc-900/20 transition-transform duration-200 ease-out data-closed:-translate-x-full dark:border-white/10 dark:bg-zinc-950 dark:shadow-black/40\"\n data-closed={!isOpen ? 'true' : undefined}\n >\n <PreviewNavigation {...navigationProps} />\n </aside>\n </div>\n )\n}\n\ntype PreviewMetricGridProps = { metrics: PreviewMetric[] }\n\nfunction PreviewMetricGrid(arg0: PreviewMetricGridProps) {\n const { metrics } = arg0\n\n return (\n <div className=\"grid grid-cols-1 gap-2 sm:grid-cols-3\">\n {metrics.map((metric) => (\n <div key={metric.label} className=\"rounded-xl border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-surface) p-2.5 shadow-sm dark:border-white/10 dark:bg-zinc-900/50\">\n <div className=\"text-xs/5 text-(--clarify-ui-text-faint)\">{metric.label}</div>\n <div className=\"text-base/6 font-semibold text-(--clarify-ui-text-strong)\">{metric.value}</div>\n {metric.hint ? <div className=\"text-xs/5 text-(--clarify-ui-text-faint)\">{metric.hint}</div> : null}\n </div>\n ))}\n </div>\n )\n}\n\ntype PreviewLabelProps = { children: ReactNode }\n\nfunction PreviewLabel(arg0: PreviewLabelProps) {\n return <div className=\"text-xs/5 font-semibold uppercase tracking-wider text-(--clarify-ui-text-faint)\">{arg0.children}</div>\n}\n\ntype GuideSummaryPreviewProps = { guide: PreviewGuide }\n\nfunction GuideSummaryPreview(arg0: GuideSummaryPreviewProps) {\n const { guide } = arg0\n\n return (\n <header className=\"border-b border-(--clarify-theme-tokens-colors-border) pb-4 dark:border-white/10\">\n <PreviewLabel>{guide.label}</PreviewLabel>\n <h2 className=\"mt-1 text-xl/7 font-semibold tracking-tight text-(--clarify-ui-text-strong)\">{guide.title}</h2>\n <p className=\"mt-2 max-w-2xl text-sm/6 text-(--clarify-ui-text-soft)\">{guide.body}</p>\n <pre className=\"mt-3 overflow-hidden rounded-xl bg-zinc-950 px-3 py-2 text-xs/5 whitespace-pre-wrap text-zinc-300\">{guide.embed}</pre>\n </header>\n )\n}\n\ntype EndpointSummaryPreviewProps = { endpoint: PreviewEndpoint }\n\nfunction EndpointSummaryPreview(arg0: EndpointSummaryPreviewProps) {\n const { endpoint } = arg0\n\n return (\n <div className=\"min-w-0\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <MethodBadge method={endpoint.method} />\n <code className=\"text-sm font-medium text-(--clarify-ui-text)\">{endpoint.path}</code>\n </div>\n <h3 className=\"mt-3 text-lg/7 font-semibold tracking-tight text-(--clarify-ui-text-strong)\">{endpoint.summary}</h3>\n <p className=\"mt-1 text-sm/6 text-(--clarify-ui-text-soft)\">{endpoint.description}</p>\n </div>\n )\n}\n\ntype EmbeddedApiPreviewProps = { endpoint: PreviewEndpoint }\n\nfunction EmbeddedApiPreview(arg0: EmbeddedApiPreviewProps) {\n const { endpoint } = arg0\n\n return (\n <div className=\"clarify-preview-api-frame min-w-0 overflow-hidden border-t border-(--clarify-theme-tokens-colors-border) pt-4 dark:border-white/10\">\n <div className=\"clarify-preview-api-content clarify-preview-api-content-embedded\">\n <OpenApiExamplesPreview endpoint={endpoint} />\n </div>\n </div>\n )\n}\n\ntype OutputListPreviewProps = { outputs: string[] }\n\nfunction OutputListPreview(arg0: OutputListPreviewProps) {\n const { outputs } = arg0\n\n return (\n <div className=\"border-t border-(--clarify-theme-tokens-colors-border) pt-4 dark:border-white/10\">\n <PreviewLabel>Static output</PreviewLabel>\n <div className=\"mt-3 grid gap-2 sm:grid-cols-2 xl:grid-cols-4\">\n {outputs.map((output) => (\n <div key={output} className=\"flex items-center gap-2 rounded-lg bg-(--clarify-ui-subtle-background) px-3 py-2 text-xs/5 text-(--clarify-ui-text-soft) dark:bg-white/5\">\n <span className=\"size-1.5 rounded-full bg-emerald-400\" />\n <span className=\"truncate font-mono\">{output}</span>\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nfunction MainContentPreview() {\n return (\n <section className=\"min-w-0 bg-(--clarify-theme-tokens-colors-background) px-5 py-4 dark:bg-zinc-950\">\n <div className=\"clarify-preview-content-window overflow-hidden\">\n <div className=\"space-y-4\">\n <GuideSummaryPreview guide={embeddedGuide} />\n <PreviewMetricGrid metrics={[\n { label: 'MDX', value: 'Guide', hint: 'context' },\n { label: 'Spec', value: 'OpenAPI', hint: 'source' },\n { label: 'Out', value: 'Static', hint: 'CDN' },\n ]} />\n <div className=\"clarify-preview-endpoint-grid grid gap-4\">\n <EndpointSummaryPreview endpoint={embeddedEndpoint} />\n <EmbeddedApiPreview endpoint={embeddedEndpoint} />\n </div>\n <OutputListPreview outputs={embeddedGuide.outputs ?? []} />\n </div>\n </div>\n </section>\n )\n}\n\nexport function MainPreview() {\n const [isMobileNavigationOpen, setMobileNavigationOpen] = useState(false)\n const navigationProps = { endpoint: embeddedEndpoint, guide: embeddedGuide, outputs: embeddedGuide.outputs ?? [] }\n\n return (\n <PreviewEnvironment initialEntry={mainPreviewPath} sections={mainPreviewSections}>\n <Chrome\n title=\"source/en-US/openapi/embedding.mdx\"\n status=\"Rendered from OpenAPI + MDX\"\n headerAction={\n <button\n type=\"button\"\n className=\"clarify-preview-mobile-menu-button -my-1 flex size-7 items-center justify-center rounded-(--clarify-theme-tokens-radius-md) text-(--clarify-ui-text-strong) transition hover:bg-(--clarify-ui-hover-background)\"\n aria-controls=\"clarify-main-preview-mobile-navigation\"\n aria-expanded={isMobileNavigationOpen}\n aria-label={isMobileNavigationOpen ? 'Close documentation menu' : 'Open documentation menu'}\n onClick={() => setMobileNavigationOpen((value) => !value)}\n >\n {isMobileNavigationOpen ? <X className=\"h-4 w-4 shrink-0\" /> : <Menu className=\"h-4 w-4 shrink-0\" />}\n </button>\n }\n >\n <div className=\"clarify-preview-shell relative grid overflow-hidden\">\n <MainPreviewMobileNavigation {...navigationProps} isOpen={isMobileNavigationOpen} onClose={() => setMobileNavigationOpen(false)} />\n <aside className=\"clarify-preview-sidebar border-r border-(--clarify-theme-tokens-colors-border) px-1 py-4 text-sm/7 dark:border-white/10 dark:bg-white/5\">\n <PreviewNavigation {...navigationProps} />\n </aside>\n <MainContentPreview />\n </div>\n </Chrome>\n </PreviewEnvironment>\n )\n}\n\nexport function MdxPreview() {\n return (\n <PreviewEnvironment>\n <Chrome title=\"source/started/index.mdx\" status=\"Rendered by renderer\">\n <div className=\"clarify-preview-body overflow-x-hidden overflow-y-auto bg-(--clarify-theme-tokens-colors-background) p-4 sm:p-5 dark:bg-zinc-950\">\n <article className=\"max-w-3xl text-sm/7 text-(--clarify-ui-text-soft)\">\n <div className=\"inline-flex rounded-full bg-(--clarify-ui-accent-background) px-3 py-1 text-xs/5 font-semibold text-(--clarify-ui-accent-text)\">MDX page</div>\n <h2 className=\"mt-3 text-xl/7 font-semibold tracking-tight text-(--clarify-ui-text-strong) sm:text-2xl/8\">Get Started</h2>\n <p className=\"mt-3\">Write pages in source/. Clarify turns MDX, config, and OpenAPI files into routes.</p>\n <div className=\"mt-4 rounded-2xl border border-(--clarify-ui-accent-border) bg-(--clarify-ui-accent-background) p-4 text-sm/6 text-(--clarify-ui-text-strong) sm:mt-5\">\n <div className=\"font-semibold text-(--clarify-ui-text-strong)\">Static output ready</div>\n <p className=\"mt-1\">output/ is plain static files.</p>\n </div>\n <div className=\"mt-4 grid gap-3 sm:mt-5 sm:grid-cols-2 sm:gap-4\">\n <div className=\"rounded-2xl border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-surface) p-5 shadow-sm dark:border-white/10 dark:bg-zinc-900/50\">\n <h3 className=\"text-base/6 font-semibold text-(--clarify-ui-text-strong)\">MDX pages</h3>\n <p className=\"mt-2 text-sm/6\">Guides live beside code.</p>\n </div>\n <div className=\"rounded-2xl border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-surface) p-5 shadow-sm dark:border-white/10 dark:bg-zinc-900/50\">\n <h3 className=\"text-base/6 font-semibold text-(--clarify-ui-text-strong)\">API embeds</h3>\n <p className=\"mt-2 text-sm/6\">Specs render inline.</p>\n </div>\n </div>\n <div className=\"mt-5 rounded-2xl border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-surface) p-5 shadow-sm dark:border-white/10 dark:bg-zinc-900/50\">\n <div className=\"flex items-center gap-3\">\n <MethodBadge method={embeddedEndpoint.method} />\n <code className=\"text-sm font-medium text-(--clarify-ui-text)\">{embeddedEndpoint.path}</code>\n </div>\n <p className=\"mt-3 text-sm/6\">{embeddedEndpoint.description}</p>\n </div>\n </article>\n </div>\n </Chrome>\n </PreviewEnvironment>\n )\n}\n\nexport function OpenApiPreview() {\n return (\n <PreviewEnvironment>\n <Chrome title=\"source/api.openapi.json\" status=\"Endpoint + examples\">\n <div className=\"clarify-preview-openapi-window overflow-x-hidden overflow-y-auto bg-(--clarify-theme-tokens-colors-background) px-3 py-3 sm:px-4 sm:py-4 dark:bg-zinc-950\">\n <div className=\"clarify-preview-openapi-mask min-h-full\">\n <div className=\"clarify-preview-api-content clarify-preview-api-content-openapi origin-top pb-6 sm:pb-10\">\n <OpenApiExamplesPreview endpoint={staticOutputEndpoint} />\n </div>\n </div>\n </div>\n </Chrome>\n </PreviewEnvironment>\n )\n}\n"],"mappings":"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"}
|