@clarify-labs/renderer 0.1.0 → 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/output/{AppShell-DBgUlirU.cjs → AppShell-4KB3lU-n.cjs} +157 -1
- package/output/AppShell-4KB3lU-n.cjs.map +1 -0
- package/output/{AppShell-C_bj6ZhV.js → AppShell-Ci894P_0.js} +141 -3
- package/output/AppShell-Ci894P_0.js.map +1 -0
- package/output/client.cjs +1 -1
- package/output/client.js +1 -1
- package/output/components/Callout.d.ts +10 -0
- package/output/components/Card.d.ts +15 -0
- package/output/components/index.d.ts +4 -0
- package/output/index.cjs +8 -2
- package/output/index.cjs.map +1 -1
- package/output/index.d.ts +2 -2
- package/output/index.js +6 -3
- package/output/index.js.map +1 -1
- package/output/mdx/components.d.ts +3 -0
- package/output/mdx/primitives.d.ts +2 -2
- package/output/{render-Ca4Is683.js → render-bPMMBoDH.js} +2 -2
- package/output/{render-Ca4Is683.js.map → render-bPMMBoDH.js.map} +1 -1
- package/output/{render-CLI-MnH_.cjs → render-z9rSQ00n.cjs} +2 -2
- package/output/{render-CLI-MnH_.cjs.map → render-z9rSQ00n.cjs.map} +1 -1
- package/output/renderer.css +314 -0
- package/output/server.cjs +1 -1
- package/output/server.js +1 -1
- package/package.json +14 -9
- package/output/AppShell-C_bj6ZhV.js.map +0 -1
- package/output/AppShell-DBgUlirU.cjs.map +0 -1
package/output/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../source/mdx/primitives.tsx","../source/openapi/utils.ts","../source/openapi/index.tsx","../source/mdx/components.ts"],"sourcesContent":["import clsx from 'clsx'\nimport { createElement, type ComponentPropsWithoutRef, type ReactNode } from 'react'\nimport { Link } from 'react-router-dom'\n\nimport { Button, Heading, PageFooter, Prose } from '../components'\nimport { Code, CodeGroup, Pre } from '../components/Code'\n\nexport function wrapper(arg0: { children: ReactNode }) { const { children } = arg0\n\n return (\n <article className=\"clarify-mdx-page flex h-full flex-col pt-16 pb-10\">\n <Prose className=\"flex-auto\">{children}</Prose>\n <PageFooter />\n </article>\n )\n}\n\nexport function a(arg0: ComponentPropsWithoutRef<'a'>) { const { href = '', ...props } = arg0\n\n if (href.startsWith('/') && !href.startsWith('//')) {\n return <Link to={href} {...props} />\n }\n\n return <a href={href} {...props} />\n}\n\nexport const code = Code\nexport const pre = Pre\nexport { Button, CodeGroup }\n\nexport function h2(props: Omit<ComponentPropsWithoutRef<typeof Heading>, 'level'>) {\n return createElement(Heading, { level: 2, ...props })\n}\n\nexport function h3(props: Omit<ComponentPropsWithoutRef<typeof Heading>, 'level'>) {\n return createElement(Heading, { level: 3, ...props })\n}\n\nfunction InfoIcon(props: ComponentPropsWithoutRef<'svg'>) {\n return (\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\" {...props}>\n <circle cx=\"8\" cy=\"8\" r=\"8\" strokeWidth=\"0\" />\n <path fill=\"none\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.5\" d=\"M6.75 7.75h1.5v3.5\" />\n <circle cx=\"8\" cy=\"4\" r=\".5\" fill=\"none\" />\n </svg>\n )\n}\n\nexport function Note(arg0: { children: ReactNode }) { const { children } = arg0\n\n return (\n <div className=\"clarify-note my-6 flex gap-2.5 rounded-2xl border border-emerald-500/20 bg-emerald-50/50 p-4 text-sm/6 text-emerald-900 dark:border-emerald-500/30 dark:bg-emerald-500/5 dark:text-emerald-200 dark:[--tw-prose-links-hover:var(--color-emerald-300)] dark:[--tw-prose-links:var(--color-white)]\">\n <InfoIcon className=\"mt-1 h-4 w-4 flex-none fill-emerald-500 stroke-white dark:fill-emerald-200/20 dark:stroke-emerald-200\" />\n <div className=\"*:first:mt-0 *:last:mb-0\">{children}</div>\n </div>\n )\n}\n\nexport function Row(arg0: { children: ReactNode }) { const { children } = arg0\n\n return <div className=\"clarify-row grid grid-cols-1 items-start gap-x-16 gap-y-10 xl:max-w-none xl:grid-cols-2\">{children}</div>\n}\n\nexport function Col(arg0: { children: ReactNode; sticky?: boolean }) { const { children, sticky = false } = arg0\n\n return <div className={clsx('clarify-col *:first:mt-0 *:last:mb-0', sticky && 'xl:sticky xl:top-24')}>{children}</div>\n}\n\nexport function Properties(arg0: { children: ReactNode }) { const { children } = arg0\n\n return (\n <div className=\"clarify-properties my-6\">\n <ul\n role=\"list\"\n className=\"m-0 list-none divide-y divide-zinc-900/5 p-0 dark:divide-white/5\"\n >\n {children}\n </ul>\n </div>\n )\n}\n\nexport function Property(arg0: { name: string; children: ReactNode; type?: string }) { const { name, children, type } = arg0\n\n return (\n <li className=\"clarify-property m-0 px-0 py-4 first:pt-0 last:pb-0\">\n <dl className=\"m-0 flex flex-wrap items-center gap-x-3 gap-y-2\">\n <dt className=\"sr-only\">Name</dt>\n <dd>\n <code>{name}</code>\n </dd>\n {type ? (\n <>\n <dt className=\"sr-only\">Type</dt>\n <dd className=\"font-mono text-xs text-zinc-400 dark:text-zinc-500\">{type}</dd>\n </>\n ) : null}\n <dt className=\"sr-only\">Description</dt>\n <dd className=\"w-full flex-none *:first:mt-0 *:last:mb-0\">{children}</dd>\n </dl>\n </li>\n )\n}\n","import type { OpenAPIV3, OpenAPIV3_1 } from 'openapi-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\nexport function getOpenApiOperation(spec: OpenAPISpec, path: string, method: string): OpenAPIOperation | undefined {\n if (!isOpenAPIHttpMethod(method)) return undefined\n return spec.paths?.[path]?.[method.toLowerCase() as OpenAPIHttpMethod]\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, pathItem] of Object.entries(paths)) {\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 })\n }\n }\n\n return operations\n}\n","import { Listbox, ListboxButton, ListboxOption, ListboxOptions } from '@headlessui/react'\nimport clsx from 'clsx'\nimport { slug } from 'github-slugger'\nimport { CheckIcon, ChevronsUpDownIcon } from 'lucide-react'\nimport { useRef, useState, type ReactNode } from 'react'\nimport { useLocation } from 'react-router-dom'\n\nimport { Heading, PageFooter, Prose } from '../components'\nimport { useClarifyConfig, useOpenApis } from '../context'\nimport { Col, Properties, Property, Row } from '../mdx/primitives'\n\nimport { getOpenApiOperation, listOpenApiOperations } from './utils'\nimport type { OpenAPIOperation, OpenAPISpec } from './utils'\n\nexport type { OpenAPIOperation, OpenAPISpec } from './utils'\n\nexport type OpenApiPageProps = {\n spec?: OpenAPISpec\n specPath?: string\n}\n\nexport type ApiEndpointProps = {\n spec: OpenAPISpec\n path: string\n method: string\n}\n\nexport type OpenApiEndpointProps = {\n specPath: string\n path: string\n method: string\n}\n\ntype OpenApiRecord = Record<string, unknown>\n\ntype OpenApiParameter = {\n name?: string\n in?: string\n required?: boolean\n description?: string\n schema?: unknown\n}\n\ntype OpenApiMediaType = {\n schema?: unknown\n example?: unknown\n examples?: Record<string, unknown>\n}\n\ntype OpenApiResponse = {\n description?: string\n content?: Record<string, OpenApiMediaType>\n}\n\ntype MediaTypeEntry = {\n mediaType: string\n value: OpenApiMediaType\n}\n\ntype ExampleEntry = {\n key: string\n title: string\n summary?: string\n value: unknown\n generated?: boolean\n}\n\nconst VIRTUAL_PREFIX = 'virtual:clarify-page/'\n\nfunction isRecord(value: unknown): value is OpenApiRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction isReference(value: unknown): value is { $ref: string } {\n return isRecord(value) && typeof value.$ref === 'string'\n}\n\nfunction resolveReferenceName(ref: string): string {\n return ref.split('/').filter(Boolean).at(-1) ?? ref\n}\n\nfunction getPathItem(spec: OpenAPISpec, path: string): OpenApiRecord | undefined {\n const pathItem = spec.paths?.[path]\n return isRecord(pathItem) ? pathItem : undefined\n}\n\nfunction getOperationParameters(spec: OpenAPISpec, path: string, operation: OpenAPIOperation): OpenApiParameter[] {\n const pathParameters = getPathItem(spec, path)?.parameters\n const operationParameters = (operation as OpenApiRecord).parameters\n\n return [...(Array.isArray(pathParameters) ? pathParameters : []), ...(Array.isArray(operationParameters) ? operationParameters : [])]\n .filter((parameter): parameter is OpenApiParameter => isRecord(parameter) && !isReference(parameter))\n}\n\nfunction getRequestBody(operation: OpenAPIOperation): OpenApiRecord | undefined {\n const requestBody = (operation as OpenApiRecord).requestBody\n return isRecord(requestBody) && !isReference(requestBody) ? requestBody : undefined\n}\n\nfunction getMediaTypeEntries(content: unknown): MediaTypeEntry[] {\n if (!isRecord(content)) return []\n\n return Object.entries(content)\n .filter(([, value]) => isRecord(value) && !isReference(value))\n .map(([mediaType, value]) => ({ mediaType, value: value as OpenApiMediaType }))\n .sort((a, z) => {\n const aJson = a.mediaType.includes('json') ? 0 : 1\n const zJson = z.mediaType.includes('json') ? 0 : 1\n return aJson - zJson\n })\n}\n\nfunction getJsonLikeContent(content: unknown): MediaTypeEntry | undefined {\n return getMediaTypeEntries(content)[0]\n}\n\nfunction getExampleValue(example: unknown): unknown {\n if (isRecord(example) && 'value' in example) return example.value\n if (isRecord(example) && 'externalValue' in example) return undefined\n return example\n}\n\nfunction getExampleTitle(key: string, example: unknown): { title: string; summary?: string } {\n if (isRecord(example)) {\n const summary = typeof example.summary === 'string' ? example.summary : undefined\n return { title: summary ?? key, summary }\n }\n\n return { title: key }\n}\n\nfunction getExampleEntries(mediaType?: OpenApiMediaType): ExampleEntry[] {\n if (!mediaType) return []\n\n if (isRecord(mediaType.examples)) {\n const examples: ExampleEntry[] = []\n\n for (const [key, example] of Object.entries(mediaType.examples)) {\n const value = getExampleValue(example)\n if (typeof value === 'undefined') continue\n\n const { title, summary } = getExampleTitle(key, example)\n examples.push({ key, title, summary, value })\n }\n\n if (examples.length > 0) return examples\n }\n\n if (typeof mediaType.example !== 'undefined') {\n return [{ key: 'default', title: 'Example', value: mediaType.example }]\n }\n\n const generated = schemaToExample(mediaType.schema)\n return typeof generated === 'undefined' ? [] : [{ key: 'schema', title: 'Schema example', value: generated, generated: true }]\n}\n\nfunction getContentExample(mediaType?: OpenApiMediaType): unknown {\n return getExampleEntries(mediaType)[0]?.value\n}\n\nfunction schemaToType(schema: unknown): string | undefined {\n if (!isRecord(schema)) return undefined\n if (isReference(schema)) return resolveReferenceName(schema.$ref)\n if (Array.isArray(schema.enum)) return schema.enum.map(String).join(' | ')\n\n const oneOf = schema.oneOf ?? schema.anyOf\n if (Array.isArray(oneOf)) {\n return oneOf.map(schemaToType).filter(Boolean).join(' | ')\n }\n\n if (schema.type === 'array') {\n return `${schemaToType(schema.items) ?? 'unknown'}[]`\n }\n\n return typeof schema.type === 'string' ? schema.type : undefined\n}\n\nfunction schemaToExample(schema: unknown, depth = 0): unknown {\n if (!isRecord(schema) || depth > 3) return undefined\n if (typeof schema.example !== 'undefined') return schema.example\n if (typeof schema.default !== 'undefined') return schema.default\n if (Array.isArray(schema.enum)) return schema.enum[0]\n if (isReference(schema)) return { id: resolveReferenceName(schema.$ref) }\n\n if (schema.type === 'array') {\n return [schemaToExample(schema.items, depth + 1) ?? 'string']\n }\n\n if (schema.type === 'object' || isRecord(schema.properties)) {\n const properties = isRecord(schema.properties) ? schema.properties : {}\n return Object.fromEntries(\n Object.entries(properties).slice(0, 8).map(([name, propertySchema]) => [\n name,\n schemaToExample(propertySchema, depth + 1) ?? exampleForType(schemaToType(propertySchema)),\n ]),\n )\n }\n\n return exampleForType(schemaToType(schema))\n}\n\nfunction exampleForType(type?: string): unknown {\n if (!type) return 'string'\n if (type.endsWith('[]')) return []\n if (type.includes('integer') || type.includes('number')) return 42\n if (type.includes('boolean')) return true\n if (type.includes('object')) return {}\n return 'string'\n}\n\nfunction stringifyExample(value: unknown): string {\n if (typeof value === 'undefined') return ''\n if (typeof value === 'string') return value\n return JSON.stringify(value, null, 2)\n}\n\nfunction shellQuote(value: string): string {\n return `'${value.replace(/'/g, `'\"'\"'`)}'`\n}\n\nfunction getServerUrl(spec: OpenAPISpec): string {\n const servers = (spec as OpenApiRecord).servers\n if (!Array.isArray(servers)) return ''\n\n const firstServer = servers.find(isRecord)\n return typeof firstServer?.url === 'string' ? firstServer.url : ''\n}\n\nfunction buildOperationUrl(spec: OpenAPISpec, path: string, parameters: OpenApiParameter[]): string {\n const query = parameters\n .filter((parameter) => parameter.in === 'query' && parameter.name)\n .map((parameter) => `${parameter.name}={${parameter.name}}`)\n .join('&')\n const serverUrl = getServerUrl(spec).replace(/\\/$/, '')\n return `${serverUrl}${path}${query ? `?${query}` : ''}`\n}\n\nfunction buildCurlExample(arg0: {\n spec: OpenAPISpec\n path: string\n method: string\n parameters: OpenApiParameter[]\n requestContent?: { mediaType: string; value: OpenApiMediaType }\n}): string { const {\n spec,\n path,\n method,\n parameters,\n requestContent,\n} = arg0\n\n const url = buildOperationUrl(spec, path, parameters)\n const lines = [`curl ${method === 'GET' ? '-G ' : ''}${shellQuote(url)}`]\n\n if (method !== 'GET') lines.push(` -X ${method}`)\n lines.push(\" -H 'Authorization: Bearer {token}'\")\n lines.push(\" -H 'Accept: application/json'\")\n\n const requestExample = getContentExample(requestContent?.value)\n if (requestContent && typeof requestExample !== 'undefined') {\n lines.push(` -H 'Content-Type: ${requestContent.mediaType}'`)\n lines.push(` -d ${shellQuote(stringifyExample(requestExample))}`)\n }\n\n return lines.join(' \\\\\\n')\n}\n\nfunction getResponseEntries(operation: OpenAPIOperation): Array<{ status: string; response: OpenApiResponse }> {\n const responses = (operation as OpenApiRecord).responses\n if (!isRecord(responses)) return []\n\n return Object.entries(responses)\n .filter(([, response]) => isRecord(response) && !isReference(response))\n .map(([status, response]) => ({ status, response: response as OpenApiResponse }))\n}\n\nfunction SchemaProperties(arg0: { title: string; schema: unknown }): ReactNode { const { title, schema } = arg0\n\n const targetSchema = isReference(schema) ? undefined : schema\n const properties = isRecord(targetSchema) && isRecord(targetSchema.properties) ? targetSchema.properties : undefined\n const required = isRecord(targetSchema) && Array.isArray(targetSchema.required) ? targetSchema.required.map(String) : []\n\n if (!properties || Object.keys(properties).length === 0) return null\n\n return (\n <div>\n <h3>{title}</h3>\n <Properties>\n {Object.entries(properties).map(([name, propertySchema]) => {\n const property = isRecord(propertySchema) ? propertySchema : {}\n const type = schemaToType(propertySchema)\n const description = typeof property.description === 'string' ? property.description : undefined\n const isRequired = required.includes(name)\n\n return (\n <Property key={name} name={name} type={isRequired && type ? `${type}, required` : type}>\n {description ?? (isRequired ? 'Required.' : 'Optional.')}\n </Property>\n )\n })}\n </Properties>\n </div>\n )\n}\n\nfunction ParameterList(arg0: { title: string; parameters: OpenApiParameter[] }): ReactNode { const { title, parameters } = arg0\n\n if (parameters.length === 0) return null\n\n return (\n <div>\n <h3>{title}</h3>\n <Properties>\n {parameters.map((parameter) => (\n <Property\n key={`${parameter.in}-${parameter.name}`}\n name={parameter.name ?? 'parameter'}\n type={[schemaToType(parameter.schema), parameter.required ? 'required' : undefined].filter(Boolean).join(', ') || undefined}\n >\n {parameter.description ?? `${parameter.in ?? 'Operation'} parameter.`}\n </Property>\n ))}\n </Properties>\n </div>\n )\n}\n\nfunction ResponseList(arg0: { operation: OpenAPIOperation }): ReactNode { const { operation } = arg0\n\n const responses = getResponseEntries(operation)\n if (responses.length === 0) return null\n\n return (\n <div>\n <h3>Responses</h3>\n <Properties>\n {responses.map(({ status, response }) => {\n const content = getJsonLikeContent(response.content)\n const type = schemaToType(content?.value.schema)\n\n return (\n <Property key={status} name={status} type={type}>\n {response.description ?? 'Response.'}\n </Property>\n )\n })}\n </Properties>\n </div>\n )\n}\n\nfunction codeLanguageForMediaType(mediaType?: string): string {\n if (!mediaType) return 'json'\n if (mediaType.includes('json')) return 'json'\n if (mediaType.includes('yaml') || mediaType.includes('yml')) return 'yaml'\n if (mediaType.startsWith('text/')) return 'text'\n if (mediaType.includes('xml')) return 'xml'\n return 'text'\n}\n\nfunction SelectControl(arg0: {\n label: string\n value: string\n options: string[]\n onChange: (value: string) => void\n}): ReactNode { const {\n label,\n value,\n options,\n onChange,\n} = arg0\n\n if (options.length <= 1) return null\n\n return (\n <Listbox value={value} onChange={onChange}>\n <div className=\"clarify-api-select relative flex flex-col gap-1 text-[0.625rem]/5 font-semibold tracking-widest text-zinc-400 uppercase\">\n <ListboxButton className=\"clarify-api-select-button flex min-w-32 items-center justify-between gap-2 rounded-lg border border-white/10 bg-zinc-900 px-2.5 py-1.5 font-mono text-xs font-medium tracking-normal text-zinc-100 outline-hidden transition hover:border-white/20 focus:border-emerald-400 focus:ring-2 focus:ring-emerald-400/20 data-open:border-emerald-400 data-open:ring-2 data-open:ring-emerald-400/20\">\n <span className=\"flex flex-col items-start gap-0.5 truncate\">\n <span className=\"font-sans text-[0.625rem]/4 font-semibold tracking-widest text-zinc-500 uppercase\">{label}</span>\n <span className=\"truncate\">{value}</span>\n </span>\n <ChevronsUpDownIcon className=\"h-3.5 w-3.5 shrink-0 text-zinc-500\" aria-hidden=\"true\" />\n </ListboxButton>\n <ListboxOptions\n anchor=\"bottom start\"\n className=\"clarify-api-select-options z-30 mt-1 max-h-64 w-(--button-width) min-w-40 overflow-auto rounded-xl border border-white/10 bg-zinc-900 p-1 text-xs shadow-lg shadow-black/20 [--anchor-gap:--spacing(1)] focus:outline-none\"\n >\n {options.map((option) => (\n <ListboxOption\n key={option}\n value={option}\n className=\"clarify-api-select-option group flex cursor-default items-center justify-between gap-3 rounded-lg px-2.5 py-2 font-mono text-xs text-zinc-300 select-none data-focus:bg-white/10 data-focus:text-white data-selected:text-emerald-300\"\n >\n <span className=\"truncate\">{option}</span>\n <CheckIcon className=\"h-3.5 w-3.5 shrink-0 opacity-0 group-data-selected:opacity-100\" aria-hidden=\"true\" />\n </ListboxOption>\n ))}\n </ListboxOptions>\n </div>\n </Listbox>\n )\n}\n\nfunction ExamplePicker(arg0: {\n examples: ExampleEntry[]\n selectedKey: string\n onSelect: (key: string) => void\n}): ReactNode { const {\n examples,\n selectedKey,\n onSelect,\n} = arg0\n\n const scrollerRef = useRef<HTMLDivElement | null>(null)\n\n if (examples.length <= 1) return null\n\n function scrollBy(direction: 1 | -1) {\n const el = scrollerRef.current\n if (!el) return\n el.scrollBy({ left: direction * Math.max(120, el.clientWidth * 0.6), behavior: 'smooth' })\n }\n\n return (\n <div className=\"relative -mr-1 flex min-w-0 flex-1 items-center gap-1\">\n <button\n type=\"button\"\n aria-label=\"Scroll examples left\"\n onClick={() => scrollBy(-1)}\n className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-full text-zinc-500 transition hover:bg-white/5 hover:text-zinc-200\"\n >\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" className=\"h-3 w-3\">\n <path fillRule=\"evenodd\" d=\"M12.79 5.23a.75.75 0 010 1.06L9.06 10l3.73 3.71a.75.75 0 11-1.06 1.06l-4.25-4.24a.75.75 0 010-1.06l4.25-4.24a.75.75 0 011.06 0z\" clipRule=\"evenodd\" />\n </svg>\n </button>\n <div\n ref={scrollerRef}\n className=\"flex min-w-0 flex-1 items-center gap-1.5 overflow-x-auto whitespace-nowrap scroll-smooth scrollbar-none [&::-webkit-scrollbar]:hidden\"\n >\n {examples.map((example) => (\n <button\n key={example.key}\n type=\"button\"\n onClick={() => onSelect(example.key)}\n title={example.summary}\n className={[\n 'shrink-0 rounded-md px-2 py-0.5 text-xs font-medium transition',\n example.key === selectedKey\n ? 'bg-white/10 text-white'\n : 'text-zinc-400 hover:bg-white/5 hover:text-zinc-200',\n ].join(' ')}\n >\n {example.title}\n </button>\n ))}\n </div>\n <button\n type=\"button\"\n aria-label=\"Scroll examples right\"\n onClick={() => scrollBy(1)}\n className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-full text-zinc-500 transition hover:bg-white/5 hover:text-zinc-200\"\n >\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" className=\"h-3 w-3\">\n <path fillRule=\"evenodd\" d=\"M7.21 14.77a.75.75 0 010-1.06L10.94 10 7.21 6.29a.75.75 0 111.06-1.06l4.25 4.24a.75.75 0 010 1.06l-4.25 4.24a.75.75 0 01-1.06 0z\" clipRule=\"evenodd\" />\n </svg>\n </button>\n </div>\n )\n}\n\nfunction CopyCodeButton(arg0: { code: string }): ReactNode { const { code } = arg0\n\n const [copied, setCopied] = useState(false)\n\n return (\n <button\n type=\"button\"\n onClick={() => {\n void window.navigator.clipboard.writeText(code).then(() => {\n setCopied(true)\n window.setTimeout(() => setCopied(false), 1000)\n })\n }}\n className=\"absolute top-3.5 right-4 rounded-full bg-white/5 px-3 py-1 text-2xs font-medium text-zinc-400 opacity-0 transition hover:bg-white/10 hover:text-zinc-200 group-hover:opacity-100 focus:opacity-100\"\n >\n {copied ? 'Copied!' : 'Copy'}\n </button>\n )\n}\n\nfunction ApiExampleCodeGroup(arg0: {\n title: string\n tag?: string\n label?: string\n code: string\n language: string\n examples?: ExampleEntry[]\n selectedExampleKey?: string\n onSelectExample?: (key: string) => void\n}): ReactNode { const {\n title,\n tag,\n label,\n code,\n language,\n examples,\n selectedExampleKey,\n onSelectExample,\n} = arg0\n\n return (\n <div className=\"clarify-api-example my-6 overflow-hidden rounded-2xl bg-zinc-900 shadow-md dark:ring-1 dark:ring-white/10\">\n <div className=\"not-prose\">\n <div className=\"clarify-api-example-header flex min-h-[calc(--spacing(12)+1px)] flex-wrap items-center gap-x-4 border-b border-zinc-700 bg-zinc-800 px-4 dark:border-zinc-800 dark:bg-transparent\">\n <h3 className=\"shrink-0 py-3 text-xs font-semibold text-white\">{title}</h3>\n {examples && examples.length > 1 && selectedExampleKey && onSelectExample ? (\n <ExamplePicker examples={examples} selectedKey={selectedExampleKey} onSelect={onSelectExample} />\n ) : null}\n </div>\n {tag || label ? (\n <div className=\"flex h-9 items-center gap-2 border-y border-t-transparent border-b-white/7.5 bg-zinc-900 px-4 dark:border-b-white/5 dark:bg-white/1\">\n {tag ? <span className=\"font-mono text-[0.625rem]/6 font-semibold text-emerald-400\">{tag}</span> : null}\n {tag && label ? <span className=\"h-0.5 w-0.5 rounded-full bg-zinc-500\" /> : null}\n {label ? <span className=\"font-mono text-xs text-zinc-400\">{label}</span> : null}\n </div>\n ) : null}\n <div className=\"clarify-api-example-code group relative\">\n <pre className=\"overflow-x-auto p-4 text-xs text-white\">\n <code className={`language-${language}`}>{code}</code>\n </pre>\n <CopyCodeButton code={code} />\n </div>\n </div>\n </div>\n )\n}\n\nfunction RequestExamplesPanel(arg0: {\n spec: OpenAPISpec\n path: string\n method: string\n parameters: OpenApiParameter[]\n requestContents: MediaTypeEntry[]\n}): ReactNode { const {\n spec,\n path,\n method,\n parameters,\n requestContents,\n} = arg0\n\n const [selectedMediaType, setSelectedMediaType] = useState(requestContents[0]?.mediaType ?? '')\n const selectedContent = requestContents.find((content) => content.mediaType === selectedMediaType) ?? requestContents[0]\n const examples = getExampleEntries(selectedContent?.value)\n const [selectedExampleKey, setSelectedExampleKey] = useState(examples[0]?.key ?? '')\n const selectedExample = examples.find((example) => example.key === selectedExampleKey) ?? examples[0]\n const requestContent = selectedContent ? { ...selectedContent, value: { ...selectedContent.value, example: selectedExample?.value, examples: undefined } } : undefined\n const curl = buildCurlExample({ spec, path, method, parameters, requestContent })\n\n return (\n <div>\n <div className=\"mb-3 flex flex-wrap gap-3\">\n <SelectControl\n label=\"Media type\"\n value={selectedContent?.mediaType ?? ''}\n options={requestContents.map((content) => content.mediaType)}\n onChange={(value) => {\n setSelectedMediaType(value)\n setSelectedExampleKey(getExampleEntries(requestContents.find((content) => content.mediaType === value)?.value)[0]?.key ?? '')\n }}\n />\n </div>\n <ApiExampleCodeGroup\n title=\"Request\"\n tag={method}\n label={path}\n code={curl}\n language=\"bash\"\n examples={examples}\n selectedExampleKey={selectedExample?.key}\n onSelectExample={setSelectedExampleKey}\n />\n </div>\n )\n}\n\nfunction ResponseExamplesPanel(arg0: { operation: OpenAPIOperation }): ReactNode { const { operation } = arg0\n\n const responses = getResponseEntries(operation).filter(({ response }) => getMediaTypeEntries(response.content).length > 0)\n const [selectedStatus, setSelectedStatus] = useState(responses.find(({ status }) => status.startsWith('2'))?.status ?? responses[0]?.status ?? '')\n const selectedResponse = responses.find(({ status }) => status === selectedStatus) ?? responses[0]\n const responseContents = getMediaTypeEntries(selectedResponse?.response.content)\n const [selectedMediaType, setSelectedMediaType] = useState(responseContents[0]?.mediaType ?? '')\n const selectedContent = responseContents.find((content) => content.mediaType === selectedMediaType) ?? responseContents[0]\n const examples = getExampleEntries(selectedContent?.value)\n const [selectedExampleKey, setSelectedExampleKey] = useState(examples[0]?.key ?? '')\n const selectedExample = examples.find((example) => example.key === selectedExampleKey) ?? examples[0]\n const responseCode = stringifyExample(selectedExample?.value)\n\n if (!selectedResponse || !selectedContent || !responseCode) return null\n\n return (\n <div>\n <div className=\"mb-3 flex flex-wrap gap-3\">\n <SelectControl\n label=\"Status\"\n value={selectedResponse.status}\n options={responses.map(({ status }) => status)}\n onChange={(value) => {\n const nextResponse = responses.find(({ status }) => status === value)\n const nextContents = getMediaTypeEntries(nextResponse?.response.content)\n setSelectedStatus(value)\n setSelectedMediaType(nextContents[0]?.mediaType ?? '')\n setSelectedExampleKey(getExampleEntries(nextContents[0]?.value)[0]?.key ?? '')\n }}\n />\n <SelectControl\n label=\"Media type\"\n value={selectedContent.mediaType}\n options={responseContents.map((content) => content.mediaType)}\n onChange={(value) => {\n setSelectedMediaType(value)\n setSelectedExampleKey(getExampleEntries(responseContents.find((content) => content.mediaType === value)?.value)[0]?.key ?? '')\n }}\n />\n </div>\n <ApiExampleCodeGroup\n title=\"Response\"\n tag={selectedResponse.status}\n label={selectedContent.mediaType}\n code={responseCode}\n language={codeLanguageForMediaType(selectedContent.mediaType)}\n examples={examples}\n selectedExampleKey={selectedExample?.key}\n onSelectExample={setSelectedExampleKey}\n />\n </div>\n )\n}\n\nfunction EndpointExamples(arg0: {\n spec: OpenAPISpec\n path: string\n method: string\n operation: OpenAPIOperation\n parameters: OpenApiParameter[]\n requestContents: MediaTypeEntry[]\n}): ReactNode { const {\n spec,\n path,\n method,\n operation,\n parameters,\n requestContents,\n} = arg0\n\n return (\n <div className=\"space-y-6\">\n <RequestExamplesPanel spec={spec} path={path} method={method} parameters={parameters} requestContents={requestContents} />\n <ResponseExamplesPanel operation={operation} />\n </div>\n )\n}\n\nfunction OpenApiHeader(arg0: { spec: OpenAPISpec }): ReactNode { const { spec } = arg0\n\n return (\n <header className=\"mb-16\">\n <p className=\"mb-3 font-mono text-xs/6 font-medium tracking-widest text-emerald-500 uppercase dark:text-emerald-400\">\n OpenAPI Reference\n </p>\n <h1>{spec.info?.title ?? 'API Documentation'}</h1>\n {spec.info?.description ? <p className=\"lead\">{spec.info.description}</p> : null}\n {spec.info?.version ? <p className=\"text-sm text-zinc-500 dark:text-zinc-400\">Version {spec.info.version}</p> : null}\n </header>\n )\n}\n\nfunction OpenApiOperation(arg0: { spec: OpenAPISpec; path: string; method: string; operation: OpenAPIOperation }): ReactNode { const { spec, path, method, operation } = arg0\n\n const id = slug(`${method.toLowerCase()} ${path}`)\n const summary = operation.summary ?? `${method} ${path}`\n const description = operation.description\n const parameters = getOperationParameters(spec, path, operation)\n const requestBody = getRequestBody(operation)\n const requestContents = getMediaTypeEntries(requestBody?.content)\n const requestSchema = requestContents[0]?.value.schema\n const groupedParameters = {\n path: parameters.filter((parameter) => parameter.in === 'path'),\n query: parameters.filter((parameter) => parameter.in === 'query'),\n header: parameters.filter((parameter) => parameter.in === 'header'),\n }\n\n return (\n <section className=\"clarify-api-endpoint scroll-mt-24\" aria-labelledby={id}>\n <Heading id={id} tag={method} label={path}>\n {summary}\n </Heading>\n <Row>\n <Col>\n {description ? <p>{description}</p> : null}\n <ParameterList title=\"Path parameters\" parameters={groupedParameters.path} />\n <ParameterList title=\"Query parameters\" parameters={groupedParameters.query} />\n <ParameterList title=\"Headers\" parameters={groupedParameters.header} />\n {requestBody && requestContents.length > 0 ? (\n <>\n <h3>Request body</h3>\n {typeof requestBody.description === 'string' ? <p>{requestBody.description}</p> : null}\n <SchemaProperties title=\"Body properties\" schema={requestSchema} />\n </>\n ) : null}\n <ResponseList operation={operation} />\n </Col>\n <Col sticky>\n <EndpointExamples\n spec={spec}\n path={path}\n method={method}\n operation={operation}\n parameters={parameters}\n requestContents={requestContents}\n />\n </Col>\n </Row>\n </section>\n )\n}\n\nfunction OpenApiPaths(arg0: { spec: OpenAPISpec }): ReactNode { const { spec } = arg0\n\n const entries = listOpenApiOperations(spec).map(({ path, method, operation }) => ({\n path,\n method: method.toUpperCase(),\n operation,\n }))\n\n return (\n <div className=\"clarify-api-endpoints space-y-16\">\n {entries.map(({ path, method, operation }) => (\n <OpenApiOperation key={`${method}-${path}`} spec={spec} path={path} method={method} operation={operation} />\n ))}\n </div>\n )\n}\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\nfunction 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\nfunction WarningBox(arg0: { children: ReactNode; tone?: 'amber' | 'red' }): ReactNode { 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={clsx('clarify-warning', classes)}>{children}</div>\n}\n\nexport function OpenApiPage(arg0: OpenApiPageProps): ReactNode {\n const { spec, specPath } = arg0\n const resolved = useOpenApiSpec(spec, specPath)\n\n if (!resolved) {\n return <WarningBox>OpenAPI spec not found: {specPath ?? '(未提供 spec 或 specPath)'}</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} />\n </Prose>\n <PageFooter />\n </article>\n )\n}\n\nexport function ApiEndpoint(arg0: ApiEndpointProps): ReactNode {\n const { spec, path, method } = arg0\n const op = getOpenApiOperation(spec, path, method)\n\n if (!op) {\n return <WarningBox tone=\"red\">Endpoint not found: {method.toUpperCase()} {path}</WarningBox>\n }\n\n return <OpenApiOperation spec={spec} path={path} method={method.toUpperCase()} operation={op} />\n}\n\nexport function OpenApiEndpoint(arg0: OpenApiEndpointProps): ReactNode {\n const { specPath, path, method } = arg0\n const spec = useOpenApiSpec(undefined, specPath)\n\n if (!spec) {\n return <WarningBox>OpenAPI spec not found: {specPath}</WarningBox>\n }\n\n return <ApiEndpoint spec={spec} path={path} method={method} />\n}\n","import { ApiEndpointCard, DocShell } from '../components'\nimport { OpenApiPage, ApiEndpoint, OpenApiEndpoint } from '../openapi'\n\nimport * as mdxPrimitives from './primitives'\n\nexport function useMDXComponents(components: Record<string, unknown> = {}) {\n return {\n ...components,\n ...mdxPrimitives,\n OpenApiPage,\n ApiEndpoint,\n OpenApiEndpoint,\n ApiEndpointCard,\n DocShell,\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../source/mdx/primitives.tsx","../source/openapi/utils.ts","../source/openapi/index.tsx","../source/mdx/components.ts"],"sourcesContent":["import clsx from 'clsx'\nimport { createElement, type ComponentPropsWithoutRef, type ReactNode } from 'react'\nimport { Link } from 'react-router-dom'\n\nimport { Button, Callout, Card, CardGroup, Heading, PageFooter, Prose } from '../components'\nimport { Code, CodeGroup, Pre } from '../components/Code'\n\nexport function wrapper(arg0: { children: ReactNode }) { const { children } = arg0\n\n return (\n <article className=\"clarify-mdx-page flex h-full flex-col pt-16 pb-10\">\n <Prose className=\"flex-auto\">{children}</Prose>\n <PageFooter />\n </article>\n )\n}\n\nexport function a(arg0: ComponentPropsWithoutRef<'a'>) { const { href = '', ...props } = arg0\n\n if (href.startsWith('/') && !href.startsWith('//')) {\n return <Link to={href} {...props} />\n }\n\n return <a href={href} {...props} />\n}\n\nexport const code = Code\nexport const pre = Pre\nexport { Button, Callout, Card, CardGroup, CodeGroup }\n\nexport function h2(props: Omit<ComponentPropsWithoutRef<typeof Heading>, 'level'>) {\n return createElement(Heading, { level: 2, ...props })\n}\n\nexport function h3(props: Omit<ComponentPropsWithoutRef<typeof Heading>, 'level'>) {\n return createElement(Heading, { level: 3, ...props })\n}\n\nfunction InfoIcon(props: ComponentPropsWithoutRef<'svg'>) {\n return (\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\" {...props}>\n <circle cx=\"8\" cy=\"8\" r=\"8\" strokeWidth=\"0\" />\n <path fill=\"none\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.5\" d=\"M6.75 7.75h1.5v3.5\" />\n <circle cx=\"8\" cy=\"4\" r=\".5\" fill=\"none\" />\n </svg>\n )\n}\n\nexport function Note(arg0: { children: ReactNode }) { const { children } = arg0\n\n return (\n <div className=\"clarify-note my-6 flex gap-2.5 rounded-2xl border border-emerald-500/20 bg-emerald-50/50 p-4 text-sm/6 text-emerald-900 dark:border-emerald-500/30 dark:bg-emerald-500/5 dark:text-emerald-200 dark:[--tw-prose-links-hover:var(--color-emerald-300)] dark:[--tw-prose-links:var(--color-white)]\">\n <InfoIcon className=\"mt-1 h-4 w-4 flex-none fill-emerald-500 stroke-white dark:fill-emerald-200/20 dark:stroke-emerald-200\" />\n <div className=\"*:first:mt-0 *:last:mb-0\">{children}</div>\n </div>\n )\n}\n\nexport function Row(arg0: { children: ReactNode }) { const { children } = arg0\n\n return <div className=\"clarify-row grid grid-cols-1 items-start gap-x-16 gap-y-10 xl:max-w-none xl:grid-cols-2\">{children}</div>\n}\n\nexport function Col(arg0: { children: ReactNode; sticky?: boolean }) { const { children, sticky = false } = arg0\n\n return <div className={clsx('clarify-col *:first:mt-0 *:last:mb-0', sticky && 'xl:sticky xl:top-24')}>{children}</div>\n}\n\nexport function Properties(arg0: { children: ReactNode }) { const { children } = arg0\n\n return (\n <div className=\"clarify-properties my-6\">\n <ul\n role=\"list\"\n className=\"m-0 list-none divide-y divide-zinc-900/5 p-0 dark:divide-white/5\"\n >\n {children}\n </ul>\n </div>\n )\n}\n\nexport function Property(arg0: { name: string; children: ReactNode; type?: string }) { const { name, children, type } = arg0\n\n return (\n <li className=\"clarify-property m-0 px-0 py-4 first:pt-0 last:pb-0\">\n <dl className=\"m-0 flex flex-wrap items-center gap-x-3 gap-y-2\">\n <dt className=\"sr-only\">Name</dt>\n <dd>\n <code>{name}</code>\n </dd>\n {type ? (\n <>\n <dt className=\"sr-only\">Type</dt>\n <dd className=\"font-mono text-xs text-zinc-400 dark:text-zinc-500\">{type}</dd>\n </>\n ) : null}\n <dt className=\"sr-only\">Description</dt>\n <dd className=\"w-full flex-none *:first:mt-0 *:last:mb-0\">{children}</dd>\n </dl>\n </li>\n )\n}\n","import type { OpenAPIV3, OpenAPIV3_1 } from 'openapi-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\nexport function getOpenApiOperation(spec: OpenAPISpec, path: string, method: string): OpenAPIOperation | undefined {\n if (!isOpenAPIHttpMethod(method)) return undefined\n return spec.paths?.[path]?.[method.toLowerCase() as OpenAPIHttpMethod]\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, pathItem] of Object.entries(paths)) {\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 })\n }\n }\n\n return operations\n}\n","import { Listbox, ListboxButton, ListboxOption, ListboxOptions } from '@headlessui/react'\nimport clsx from 'clsx'\nimport { slug } from 'github-slugger'\nimport { CheckIcon, ChevronsUpDownIcon } from 'lucide-react'\nimport { useRef, useState, type ReactNode } from 'react'\nimport { useLocation } from 'react-router-dom'\n\nimport { Heading, PageFooter, Prose } from '../components'\nimport { useClarifyConfig, useOpenApis } from '../context'\nimport { Col, Properties, Property, Row } from '../mdx/primitives'\n\nimport { getOpenApiOperation, listOpenApiOperations } from './utils'\nimport type { OpenAPIOperation, OpenAPISpec } from './utils'\n\nexport type { OpenAPIOperation, OpenAPISpec } from './utils'\n\nexport type OpenApiPageProps = {\n spec?: OpenAPISpec\n specPath?: string\n}\n\nexport type ApiEndpointProps = {\n spec: OpenAPISpec\n path: string\n method: string\n}\n\nexport type OpenApiEndpointProps = {\n specPath: string\n path: string\n method: string\n}\n\ntype OpenApiRecord = Record<string, unknown>\n\ntype OpenApiParameter = {\n name?: string\n in?: string\n required?: boolean\n description?: string\n schema?: unknown\n}\n\ntype OpenApiMediaType = {\n schema?: unknown\n example?: unknown\n examples?: Record<string, unknown>\n}\n\ntype OpenApiResponse = {\n description?: string\n content?: Record<string, OpenApiMediaType>\n}\n\ntype MediaTypeEntry = {\n mediaType: string\n value: OpenApiMediaType\n}\n\ntype ExampleEntry = {\n key: string\n title: string\n summary?: string\n value: unknown\n generated?: boolean\n}\n\nconst VIRTUAL_PREFIX = 'virtual:clarify-page/'\n\nfunction isRecord(value: unknown): value is OpenApiRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction isReference(value: unknown): value is { $ref: string } {\n return isRecord(value) && typeof value.$ref === 'string'\n}\n\nfunction resolveReferenceName(ref: string): string {\n return ref.split('/').filter(Boolean).at(-1) ?? ref\n}\n\nfunction getPathItem(spec: OpenAPISpec, path: string): OpenApiRecord | undefined {\n const pathItem = spec.paths?.[path]\n return isRecord(pathItem) ? pathItem : undefined\n}\n\nfunction getOperationParameters(spec: OpenAPISpec, path: string, operation: OpenAPIOperation): OpenApiParameter[] {\n const pathParameters = getPathItem(spec, path)?.parameters\n const operationParameters = (operation as OpenApiRecord).parameters\n\n return [...(Array.isArray(pathParameters) ? pathParameters : []), ...(Array.isArray(operationParameters) ? operationParameters : [])]\n .filter((parameter): parameter is OpenApiParameter => isRecord(parameter) && !isReference(parameter))\n}\n\nfunction getRequestBody(operation: OpenAPIOperation): OpenApiRecord | undefined {\n const requestBody = (operation as OpenApiRecord).requestBody\n return isRecord(requestBody) && !isReference(requestBody) ? requestBody : undefined\n}\n\nfunction getMediaTypeEntries(content: unknown): MediaTypeEntry[] {\n if (!isRecord(content)) return []\n\n return Object.entries(content)\n .filter(([, value]) => isRecord(value) && !isReference(value))\n .map(([mediaType, value]) => ({ mediaType, value: value as OpenApiMediaType }))\n .sort((a, z) => {\n const aJson = a.mediaType.includes('json') ? 0 : 1\n const zJson = z.mediaType.includes('json') ? 0 : 1\n return aJson - zJson\n })\n}\n\nfunction getJsonLikeContent(content: unknown): MediaTypeEntry | undefined {\n return getMediaTypeEntries(content)[0]\n}\n\nfunction getExampleValue(example: unknown): unknown {\n if (isRecord(example) && 'value' in example) return example.value\n if (isRecord(example) && 'externalValue' in example) return undefined\n return example\n}\n\nfunction getExampleTitle(key: string, example: unknown): { title: string; summary?: string } {\n if (isRecord(example)) {\n const summary = typeof example.summary === 'string' ? example.summary : undefined\n return { title: summary ?? key, summary }\n }\n\n return { title: key }\n}\n\nfunction getExampleEntries(mediaType?: OpenApiMediaType): ExampleEntry[] {\n if (!mediaType) return []\n\n if (isRecord(mediaType.examples)) {\n const examples: ExampleEntry[] = []\n\n for (const [key, example] of Object.entries(mediaType.examples)) {\n const value = getExampleValue(example)\n if (typeof value === 'undefined') continue\n\n const { title, summary } = getExampleTitle(key, example)\n examples.push({ key, title, summary, value })\n }\n\n if (examples.length > 0) return examples\n }\n\n if (typeof mediaType.example !== 'undefined') {\n return [{ key: 'default', title: 'Example', value: mediaType.example }]\n }\n\n const generated = schemaToExample(mediaType.schema)\n return typeof generated === 'undefined' ? [] : [{ key: 'schema', title: 'Schema example', value: generated, generated: true }]\n}\n\nfunction getContentExample(mediaType?: OpenApiMediaType): unknown {\n return getExampleEntries(mediaType)[0]?.value\n}\n\nfunction schemaToType(schema: unknown): string | undefined {\n if (!isRecord(schema)) return undefined\n if (isReference(schema)) return resolveReferenceName(schema.$ref)\n if (Array.isArray(schema.enum)) return schema.enum.map(String).join(' | ')\n\n const oneOf = schema.oneOf ?? schema.anyOf\n if (Array.isArray(oneOf)) {\n return oneOf.map(schemaToType).filter(Boolean).join(' | ')\n }\n\n if (schema.type === 'array') {\n return `${schemaToType(schema.items) ?? 'unknown'}[]`\n }\n\n return typeof schema.type === 'string' ? schema.type : undefined\n}\n\nfunction schemaToExample(schema: unknown, depth = 0): unknown {\n if (!isRecord(schema) || depth > 3) return undefined\n if (typeof schema.example !== 'undefined') return schema.example\n if (typeof schema.default !== 'undefined') return schema.default\n if (Array.isArray(schema.enum)) return schema.enum[0]\n if (isReference(schema)) return { id: resolveReferenceName(schema.$ref) }\n\n if (schema.type === 'array') {\n return [schemaToExample(schema.items, depth + 1) ?? 'string']\n }\n\n if (schema.type === 'object' || isRecord(schema.properties)) {\n const properties = isRecord(schema.properties) ? schema.properties : {}\n return Object.fromEntries(\n Object.entries(properties).slice(0, 8).map(([name, propertySchema]) => [\n name,\n schemaToExample(propertySchema, depth + 1) ?? exampleForType(schemaToType(propertySchema)),\n ]),\n )\n }\n\n return exampleForType(schemaToType(schema))\n}\n\nfunction exampleForType(type?: string): unknown {\n if (!type) return 'string'\n if (type.endsWith('[]')) return []\n if (type.includes('integer') || type.includes('number')) return 42\n if (type.includes('boolean')) return true\n if (type.includes('object')) return {}\n return 'string'\n}\n\nfunction stringifyExample(value: unknown): string {\n if (typeof value === 'undefined') return ''\n if (typeof value === 'string') return value\n return JSON.stringify(value, null, 2)\n}\n\nfunction shellQuote(value: string): string {\n return `'${value.replace(/'/g, `'\"'\"'`)}'`\n}\n\nfunction getServerUrl(spec: OpenAPISpec): string {\n const servers = (spec as OpenApiRecord).servers\n if (!Array.isArray(servers)) return ''\n\n const firstServer = servers.find(isRecord)\n return typeof firstServer?.url === 'string' ? firstServer.url : ''\n}\n\nfunction buildOperationUrl(spec: OpenAPISpec, path: string, parameters: OpenApiParameter[]): string {\n const query = parameters\n .filter((parameter) => parameter.in === 'query' && parameter.name)\n .map((parameter) => `${parameter.name}={${parameter.name}}`)\n .join('&')\n const serverUrl = getServerUrl(spec).replace(/\\/$/, '')\n return `${serverUrl}${path}${query ? `?${query}` : ''}`\n}\n\nfunction buildCurlExample(arg0: {\n spec: OpenAPISpec\n path: string\n method: string\n parameters: OpenApiParameter[]\n requestContent?: { mediaType: string; value: OpenApiMediaType }\n}): string { const {\n spec,\n path,\n method,\n parameters,\n requestContent,\n} = arg0\n\n const url = buildOperationUrl(spec, path, parameters)\n const lines = [`curl ${method === 'GET' ? '-G ' : ''}${shellQuote(url)}`]\n\n if (method !== 'GET') lines.push(` -X ${method}`)\n lines.push(\" -H 'Authorization: Bearer {token}'\")\n lines.push(\" -H 'Accept: application/json'\")\n\n const requestExample = getContentExample(requestContent?.value)\n if (requestContent && typeof requestExample !== 'undefined') {\n lines.push(` -H 'Content-Type: ${requestContent.mediaType}'`)\n lines.push(` -d ${shellQuote(stringifyExample(requestExample))}`)\n }\n\n return lines.join(' \\\\\\n')\n}\n\nfunction getResponseEntries(operation: OpenAPIOperation): Array<{ status: string; response: OpenApiResponse }> {\n const responses = (operation as OpenApiRecord).responses\n if (!isRecord(responses)) return []\n\n return Object.entries(responses)\n .filter(([, response]) => isRecord(response) && !isReference(response))\n .map(([status, response]) => ({ status, response: response as OpenApiResponse }))\n}\n\nfunction SchemaProperties(arg0: { title: string; schema: unknown }): ReactNode { const { title, schema } = arg0\n\n const targetSchema = isReference(schema) ? undefined : schema\n const properties = isRecord(targetSchema) && isRecord(targetSchema.properties) ? targetSchema.properties : undefined\n const required = isRecord(targetSchema) && Array.isArray(targetSchema.required) ? targetSchema.required.map(String) : []\n\n if (!properties || Object.keys(properties).length === 0) return null\n\n return (\n <div>\n <h3>{title}</h3>\n <Properties>\n {Object.entries(properties).map(([name, propertySchema]) => {\n const property = isRecord(propertySchema) ? propertySchema : {}\n const type = schemaToType(propertySchema)\n const description = typeof property.description === 'string' ? property.description : undefined\n const isRequired = required.includes(name)\n\n return (\n <Property key={name} name={name} type={isRequired && type ? `${type}, required` : type}>\n {description ?? (isRequired ? 'Required.' : 'Optional.')}\n </Property>\n )\n })}\n </Properties>\n </div>\n )\n}\n\nfunction ParameterList(arg0: { title: string; parameters: OpenApiParameter[] }): ReactNode { const { title, parameters } = arg0\n\n if (parameters.length === 0) return null\n\n return (\n <div>\n <h3>{title}</h3>\n <Properties>\n {parameters.map((parameter) => (\n <Property\n key={`${parameter.in}-${parameter.name}`}\n name={parameter.name ?? 'parameter'}\n type={[schemaToType(parameter.schema), parameter.required ? 'required' : undefined].filter(Boolean).join(', ') || undefined}\n >\n {parameter.description ?? `${parameter.in ?? 'Operation'} parameter.`}\n </Property>\n ))}\n </Properties>\n </div>\n )\n}\n\nfunction ResponseList(arg0: { operation: OpenAPIOperation }): ReactNode { const { operation } = arg0\n\n const responses = getResponseEntries(operation)\n if (responses.length === 0) return null\n\n return (\n <div>\n <h3>Responses</h3>\n <Properties>\n {responses.map(({ status, response }) => {\n const content = getJsonLikeContent(response.content)\n const type = schemaToType(content?.value.schema)\n\n return (\n <Property key={status} name={status} type={type}>\n {response.description ?? 'Response.'}\n </Property>\n )\n })}\n </Properties>\n </div>\n )\n}\n\nfunction codeLanguageForMediaType(mediaType?: string): string {\n if (!mediaType) return 'json'\n if (mediaType.includes('json')) return 'json'\n if (mediaType.includes('yaml') || mediaType.includes('yml')) return 'yaml'\n if (mediaType.startsWith('text/')) return 'text'\n if (mediaType.includes('xml')) return 'xml'\n return 'text'\n}\n\nfunction SelectControl(arg0: {\n label: string\n value: string\n options: string[]\n onChange: (value: string) => void\n}): ReactNode { const {\n label,\n value,\n options,\n onChange,\n} = arg0\n\n if (options.length <= 1) return null\n\n return (\n <Listbox value={value} onChange={onChange}>\n <div className=\"clarify-api-select relative flex flex-col gap-1 text-[0.625rem]/5 font-semibold tracking-widest text-zinc-400 uppercase\">\n <ListboxButton className=\"clarify-api-select-button flex min-w-32 items-center justify-between gap-2 rounded-lg border border-white/10 bg-zinc-900 px-2.5 py-1.5 font-mono text-xs font-medium tracking-normal text-zinc-100 outline-hidden transition hover:border-white/20 focus:border-emerald-400 focus:ring-2 focus:ring-emerald-400/20 data-open:border-emerald-400 data-open:ring-2 data-open:ring-emerald-400/20\">\n <span className=\"flex flex-col items-start gap-0.5 truncate\">\n <span className=\"font-sans text-[0.625rem]/4 font-semibold tracking-widest text-zinc-500 uppercase\">{label}</span>\n <span className=\"truncate\">{value}</span>\n </span>\n <ChevronsUpDownIcon className=\"h-3.5 w-3.5 shrink-0 text-zinc-500\" aria-hidden=\"true\" />\n </ListboxButton>\n <ListboxOptions\n anchor=\"bottom start\"\n className=\"clarify-api-select-options z-30 mt-1 max-h-64 w-(--button-width) min-w-40 overflow-auto rounded-xl border border-white/10 bg-zinc-900 p-1 text-xs shadow-lg shadow-black/20 [--anchor-gap:--spacing(1)] focus:outline-none\"\n >\n {options.map((option) => (\n <ListboxOption\n key={option}\n value={option}\n className=\"clarify-api-select-option group flex cursor-default items-center justify-between gap-3 rounded-lg px-2.5 py-2 font-mono text-xs text-zinc-300 select-none data-focus:bg-white/10 data-focus:text-white data-selected:text-emerald-300\"\n >\n <span className=\"truncate\">{option}</span>\n <CheckIcon className=\"h-3.5 w-3.5 shrink-0 opacity-0 group-data-selected:opacity-100\" aria-hidden=\"true\" />\n </ListboxOption>\n ))}\n </ListboxOptions>\n </div>\n </Listbox>\n )\n}\n\nfunction ExamplePicker(arg0: {\n examples: ExampleEntry[]\n selectedKey: string\n onSelect: (key: string) => void\n}): ReactNode { const {\n examples,\n selectedKey,\n onSelect,\n} = arg0\n\n const scrollerRef = useRef<HTMLDivElement | null>(null)\n\n if (examples.length <= 1) return null\n\n function scrollBy(direction: 1 | -1) {\n const el = scrollerRef.current\n if (!el) return\n el.scrollBy({ left: direction * Math.max(120, el.clientWidth * 0.6), behavior: 'smooth' })\n }\n\n return (\n <div className=\"relative -mr-1 flex min-w-0 flex-1 items-center gap-1\">\n <button\n type=\"button\"\n aria-label=\"Scroll examples left\"\n onClick={() => scrollBy(-1)}\n className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-full text-zinc-500 transition hover:bg-white/5 hover:text-zinc-200\"\n >\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" className=\"h-3 w-3\">\n <path fillRule=\"evenodd\" d=\"M12.79 5.23a.75.75 0 010 1.06L9.06 10l3.73 3.71a.75.75 0 11-1.06 1.06l-4.25-4.24a.75.75 0 010-1.06l4.25-4.24a.75.75 0 011.06 0z\" clipRule=\"evenodd\" />\n </svg>\n </button>\n <div\n ref={scrollerRef}\n className=\"flex min-w-0 flex-1 items-center gap-1.5 overflow-x-auto whitespace-nowrap scroll-smooth scrollbar-none [&::-webkit-scrollbar]:hidden\"\n >\n {examples.map((example) => (\n <button\n key={example.key}\n type=\"button\"\n onClick={() => onSelect(example.key)}\n title={example.summary}\n className={[\n 'shrink-0 rounded-md px-2 py-0.5 text-xs font-medium transition',\n example.key === selectedKey\n ? 'bg-white/10 text-white'\n : 'text-zinc-400 hover:bg-white/5 hover:text-zinc-200',\n ].join(' ')}\n >\n {example.title}\n </button>\n ))}\n </div>\n <button\n type=\"button\"\n aria-label=\"Scroll examples right\"\n onClick={() => scrollBy(1)}\n className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-full text-zinc-500 transition hover:bg-white/5 hover:text-zinc-200\"\n >\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" className=\"h-3 w-3\">\n <path fillRule=\"evenodd\" d=\"M7.21 14.77a.75.75 0 010-1.06L10.94 10 7.21 6.29a.75.75 0 111.06-1.06l4.25 4.24a.75.75 0 010 1.06l-4.25 4.24a.75.75 0 01-1.06 0z\" clipRule=\"evenodd\" />\n </svg>\n </button>\n </div>\n )\n}\n\nfunction CopyCodeButton(arg0: { code: string }): ReactNode { const { code } = arg0\n\n const [copied, setCopied] = useState(false)\n\n return (\n <button\n type=\"button\"\n onClick={() => {\n void window.navigator.clipboard.writeText(code).then(() => {\n setCopied(true)\n window.setTimeout(() => setCopied(false), 1000)\n })\n }}\n className=\"absolute top-3.5 right-4 rounded-full bg-white/5 px-3 py-1 text-2xs font-medium text-zinc-400 opacity-0 transition hover:bg-white/10 hover:text-zinc-200 group-hover:opacity-100 focus:opacity-100\"\n >\n {copied ? 'Copied!' : 'Copy'}\n </button>\n )\n}\n\nfunction ApiExampleCodeGroup(arg0: {\n title: string\n tag?: string\n label?: string\n code: string\n language: string\n examples?: ExampleEntry[]\n selectedExampleKey?: string\n onSelectExample?: (key: string) => void\n}): ReactNode { const {\n title,\n tag,\n label,\n code,\n language,\n examples,\n selectedExampleKey,\n onSelectExample,\n} = arg0\n\n return (\n <div className=\"clarify-api-example my-6 overflow-hidden rounded-2xl bg-zinc-900 shadow-md dark:ring-1 dark:ring-white/10\">\n <div className=\"not-prose\">\n <div className=\"clarify-api-example-header flex min-h-[calc(--spacing(12)+1px)] flex-wrap items-center gap-x-4 border-b border-zinc-700 bg-zinc-800 px-4 dark:border-zinc-800 dark:bg-transparent\">\n <h3 className=\"shrink-0 py-3 text-xs font-semibold text-white\">{title}</h3>\n {examples && examples.length > 1 && selectedExampleKey && onSelectExample ? (\n <ExamplePicker examples={examples} selectedKey={selectedExampleKey} onSelect={onSelectExample} />\n ) : null}\n </div>\n {tag || label ? (\n <div className=\"flex h-9 items-center gap-2 border-y border-t-transparent border-b-white/7.5 bg-zinc-900 px-4 dark:border-b-white/5 dark:bg-white/1\">\n {tag ? <span className=\"font-mono text-[0.625rem]/6 font-semibold text-emerald-400\">{tag}</span> : null}\n {tag && label ? <span className=\"h-0.5 w-0.5 rounded-full bg-zinc-500\" /> : null}\n {label ? <span className=\"font-mono text-xs text-zinc-400\">{label}</span> : null}\n </div>\n ) : null}\n <div className=\"clarify-api-example-code group relative\">\n <pre className=\"overflow-x-auto p-4 text-xs text-white\">\n <code className={`language-${language}`}>{code}</code>\n </pre>\n <CopyCodeButton code={code} />\n </div>\n </div>\n </div>\n )\n}\n\nfunction RequestExamplesPanel(arg0: {\n spec: OpenAPISpec\n path: string\n method: string\n parameters: OpenApiParameter[]\n requestContents: MediaTypeEntry[]\n}): ReactNode { const {\n spec,\n path,\n method,\n parameters,\n requestContents,\n} = arg0\n\n const [selectedMediaType, setSelectedMediaType] = useState(requestContents[0]?.mediaType ?? '')\n const selectedContent = requestContents.find((content) => content.mediaType === selectedMediaType) ?? requestContents[0]\n const examples = getExampleEntries(selectedContent?.value)\n const [selectedExampleKey, setSelectedExampleKey] = useState(examples[0]?.key ?? '')\n const selectedExample = examples.find((example) => example.key === selectedExampleKey) ?? examples[0]\n const requestContent = selectedContent ? { ...selectedContent, value: { ...selectedContent.value, example: selectedExample?.value, examples: undefined } } : undefined\n const curl = buildCurlExample({ spec, path, method, parameters, requestContent })\n\n return (\n <div>\n <div className=\"mb-3 flex flex-wrap gap-3\">\n <SelectControl\n label=\"Media type\"\n value={selectedContent?.mediaType ?? ''}\n options={requestContents.map((content) => content.mediaType)}\n onChange={(value) => {\n setSelectedMediaType(value)\n setSelectedExampleKey(getExampleEntries(requestContents.find((content) => content.mediaType === value)?.value)[0]?.key ?? '')\n }}\n />\n </div>\n <ApiExampleCodeGroup\n title=\"Request\"\n tag={method}\n label={path}\n code={curl}\n language=\"bash\"\n examples={examples}\n selectedExampleKey={selectedExample?.key}\n onSelectExample={setSelectedExampleKey}\n />\n </div>\n )\n}\n\nfunction ResponseExamplesPanel(arg0: { operation: OpenAPIOperation }): ReactNode { const { operation } = arg0\n\n const responses = getResponseEntries(operation).filter(({ response }) => getMediaTypeEntries(response.content).length > 0)\n const [selectedStatus, setSelectedStatus] = useState(responses.find(({ status }) => status.startsWith('2'))?.status ?? responses[0]?.status ?? '')\n const selectedResponse = responses.find(({ status }) => status === selectedStatus) ?? responses[0]\n const responseContents = getMediaTypeEntries(selectedResponse?.response.content)\n const [selectedMediaType, setSelectedMediaType] = useState(responseContents[0]?.mediaType ?? '')\n const selectedContent = responseContents.find((content) => content.mediaType === selectedMediaType) ?? responseContents[0]\n const examples = getExampleEntries(selectedContent?.value)\n const [selectedExampleKey, setSelectedExampleKey] = useState(examples[0]?.key ?? '')\n const selectedExample = examples.find((example) => example.key === selectedExampleKey) ?? examples[0]\n const responseCode = stringifyExample(selectedExample?.value)\n\n if (!selectedResponse || !selectedContent || !responseCode) return null\n\n return (\n <div>\n <div className=\"mb-3 flex flex-wrap gap-3\">\n <SelectControl\n label=\"Status\"\n value={selectedResponse.status}\n options={responses.map(({ status }) => status)}\n onChange={(value) => {\n const nextResponse = responses.find(({ status }) => status === value)\n const nextContents = getMediaTypeEntries(nextResponse?.response.content)\n setSelectedStatus(value)\n setSelectedMediaType(nextContents[0]?.mediaType ?? '')\n setSelectedExampleKey(getExampleEntries(nextContents[0]?.value)[0]?.key ?? '')\n }}\n />\n <SelectControl\n label=\"Media type\"\n value={selectedContent.mediaType}\n options={responseContents.map((content) => content.mediaType)}\n onChange={(value) => {\n setSelectedMediaType(value)\n setSelectedExampleKey(getExampleEntries(responseContents.find((content) => content.mediaType === value)?.value)[0]?.key ?? '')\n }}\n />\n </div>\n <ApiExampleCodeGroup\n title=\"Response\"\n tag={selectedResponse.status}\n label={selectedContent.mediaType}\n code={responseCode}\n language={codeLanguageForMediaType(selectedContent.mediaType)}\n examples={examples}\n selectedExampleKey={selectedExample?.key}\n onSelectExample={setSelectedExampleKey}\n />\n </div>\n )\n}\n\nfunction EndpointExamples(arg0: {\n spec: OpenAPISpec\n path: string\n method: string\n operation: OpenAPIOperation\n parameters: OpenApiParameter[]\n requestContents: MediaTypeEntry[]\n}): ReactNode { const {\n spec,\n path,\n method,\n operation,\n parameters,\n requestContents,\n} = arg0\n\n return (\n <div className=\"space-y-6\">\n <RequestExamplesPanel spec={spec} path={path} method={method} parameters={parameters} requestContents={requestContents} />\n <ResponseExamplesPanel operation={operation} />\n </div>\n )\n}\n\nfunction OpenApiHeader(arg0: { spec: OpenAPISpec }): ReactNode { const { spec } = arg0\n\n return (\n <header className=\"mb-16\">\n <p className=\"mb-3 font-mono text-xs/6 font-medium tracking-widest text-emerald-500 uppercase dark:text-emerald-400\">\n OpenAPI Reference\n </p>\n <h1>{spec.info?.title ?? 'API Documentation'}</h1>\n {spec.info?.description ? <p className=\"lead\">{spec.info.description}</p> : null}\n {spec.info?.version ? <p className=\"text-sm text-zinc-500 dark:text-zinc-400\">Version {spec.info.version}</p> : null}\n </header>\n )\n}\n\nfunction OpenApiOperation(arg0: { spec: OpenAPISpec; path: string; method: string; operation: OpenAPIOperation }): ReactNode { const { spec, path, method, operation } = arg0\n\n const id = slug(`${method.toLowerCase()} ${path}`)\n const summary = operation.summary ?? `${method} ${path}`\n const description = operation.description\n const parameters = getOperationParameters(spec, path, operation)\n const requestBody = getRequestBody(operation)\n const requestContents = getMediaTypeEntries(requestBody?.content)\n const requestSchema = requestContents[0]?.value.schema\n const groupedParameters = {\n path: parameters.filter((parameter) => parameter.in === 'path'),\n query: parameters.filter((parameter) => parameter.in === 'query'),\n header: parameters.filter((parameter) => parameter.in === 'header'),\n }\n\n return (\n <section className=\"clarify-api-endpoint scroll-mt-24\" aria-labelledby={id}>\n <Heading id={id} tag={method} label={path}>\n {summary}\n </Heading>\n <Row>\n <Col>\n {description ? <p>{description}</p> : null}\n <ParameterList title=\"Path parameters\" parameters={groupedParameters.path} />\n <ParameterList title=\"Query parameters\" parameters={groupedParameters.query} />\n <ParameterList title=\"Headers\" parameters={groupedParameters.header} />\n {requestBody && requestContents.length > 0 ? (\n <>\n <h3>Request body</h3>\n {typeof requestBody.description === 'string' ? <p>{requestBody.description}</p> : null}\n <SchemaProperties title=\"Body properties\" schema={requestSchema} />\n </>\n ) : null}\n <ResponseList operation={operation} />\n </Col>\n <Col sticky>\n <EndpointExamples\n spec={spec}\n path={path}\n method={method}\n operation={operation}\n parameters={parameters}\n requestContents={requestContents}\n />\n </Col>\n </Row>\n </section>\n )\n}\n\nfunction OpenApiPaths(arg0: { spec: OpenAPISpec }): ReactNode { const { spec } = arg0\n\n const entries = listOpenApiOperations(spec).map(({ path, method, operation }) => ({\n path,\n method: method.toUpperCase(),\n operation,\n }))\n\n return (\n <div className=\"clarify-api-endpoints space-y-16\">\n {entries.map(({ path, method, operation }) => (\n <OpenApiOperation key={`${method}-${path}`} spec={spec} path={path} method={method} operation={operation} />\n ))}\n </div>\n )\n}\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\nfunction 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\nfunction WarningBox(arg0: { children: ReactNode; tone?: 'amber' | 'red' }): ReactNode { 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={clsx('clarify-warning', classes)}>{children}</div>\n}\n\nexport function OpenApiPage(arg0: OpenApiPageProps): ReactNode {\n const { spec, specPath } = arg0\n const resolved = useOpenApiSpec(spec, specPath)\n\n if (!resolved) {\n return <WarningBox>OpenAPI spec not found: {specPath ?? '(未提供 spec 或 specPath)'}</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} />\n </Prose>\n <PageFooter />\n </article>\n )\n}\n\nexport function ApiEndpoint(arg0: ApiEndpointProps): ReactNode {\n const { spec, path, method } = arg0\n const op = getOpenApiOperation(spec, path, method)\n\n if (!op) {\n return <WarningBox tone=\"red\">Endpoint not found: {method.toUpperCase()} {path}</WarningBox>\n }\n\n return <OpenApiOperation spec={spec} path={path} method={method.toUpperCase()} operation={op} />\n}\n\nexport function OpenApiEndpoint(arg0: OpenApiEndpointProps): ReactNode {\n const { specPath, path, method } = arg0\n const spec = useOpenApiSpec(undefined, specPath)\n\n if (!spec) {\n return <WarningBox>OpenAPI spec not found: {specPath}</WarningBox>\n }\n\n return <ApiEndpoint spec={spec} path={path} method={method} />\n}\n","import { ApiEndpointCard, DocShell } from '../components'\nimport { OpenApiPage, ApiEndpoint, OpenApiEndpoint } from '../openapi'\n\nimport * as mdxPrimitives from './primitives'\n\nexport function useMDXComponents(components: Record<string, unknown> = {}) {\n return {\n ...components,\n ...mdxPrimitives,\n OpenApiPage,\n ApiEndpoint,\n OpenApiEndpoint,\n ApiEndpointCard,\n DocShell,\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,SAAgB,QAAQ,MAA+B;CAAG,MAAM,EAAE,aAAa;CAE7E,OACE,qBAAC,WAAD;EAAS,WAAU;YAAnB,CACE,oBAAC,OAAD;GAAO,WAAU;GAAa;EAAgB,CAAA,GAC9C,oBAAC,YAAD,CAAa,CAAA,CACN;;AAEb;AAEA,SAAgB,EAAE,MAAqC;CAAG,MAAM,EAAE,OAAO,IAAI,GAAG,UAAU;CAExF,IAAI,KAAK,WAAW,GAAG,KAAK,CAAC,KAAK,WAAW,IAAI,GAC/C,OAAO,oBAAC,MAAD;EAAM,IAAI;EAAM,GAAI;CAAQ,CAAA;CAGrC,OAAO,oBAAC,KAAD;EAAS;EAAM,GAAI;CAAQ,CAAA;AACpC;AAEA,IAAa,OAAO;AACpB,IAAa,MAAM;AAGnB,SAAgB,GAAG,OAAgE;CACjF,OAAO,cAAc,SAAS;EAAE,OAAO;EAAG,GAAG;CAAM,CAAC;AACtD;AAEA,SAAgB,GAAG,OAAgE;CACjF,OAAO,cAAc,SAAS;EAAE,OAAO;EAAG,GAAG;CAAM,CAAC;AACtD;AAEA,SAAS,SAAS,OAAwC;CACxD,OACE,qBAAC,OAAD;EAAK,SAAQ;EAAY,eAAY;EAAO,GAAI;YAAhD;GACE,oBAAC,UAAD;IAAQ,IAAG;IAAI,IAAG;IAAI,GAAE;IAAI,aAAY;GAAK,CAAA;GAC7C,oBAAC,QAAD;IAAM,MAAK;IAAO,eAAc;IAAQ,gBAAe;IAAQ,aAAY;IAAM,GAAE;GAAsB,CAAA;GACzG,oBAAC,UAAD;IAAQ,IAAG;IAAI,IAAG;IAAI,GAAE;IAAK,MAAK;GAAQ,CAAA;EACvC;;AAET;AAEA,SAAgB,KAAK,MAA+B;CAAG,MAAM,EAAE,aAAa;CAE1E,OACE,qBAAC,OAAD;EAAK,WAAU;YAAf,CACE,oBAAC,UAAD,EAAU,WAAU,wGAAyG,CAAA,GAC7H,oBAAC,OAAD;GAAK,WAAU;GAA4B;EAAc,CAAA,CACtD;;AAET;AAEA,SAAgB,IAAI,MAA+B;CAAG,MAAM,EAAE,aAAa;CAEzE,OAAO,oBAAC,OAAD;EAAK,WAAU;EAA2F;CAAc,CAAA;AACjI;AAEA,SAAgB,IAAI,MAAiD;CAAG,MAAM,EAAE,UAAU,SAAS,UAAU;CAE3G,OAAO,oBAAC,OAAD;EAAK,WAAW,KAAK,wCAAwC,UAAU,qBAAqB;EAAI;CAAc,CAAA;AACvH;AAEA,SAAgB,WAAW,MAA+B;CAAG,MAAM,EAAE,aAAa;CAEhF,OACE,oBAAC,OAAD;EAAK,WAAU;YACb,oBAAC,MAAD;GACE,MAAK;GACL,WAAU;GAET;EACC,CAAA;CACD,CAAA;AAET;AAEA,SAAgB,SAAS,MAA4D;CAAG,MAAM,EAAE,MAAM,UAAU,SAAS;CAEvH,OACE,oBAAC,MAAD;EAAI,WAAU;YACZ,qBAAC,MAAD;GAAI,WAAU;aAAd;IACE,oBAAC,MAAD;KAAI,WAAU;eAAU;IAAQ,CAAA;IAChC,oBAAC,MAAD,EAAA,UACE,oBAAC,QAAD,EAAA,UAAO,KAAW,CAAA,EAChB,CAAA;IACH,OACC,qBAAA,YAAA,EAAA,UAAA,CACE,oBAAC,MAAD;KAAI,WAAU;eAAU;IAAQ,CAAA,GAChC,oBAAC,MAAD;KAAI,WAAU;eAAsD;IAAS,CAAA,CAC7E,EAAA,CAAA,IACA;IACJ,oBAAC,MAAD;KAAI,WAAU;eAAU;IAAe,CAAA;IACvC,oBAAC,MAAD;KAAI,WAAU;KAA6C;IAAa,CAAA;GACtE;;CACF,CAAA;AAER;;;ACjGA,IAAa,uBAAuB;CAAC;CAAO;CAAO;CAAQ;CAAU;CAAW;CAAQ;CAAS;AAAO;AAIxG,SAAgB,oBAAoB,QAA6C;CAC/E,OAAQ,qBAA2C,SAAS,OAAO,YAAY,CAAC;AAClF;AAEA,SAAgB,oBAAoB,MAAmB,MAAc,QAA8C;CACjH,IAAI,CAAC,oBAAoB,MAAM,GAAG,OAAO,KAAA;CACzC,OAAO,KAAK,QAAQ,QAAQ,OAAO,YAAY;AACjD;AAEA,SAAgB,sBAAsB,MAAoG;CACxI,MAAM,QAAQ,KAAK,SAAS,CAAC;CAC7B,MAAM,aAA8F,CAAC;CAErG,KAAK,MAAM,CAAC,MAAM,aAAa,OAAO,QAAQ,KAAK,GAAG;EACpD,IAAI,CAAC,UAAU;EACf,KAAK,MAAM,UAAU,sBAAsB;GACzC,MAAM,YAAY,SAAS;GAC3B,IAAI,WAAW,WAAW,KAAK;IAAE;IAAM;IAAQ;GAAU,CAAC;EAC5D;CACF;CAEA,OAAO;AACT;;;ACoCA,IAAM,iBAAiB;AAEvB,SAAS,SAAS,OAAwC;CACxD,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,YAAY,OAA2C;CAC9D,OAAO,SAAS,KAAK,KAAK,OAAO,MAAM,SAAS;AAClD;AAEA,SAAS,qBAAqB,KAAqB;CACjD,OAAO,IAAI,MAAM,GAAG,EAAE,OAAO,OAAO,EAAE,GAAG,EAAE,KAAK;AAClD;AAEA,SAAS,YAAY,MAAmB,MAAyC;CAC/E,MAAM,WAAW,KAAK,QAAQ;CAC9B,OAAO,SAAS,QAAQ,IAAI,WAAW,KAAA;AACzC;AAEA,SAAS,uBAAuB,MAAmB,MAAc,WAAiD;CAChH,MAAM,iBAAiB,YAAY,MAAM,IAAI,GAAG;CAChD,MAAM,sBAAuB,UAA4B;CAEzD,OAAO,CAAC,GAAI,MAAM,QAAQ,cAAc,IAAI,iBAAiB,CAAC,GAAI,GAAI,MAAM,QAAQ,mBAAmB,IAAI,sBAAsB,CAAC,CAAE,EACjI,QAAQ,cAA6C,SAAS,SAAS,KAAK,CAAC,YAAY,SAAS,CAAC;AACxG;AAEA,SAAS,eAAe,WAAwD;CAC9E,MAAM,cAAe,UAA4B;CACjD,OAAO,SAAS,WAAW,KAAK,CAAC,YAAY,WAAW,IAAI,cAAc,KAAA;AAC5E;AAEA,SAAS,oBAAoB,SAAoC;CAC/D,IAAI,CAAC,SAAS,OAAO,GAAG,OAAO,CAAC;CAEhC,OAAO,OAAO,QAAQ,OAAO,EAC1B,QAAQ,GAAG,WAAW,SAAS,KAAK,KAAK,CAAC,YAAY,KAAK,CAAC,EAC5D,KAAK,CAAC,WAAW,YAAY;EAAE;EAAkB;CAA0B,EAAE,EAC7E,MAAM,GAAG,MAAM;EAGd,QAFc,EAAE,UAAU,SAAS,MAAM,IAAI,IAAI,MACnC,EAAE,UAAU,SAAS,MAAM,IAAI,IAAI;CAEnD,CAAC;AACL;AAEA,SAAS,mBAAmB,SAA8C;CACxE,OAAO,oBAAoB,OAAO,EAAE;AACtC;AAEA,SAAS,gBAAgB,SAA2B;CAClD,IAAI,SAAS,OAAO,KAAK,WAAW,SAAS,OAAO,QAAQ;CAC5D,IAAI,SAAS,OAAO,KAAK,mBAAmB,SAAS,OAAO,KAAA;CAC5D,OAAO;AACT;AAEA,SAAS,gBAAgB,KAAa,SAAuD;CAC3F,IAAI,SAAS,OAAO,GAAG;EACrB,MAAM,UAAU,OAAO,QAAQ,YAAY,WAAW,QAAQ,UAAU,KAAA;EACxE,OAAO;GAAE,OAAO,WAAW;GAAK;EAAQ;CAC1C;CAEA,OAAO,EAAE,OAAO,IAAI;AACtB;AAEA,SAAS,kBAAkB,WAA8C;CACvE,IAAI,CAAC,WAAW,OAAO,CAAC;CAExB,IAAI,SAAS,UAAU,QAAQ,GAAG;EAChC,MAAM,WAA2B,CAAC;EAElC,KAAK,MAAM,CAAC,KAAK,YAAY,OAAO,QAAQ,UAAU,QAAQ,GAAG;GAC/D,MAAM,QAAQ,gBAAgB,OAAO;GACrC,IAAI,OAAO,UAAU,aAAa;GAElC,MAAM,EAAE,OAAO,YAAY,gBAAgB,KAAK,OAAO;GACvD,SAAS,KAAK;IAAE;IAAK;IAAO;IAAS;GAAM,CAAC;EAC9C;EAEA,IAAI,SAAS,SAAS,GAAG,OAAO;CAClC;CAEA,IAAI,OAAO,UAAU,YAAY,aAC/B,OAAO,CAAC;EAAE,KAAK;EAAW,OAAO;EAAW,OAAO,UAAU;CAAQ,CAAC;CAGxE,MAAM,YAAY,gBAAgB,UAAU,MAAM;CAClD,OAAO,OAAO,cAAc,cAAc,CAAC,IAAI,CAAC;EAAE,KAAK;EAAU,OAAO;EAAkB,OAAO;EAAW,WAAW;CAAK,CAAC;AAC/H;AAEA,SAAS,kBAAkB,WAAuC;CAChE,OAAO,kBAAkB,SAAS,EAAE,IAAI;AAC1C;AAEA,SAAS,aAAa,QAAqC;CACzD,IAAI,CAAC,SAAS,MAAM,GAAG,OAAO,KAAA;CAC9B,IAAI,YAAY,MAAM,GAAG,OAAO,qBAAqB,OAAO,IAAI;CAChE,IAAI,MAAM,QAAQ,OAAO,IAAI,GAAG,OAAO,OAAO,KAAK,IAAI,MAAM,EAAE,KAAK,KAAK;CAEzE,MAAM,QAAQ,OAAO,SAAS,OAAO;CACrC,IAAI,MAAM,QAAQ,KAAK,GACrB,OAAO,MAAM,IAAI,YAAY,EAAE,OAAO,OAAO,EAAE,KAAK,KAAK;CAG3D,IAAI,OAAO,SAAS,SAClB,OAAO,GAAG,aAAa,OAAO,KAAK,KAAK,UAAU;CAGpD,OAAO,OAAO,OAAO,SAAS,WAAW,OAAO,OAAO,KAAA;AACzD;AAEA,SAAS,gBAAgB,QAAiB,QAAQ,GAAY;CAC5D,IAAI,CAAC,SAAS,MAAM,KAAK,QAAQ,GAAG,OAAO,KAAA;CAC3C,IAAI,OAAO,OAAO,YAAY,aAAa,OAAO,OAAO;CACzD,IAAI,OAAO,OAAO,YAAY,aAAa,OAAO,OAAO;CACzD,IAAI,MAAM,QAAQ,OAAO,IAAI,GAAG,OAAO,OAAO,KAAK;CACnD,IAAI,YAAY,MAAM,GAAG,OAAO,EAAE,IAAI,qBAAqB,OAAO,IAAI,EAAE;CAExE,IAAI,OAAO,SAAS,SAClB,OAAO,CAAC,gBAAgB,OAAO,OAAO,QAAQ,CAAC,KAAK,QAAQ;CAG9D,IAAI,OAAO,SAAS,YAAY,SAAS,OAAO,UAAU,GAAG;EAC3D,MAAM,aAAa,SAAS,OAAO,UAAU,IAAI,OAAO,aAAa,CAAC;EACtE,OAAO,OAAO,YACZ,OAAO,QAAQ,UAAU,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,oBAAoB,CACrE,MACA,gBAAgB,gBAAgB,QAAQ,CAAC,KAAK,eAAe,aAAa,cAAc,CAAC,CAC3F,CAAC,CACH;CACF;CAEA,OAAO,eAAe,aAAa,MAAM,CAAC;AAC5C;AAEA,SAAS,eAAe,MAAwB;CAC9C,IAAI,CAAC,MAAM,OAAO;CAClB,IAAI,KAAK,SAAS,IAAI,GAAG,OAAO,CAAC;CACjC,IAAI,KAAK,SAAS,SAAS,KAAK,KAAK,SAAS,QAAQ,GAAG,OAAO;CAChE,IAAI,KAAK,SAAS,SAAS,GAAG,OAAO;CACrC,IAAI,KAAK,SAAS,QAAQ,GAAG,OAAO,CAAC;CACrC,OAAO;AACT;AAEA,SAAS,iBAAiB,OAAwB;CAChD,IAAI,OAAO,UAAU,aAAa,OAAO;CACzC,IAAI,OAAO,UAAU,UAAU,OAAO;CACtC,OAAO,KAAK,UAAU,OAAO,MAAM,CAAC;AACtC;AAEA,SAAS,WAAW,OAAuB;CACzC,OAAO,IAAI,MAAM,QAAQ,MAAM,OAAO,EAAE;AAC1C;AAEA,SAAS,aAAa,MAA2B;CAC/C,MAAM,UAAW,KAAuB;CACxC,IAAI,CAAC,MAAM,QAAQ,OAAO,GAAG,OAAO;CAEpC,MAAM,cAAc,QAAQ,KAAK,QAAQ;CACzC,OAAO,OAAO,aAAa,QAAQ,WAAW,YAAY,MAAM;AAClE;AAEA,SAAS,kBAAkB,MAAmB,MAAc,YAAwC;CAClG,MAAM,QAAQ,WACX,QAAQ,cAAc,UAAU,OAAO,WAAW,UAAU,IAAI,EAChE,KAAK,cAAc,GAAG,UAAU,KAAK,IAAI,UAAU,KAAK,EAAE,EAC1D,KAAK,GAAG;CAEX,OAAO,GADW,aAAa,IAAI,EAAE,QAAQ,OAAO,EAC1C,IAAY,OAAO,QAAQ,IAAI,UAAU;AACrD;AAEA,SAAS,iBAAiB,MAMf;CAAG,MAAM,EAClB,MACA,MACA,QACA,YACA,mBACE;CAEF,MAAM,MAAM,kBAAkB,MAAM,MAAM,UAAU;CACpD,MAAM,QAAQ,CAAC,QAAQ,WAAW,QAAQ,QAAQ,KAAK,WAAW,GAAG,GAAG;CAExE,IAAI,WAAW,OAAO,MAAM,KAAK,QAAQ,QAAQ;CACjD,MAAM,KAAK,sCAAsC;CACjD,MAAM,KAAK,iCAAiC;CAE5C,MAAM,iBAAiB,kBAAkB,gBAAgB,KAAK;CAC9D,IAAI,kBAAkB,OAAO,mBAAmB,aAAa;EAC3D,MAAM,KAAK,uBAAuB,eAAe,UAAU,EAAE;EAC7D,MAAM,KAAK,QAAQ,WAAW,iBAAiB,cAAc,CAAC,GAAG;CACnE;CAEA,OAAO,MAAM,KAAK,OAAO;AAC3B;AAEA,SAAS,mBAAmB,WAAmF;CAC7G,MAAM,YAAa,UAA4B;CAC/C,IAAI,CAAC,SAAS,SAAS,GAAG,OAAO,CAAC;CAElC,OAAO,OAAO,QAAQ,SAAS,EAC5B,QAAQ,GAAG,cAAc,SAAS,QAAQ,KAAK,CAAC,YAAY,QAAQ,CAAC,EACrE,KAAK,CAAC,QAAQ,eAAe;EAAE;EAAkB;CAA4B,EAAE;AACpF;AAEA,SAAS,iBAAiB,MAAqD;CAAG,MAAM,EAAE,OAAO,WAAW;CAE1G,MAAM,eAAe,YAAY,MAAM,IAAI,KAAA,IAAY;CACvD,MAAM,aAAa,SAAS,YAAY,KAAK,SAAS,aAAa,UAAU,IAAI,aAAa,aAAa,KAAA;CAC3G,MAAM,WAAW,SAAS,YAAY,KAAK,MAAM,QAAQ,aAAa,QAAQ,IAAI,aAAa,SAAS,IAAI,MAAM,IAAI,CAAC;CAEvH,IAAI,CAAC,cAAc,OAAO,KAAK,UAAU,EAAE,WAAW,GAAG,OAAO;CAEhE,OACE,qBAAC,OAAD,EAAA,UAAA,CACE,oBAAC,MAAD,EAAA,UAAK,MAAU,CAAA,GACf,oBAAC,YAAD,EAAA,UACG,OAAO,QAAQ,UAAU,EAAE,KAAK,CAAC,MAAM,oBAAoB;EAC1D,MAAM,WAAW,SAAS,cAAc,IAAI,iBAAiB,CAAC;EAC9D,MAAM,OAAO,aAAa,cAAc;EACxC,MAAM,cAAc,OAAO,SAAS,gBAAgB,WAAW,SAAS,cAAc,KAAA;EACtF,MAAM,aAAa,SAAS,SAAS,IAAI;EAEzC,OACE,oBAAC,UAAD;GAA2B;GAAM,MAAM,cAAc,OAAO,GAAG,KAAK,cAAc;aAC/E,gBAAgB,aAAa,cAAc;EACpC,GAFK,IAEL;CAEd,CAAC,EACS,CAAA,CACT,EAAA,CAAA;AAET;AAEA,SAAS,cAAc,MAAoE;CAAG,MAAM,EAAE,OAAO,eAAe;CAE1H,IAAI,WAAW,WAAW,GAAG,OAAO;CAEpC,OACE,qBAAC,OAAD,EAAA,UAAA,CACE,oBAAC,MAAD,EAAA,UAAK,MAAU,CAAA,GACf,oBAAC,YAAD,EAAA,UACG,WAAW,KAAK,cACf,oBAAC,UAAD;EAEE,MAAM,UAAU,QAAQ;EACxB,MAAM,CAAC,aAAa,UAAU,MAAM,GAAG,UAAU,WAAW,aAAa,KAAA,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI,KAAK,KAAA;YAEjH,UAAU,eAAe,GAAG,UAAU,MAAM,YAAY;CACjD,GALH,GAAG,UAAU,GAAG,GAAG,UAAU,MAK1B,CACX,EACS,CAAA,CACT,EAAA,CAAA;AAET;AAEA,SAAS,aAAa,MAAkD;CAAG,MAAM,EAAE,cAAc;CAE/F,MAAM,YAAY,mBAAmB,SAAS;CAC9C,IAAI,UAAU,WAAW,GAAG,OAAO;CAEnC,OACE,qBAAC,OAAD,EAAA,UAAA,CACE,oBAAC,MAAD,EAAA,UAAI,YAAa,CAAA,GACjB,oBAAC,YAAD,EAAA,UACG,UAAU,KAAK,EAAE,QAAQ,eAAe;EAIvC,OACE,oBAAC,UAAD;GAAuB,MAAM;GAAc,MAHhC,aADG,mBAAmB,SAAS,OAClB,GAAS,MAAM,MAGI;aACxC,SAAS,eAAe;EACjB,GAFK,MAEL;CAEd,CAAC,EACS,CAAA,CACT,EAAA,CAAA;AAET;AAEA,SAAS,yBAAyB,WAA4B;CAC5D,IAAI,CAAC,WAAW,OAAO;CACvB,IAAI,UAAU,SAAS,MAAM,GAAG,OAAO;CACvC,IAAI,UAAU,SAAS,MAAM,KAAK,UAAU,SAAS,KAAK,GAAG,OAAO;CACpE,IAAI,UAAU,WAAW,OAAO,GAAG,OAAO;CAC1C,IAAI,UAAU,SAAS,KAAK,GAAG,OAAO;CACtC,OAAO;AACT;AAEA,SAAS,cAAc,MAKT;CAAG,MAAM,EACrB,OACA,OACA,SACA,aACE;CAEF,IAAI,QAAQ,UAAU,GAAG,OAAO;CAEhC,OACE,oBAAC,SAAD;EAAgB;EAAiB;YAC/B,qBAAC,OAAD;GAAK,WAAU;aAAf,CACE,qBAAC,eAAD;IAAe,WAAU;cAAzB,CACE,qBAAC,QAAD;KAAM,WAAU;eAAhB,CACE,oBAAC,QAAD;MAAM,WAAU;gBAAqF;KAAY,CAAA,GACjH,oBAAC,QAAD;MAAM,WAAU;gBAAY;KAAY,CAAA,CACpC;QACN,oBAAC,oBAAD;KAAoB,WAAU;KAAqC,eAAY;IAAQ,CAAA,CAC1E;OACf,oBAAC,gBAAD;IACE,QAAO;IACP,WAAU;cAET,QAAQ,KAAK,WACZ,qBAAC,eAAD;KAEE,OAAO;KACP,WAAU;eAHZ,CAKE,oBAAC,QAAD;MAAM,WAAU;gBAAY;KAAa,CAAA,GACzC,oBAAC,WAAD;MAAW,WAAU;MAAiE,eAAY;KAAQ,CAAA,CAC7F;OANR,MAMQ,CAChB;GACa,CAAA,CACb;;CACE,CAAA;AAEb;AAEA,SAAS,cAAc,MAIT;CAAG,MAAM,EACrB,UACA,aACA,aACE;CAEF,MAAM,cAAc,OAA8B,IAAI;CAEtD,IAAI,SAAS,UAAU,GAAG,OAAO;CAEjC,SAAS,SAAS,WAAmB;EACnC,MAAM,KAAK,YAAY;EACvB,IAAI,CAAC,IAAI;EACT,GAAG,SAAS;GAAE,MAAM,YAAY,KAAK,IAAI,KAAK,GAAG,cAAc,EAAG;GAAG,UAAU;EAAS,CAAC;CAC3F;CAEA,OACE,qBAAC,OAAD;EAAK,WAAU;YAAf;GACE,oBAAC,UAAD;IACE,MAAK;IACL,cAAW;IACX,eAAe,SAAS,EAAE;IAC1B,WAAU;cAEV,oBAAC,OAAD;KAAK,SAAQ;KAAY,MAAK;KAAe,WAAU;eACrD,oBAAC,QAAD;MAAM,UAAS;MAAU,GAAE;MAAkI,UAAS;KAAW,CAAA;IAC9K,CAAA;GACC,CAAA;GACR,oBAAC,OAAD;IACE,KAAK;IACL,WAAU;cAET,SAAS,KAAK,YACb,oBAAC,UAAD;KAEE,MAAK;KACL,eAAe,SAAS,QAAQ,GAAG;KACnC,OAAO,QAAQ;KACf,WAAW,CACT,kEACA,QAAQ,QAAQ,cACZ,2BACA,oDACN,EAAE,KAAK,GAAG;eAET,QAAQ;IACH,GAZD,QAAQ,GAYP,CACT;GACE,CAAA;GACL,oBAAC,UAAD;IACE,MAAK;IACL,cAAW;IACX,eAAe,SAAS,CAAC;IACzB,WAAU;cAEV,oBAAC,OAAD;KAAK,SAAQ;KAAY,MAAK;KAAe,WAAU;eACrD,oBAAC,QAAD;MAAM,UAAS;MAAU,GAAE;MAAmI,UAAS;KAAW,CAAA;IAC/K,CAAA;GACC,CAAA;EACL;;AAET;AAEA,SAAS,eAAe,MAAmC;CAAG,MAAM,EAAE,SAAS;CAE7E,MAAM,CAAC,QAAQ,aAAa,SAAS,KAAK;CAE1C,OACE,oBAAC,UAAD;EACE,MAAK;EACL,eAAe;GACb,OAAY,UAAU,UAAU,UAAU,IAAI,EAAE,WAAW;IACzD,UAAU,IAAI;IACd,OAAO,iBAAiB,UAAU,KAAK,GAAG,GAAI;GAChD,CAAC;EACH;EACA,WAAU;YAET,SAAS,YAAY;CAChB,CAAA;AAEZ;AAEA,SAAS,oBAAoB,MASf;CAAG,MAAM,EACrB,OACA,KACA,OACA,MACA,UACA,UACA,oBACA,oBACE;CAEF,OACE,oBAAC,OAAD;EAAK,WAAU;YACb,qBAAC,OAAD;GAAK,WAAU;aAAf;IACE,qBAAC,OAAD;KAAK,WAAU;eAAf,CACE,oBAAC,MAAD;MAAI,WAAU;gBAAkD;KAAU,CAAA,GACzE,YAAY,SAAS,SAAS,KAAK,sBAAsB,kBACxD,oBAAC,eAAD;MAAyB;MAAU,aAAa;MAAoB,UAAU;KAAkB,CAAA,IAC9F,IACD;;IACJ,OAAO,QACN,qBAAC,OAAD;KAAK,WAAU;eAAf;MACG,MAAM,oBAAC,QAAD;OAAM,WAAU;iBAA8D;MAAU,CAAA,IAAI;MAClG,OAAO,QAAQ,oBAAC,QAAD,EAAM,WAAU,uCAAwC,CAAA,IAAI;MAC3E,QAAQ,oBAAC,QAAD;OAAM,WAAU;iBAAmC;MAAY,CAAA,IAAI;KACzE;SACH;IACJ,qBAAC,OAAD;KAAK,WAAU;eAAf,CACE,oBAAC,OAAD;MAAK,WAAU;gBACb,oBAAC,QAAD;OAAM,WAAW,YAAY;iBAAa;MAAW,CAAA;KAClD,CAAA,GACL,oBAAC,gBAAD,EAAsB,KAAO,CAAA,CAC1B;;GACF;;CACF,CAAA;AAET;AAEA,SAAS,qBAAqB,MAMhB;CAAG,MAAM,EACrB,MACA,MACA,QACA,YACA,oBACE;CAEF,MAAM,CAAC,mBAAmB,wBAAwB,SAAS,gBAAgB,IAAI,aAAa,EAAE;CAC9F,MAAM,kBAAkB,gBAAgB,MAAM,YAAY,QAAQ,cAAc,iBAAiB,KAAK,gBAAgB;CACtH,MAAM,WAAW,kBAAkB,iBAAiB,KAAK;CACzD,MAAM,CAAC,oBAAoB,yBAAyB,SAAS,SAAS,IAAI,OAAO,EAAE;CACnF,MAAM,kBAAkB,SAAS,MAAM,YAAY,QAAQ,QAAQ,kBAAkB,KAAK,SAAS;CAEnG,MAAM,OAAO,iBAAiB;EAAE;EAAM;EAAM;EAAQ;EAAY,gBADzC,kBAAkB;GAAE,GAAG;GAAiB,OAAO;IAAE,GAAG,gBAAgB;IAAO,SAAS,iBAAiB;IAAO,UAAU,KAAA;GAAU;EAAE,IAAI,KAAA;CAC9E,CAAC;CAEhF,OACE,qBAAC,OAAD,EAAA,UAAA,CACE,oBAAC,OAAD;EAAK,WAAU;YACb,oBAAC,eAAD;GACE,OAAM;GACN,OAAO,iBAAiB,aAAa;GACrC,SAAS,gBAAgB,KAAK,YAAY,QAAQ,SAAS;GAC3D,WAAW,UAAU;IACnB,qBAAqB,KAAK;IAC1B,sBAAsB,kBAAkB,gBAAgB,MAAM,YAAY,QAAQ,cAAc,KAAK,GAAG,KAAK,EAAE,IAAI,OAAO,EAAE;GAC9H;EACD,CAAA;CACE,CAAA,GACL,oBAAC,qBAAD;EACE,OAAM;EACN,KAAK;EACL,OAAO;EACP,MAAM;EACN,UAAS;EACC;EACV,oBAAoB,iBAAiB;EACrC,iBAAiB;CAClB,CAAA,CACE,EAAA,CAAA;AAET;AAEA,SAAS,sBAAsB,MAAkD;CAAG,MAAM,EAAE,cAAc;CAExG,MAAM,YAAY,mBAAmB,SAAS,EAAE,QAAQ,EAAE,eAAe,oBAAoB,SAAS,OAAO,EAAE,SAAS,CAAC;CACzH,MAAM,CAAC,gBAAgB,qBAAqB,SAAS,UAAU,MAAM,EAAE,aAAa,OAAO,WAAW,GAAG,CAAC,GAAG,UAAU,UAAU,IAAI,UAAU,EAAE;CACjJ,MAAM,mBAAmB,UAAU,MAAM,EAAE,aAAa,WAAW,cAAc,KAAK,UAAU;CAChG,MAAM,mBAAmB,oBAAoB,kBAAkB,SAAS,OAAO;CAC/E,MAAM,CAAC,mBAAmB,wBAAwB,SAAS,iBAAiB,IAAI,aAAa,EAAE;CAC/F,MAAM,kBAAkB,iBAAiB,MAAM,YAAY,QAAQ,cAAc,iBAAiB,KAAK,iBAAiB;CACxH,MAAM,WAAW,kBAAkB,iBAAiB,KAAK;CACzD,MAAM,CAAC,oBAAoB,yBAAyB,SAAS,SAAS,IAAI,OAAO,EAAE;CACnF,MAAM,kBAAkB,SAAS,MAAM,YAAY,QAAQ,QAAQ,kBAAkB,KAAK,SAAS;CACnG,MAAM,eAAe,iBAAiB,iBAAiB,KAAK;CAE5D,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,cAAc,OAAO;CAEnE,OACE,qBAAC,OAAD,EAAA,UAAA,CACE,qBAAC,OAAD;EAAK,WAAU;YAAf,CACE,oBAAC,eAAD;GACE,OAAM;GACN,OAAO,iBAAiB;GACxB,SAAS,UAAU,KAAK,EAAE,aAAa,MAAM;GAC7C,WAAW,UAAU;IAEnB,MAAM,eAAe,oBADA,UAAU,MAAM,EAAE,aAAa,WAAW,KACtB,GAAc,SAAS,OAAO;IACvE,kBAAkB,KAAK;IACvB,qBAAqB,aAAa,IAAI,aAAa,EAAE;IACrD,sBAAsB,kBAAkB,aAAa,IAAI,KAAK,EAAE,IAAI,OAAO,EAAE;GAC/E;EACD,CAAA,GACD,oBAAC,eAAD;GACE,OAAM;GACN,OAAO,gBAAgB;GACvB,SAAS,iBAAiB,KAAK,YAAY,QAAQ,SAAS;GAC5D,WAAW,UAAU;IACnB,qBAAqB,KAAK;IAC1B,sBAAsB,kBAAkB,iBAAiB,MAAM,YAAY,QAAQ,cAAc,KAAK,GAAG,KAAK,EAAE,IAAI,OAAO,EAAE;GAC/H;EACD,CAAA,CACE;KACL,oBAAC,qBAAD;EACE,OAAM;EACN,KAAK,iBAAiB;EACtB,OAAO,gBAAgB;EACvB,MAAM;EACN,UAAU,yBAAyB,gBAAgB,SAAS;EAClD;EACV,oBAAoB,iBAAiB;EACrC,iBAAiB;CAClB,CAAA,CACE,EAAA,CAAA;AAET;AAEA,SAAS,iBAAiB,MAOZ;CAAG,MAAM,EACrB,MACA,MACA,QACA,WACA,YACA,oBACE;CAEF,OACE,qBAAC,OAAD;EAAK,WAAU;YAAf,CACE,oBAAC,sBAAD;GAA4B;GAAY;GAAc;GAAoB;GAA6B;EAAkB,CAAA,GACzH,oBAAC,uBAAD,EAAkC,UAAY,CAAA,CAC3C;;AAET;AAEA,SAAS,cAAc,MAAwC;CAAG,MAAM,EAAE,SAAS;CAEjF,OACE,qBAAC,UAAD;EAAQ,WAAU;YAAlB;GACE,oBAAC,KAAD;IAAG,WAAU;cAAwG;GAElH,CAAA;GACH,oBAAC,MAAD,EAAA,UAAK,KAAK,MAAM,SAAS,oBAAwB,CAAA;GAChD,KAAK,MAAM,cAAc,oBAAC,KAAD;IAAG,WAAU;cAAQ,KAAK,KAAK;GAAe,CAAA,IAAI;GAC3E,KAAK,MAAM,UAAU,qBAAC,KAAD;IAAG,WAAU;cAAb,CAAwD,YAAS,KAAK,KAAK,OAAW;QAAI;EAC1G;;AAEZ;AAEA,SAAS,iBAAiB,MAAmG;CAAG,MAAM,EAAE,MAAM,MAAM,QAAQ,cAAc;CAExK,MAAM,KAAK,KAAK,GAAG,OAAO,YAAY,EAAE,GAAG,MAAM;CACjD,MAAM,UAAU,UAAU,WAAW,GAAG,OAAO,GAAG;CAClD,MAAM,cAAc,UAAU;CAC9B,MAAM,aAAa,uBAAuB,MAAM,MAAM,SAAS;CAC/D,MAAM,cAAc,eAAe,SAAS;CAC5C,MAAM,kBAAkB,oBAAoB,aAAa,OAAO;CAChE,MAAM,gBAAgB,gBAAgB,IAAI,MAAM;CAChD,MAAM,oBAAoB;EACxB,MAAM,WAAW,QAAQ,cAAc,UAAU,OAAO,MAAM;EAC9D,OAAO,WAAW,QAAQ,cAAc,UAAU,OAAO,OAAO;EAChE,QAAQ,WAAW,QAAQ,cAAc,UAAU,OAAO,QAAQ;CACpE;CAEA,OACE,qBAAC,WAAD;EAAS,WAAU;EAAoC,mBAAiB;YAAxE,CACE,oBAAC,SAAD;GAAa;GAAI,KAAK;GAAQ,OAAO;aAClC;EACM,CAAA,GACT,qBAAC,KAAD,EAAA,UAAA,CACE,qBAAC,KAAD,EAAA,UAAA;GACG,cAAc,oBAAC,KAAD,EAAA,UAAI,YAAe,CAAA,IAAI;GACtC,oBAAC,eAAD;IAAe,OAAM;IAAkB,YAAY,kBAAkB;GAAO,CAAA;GAC5E,oBAAC,eAAD;IAAe,OAAM;IAAmB,YAAY,kBAAkB;GAAQ,CAAA;GAC9E,oBAAC,eAAD;IAAe,OAAM;IAAU,YAAY,kBAAkB;GAAS,CAAA;GACrE,eAAe,gBAAgB,SAAS,IACvC,qBAAA,YAAA,EAAA,UAAA;IACE,oBAAC,MAAD,EAAA,UAAI,eAAgB,CAAA;IACnB,OAAO,YAAY,gBAAgB,WAAW,oBAAC,KAAD,EAAA,UAAI,YAAY,YAAe,CAAA,IAAI;IAClF,oBAAC,kBAAD;KAAkB,OAAM;KAAkB,QAAQ;IAAgB,CAAA;GAClE,EAAA,CAAA,IACA;GACJ,oBAAC,cAAD,EAAyB,UAAY,CAAA;EAClC,EAAA,CAAA,GACL,oBAAC,KAAD;GAAK,QAAA;aACH,oBAAC,kBAAD;IACQ;IACA;IACE;IACG;IACC;IACK;GAClB,CAAA;EACE,CAAA,CACF,EAAA,CAAA,CACE;;AAEb;AAEA,SAAS,aAAa,MAAwC;CAAG,MAAM,EAAE,SAAS;CAQhF,OACE,oBAAC,OAAD;EAAK,WAAU;YAPD,sBAAsB,IAAI,EAAE,KAAK,EAAE,MAAM,QAAQ,iBAAiB;GAChF;GACA,QAAQ,OAAO,YAAY;GAC3B;EACF,EAIK,EAAQ,KAAK,EAAE,MAAM,QAAQ,gBAC5B,oBAAC,kBAAD;GAAkD;GAAY;GAAc;GAAmB;EAAY,GAApF,GAAG,OAAO,GAAG,MAAuE,CAC5G;CACE,CAAA;AAET;AAEA,SAAS,oBAAoB,SAAiB,IAAoB;CAChE,MAAM,SAAS,UAAU,MAAM,IAAI,MAAM,GAAG,EAAE,OAAO,OAAO;CAC5D,MAAM,QAAkB,CAAC;CACzB,KAAK,MAAM,QAAQ,OACjB,IAAI,SAAS,MACX,MAAM,IAAI;MACL,IAAI,SAAS,KAClB,MAAM,KAAK,IAAI;CAGnB,OAAO,MAAM,KAAK,GAAG;AACvB;AAEA,SAAS,kBAAkB,UAAkB,kBAA2B,cAAc,IAAY;CAChG,IAAI,SAAS,WAAW,cAAc,GAAG,OAAO;CAEhD,MAAM,wBAAwB,YAAY,QAAQ,cAAc,EAAE;CAClE,MAAM,qBAAqB,SAAS,WAAW,GAAG,KAAK,yBAAyB,SAAS,MAAM,CAAC,EAAE,WAAW,GAAG,sBAAsB,EAAE,IACpI,MAAM,SAAS,MAAM,sBAAsB,SAAS,CAAC,IACrD;CAEJ,IAAI,mBAAmB,WAAW,GAAG,GACnC,OAAO,iBAAiB,mBAAmB,QAAQ,OAAO,EAAE;CAE9D,MAAM,UAAU,qBAAqB,MAAM,KAAK,kBAAkB,QAAQ,OAAO,EAAE,EAAE,QAAQ,YAAY,EAAE,KAAK;CAIhH,OAAO,iBAAiB,oBAHE,yBAAyB,QAAQ,WAAW,GAAG,sBAAsB,EAAE,IAC7F,QAAQ,MAAM,sBAAsB,SAAS,CAAC,IAC9C,SAC2D,kBAAkB;AACnF;AAEA,SAAS,eAAe,MAAoB,UAAuC;CACjF,MAAM,QAAQ,YAAY;CAC1B,MAAM,WAAW,YAAY;CAC7B,MAAM,SAAS,iBAAiB;CAEhC,IAAI,MAAM,OAAO;CACjB,IAAI,CAAC,UAAU,OAAO;CAGtB,OAAO,MADY,kBAAkB,UAAU,SAAS,UAAU,OAAO,WAC5D,MAAe;AAC9B;AAEA,SAAS,WAAW,MAAkE;CAAG,MAAM,EAAE,UAAU,OAAO,YAAY;CAM5H,OAAO,oBAAC,OAAD;EAAK,WAAW,KAAK,mBAJZ,SAAS,QACrB,oIACA,6IAEkD;EAAI;CAAc,CAAA;AAC1E;AAEA,SAAgB,YAAY,MAAmC;CAC7D,MAAM,EAAE,MAAM,aAAa;CAC3B,MAAM,WAAW,eAAe,MAAM,QAAQ;CAE9C,IAAI,CAAC,UACH,OAAO,qBAAC,YAAD,EAAA,UAAA,CAAY,4BAAyB,YAAY,uBAAoC,EAAA,CAAA;CAG9F,OACE,qBAAC,WAAD;EAAS,WAAU;YAAnB,CACE,qBAAC,OAAD;GAAO,WAAU;aAAjB,CACE,oBAAC,eAAD,EAAe,MAAM,SAAW,CAAA,GAChC,oBAAC,cAAD,EAAc,MAAM,SAAW,CAAA,CAC1B;MACP,oBAAC,YAAD,CAAa,CAAA,CACN;;AAEb;AAEA,SAAgB,YAAY,MAAmC;CAC7D,MAAM,EAAE,MAAM,MAAM,WAAW;CAC/B,MAAM,KAAK,oBAAoB,MAAM,MAAM,MAAM;CAEjD,IAAI,CAAC,IACH,OAAO,qBAAC,YAAD;EAAY,MAAK;YAAjB;GAAuB;GAAqB,OAAO,YAAY;GAAE;GAAE;EAAiB;;CAG7F,OAAO,oBAAC,kBAAD;EAAwB;EAAY;EAAM,QAAQ,OAAO,YAAY;EAAG,WAAW;CAAK,CAAA;AACjG;AAEA,SAAgB,gBAAgB,MAAuC;CACrE,MAAM,EAAE,UAAU,MAAM,WAAW;CACnC,MAAM,OAAO,eAAe,KAAA,GAAW,QAAQ;CAE/C,IAAI,CAAC,MACH,OAAO,qBAAC,YAAD,EAAA,UAAA,CAAY,4BAAyB,QAAqB,EAAA,CAAA;CAGnE,OAAO,oBAAC,aAAD;EAAmB;EAAY;EAAc;CAAS,CAAA;AAC/D;;;ACh0BA,SAAgB,iBAAiB,aAAsC,CAAC,GAAG;CACzE,OAAO;EACL,GAAG;EACH,GAAG;EACH;EACA;EACA;EACA;EACA;CACF;AACF"}
|
|
@@ -46,5 +46,8 @@ export declare function useMDXComponents(components?: Record<string, unknown>):
|
|
|
46
46
|
code: typeof import('..').Code;
|
|
47
47
|
pre: typeof import('..').Pre;
|
|
48
48
|
Button: typeof mdxPrimitives.Button;
|
|
49
|
+
Callout: typeof mdxPrimitives.Callout;
|
|
50
|
+
Card: typeof mdxPrimitives.Card;
|
|
51
|
+
CardGroup: typeof mdxPrimitives.CardGroup;
|
|
49
52
|
CodeGroup: typeof mdxPrimitives.CodeGroup;
|
|
50
53
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ComponentPropsWithoutRef, ReactNode } from 'react';
|
|
2
|
-
import { Button, Heading } from '../components';
|
|
2
|
+
import { Button, Callout, Card, CardGroup, Heading } from '../components';
|
|
3
3
|
import { Code, CodeGroup, Pre } from '../components/Code';
|
|
4
4
|
export declare function wrapper(arg0: {
|
|
5
5
|
children: ReactNode;
|
|
@@ -7,7 +7,7 @@ export declare function wrapper(arg0: {
|
|
|
7
7
|
export declare function a(arg0: ComponentPropsWithoutRef<'a'>): import("react").JSX.Element;
|
|
8
8
|
export declare const code: typeof Code;
|
|
9
9
|
export declare const pre: typeof Pre;
|
|
10
|
-
export { Button, CodeGroup };
|
|
10
|
+
export { Button, Callout, Card, CardGroup, CodeGroup };
|
|
11
11
|
export declare function h2(props: Omit<ComponentPropsWithoutRef<typeof Heading>, 'level'>): import('react').FunctionComponentElement<Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>, "ref"> & {
|
|
12
12
|
id: string;
|
|
13
13
|
tag?: string;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { m as OpenApisContext, p as ClarifyConfigContext, t as AppShell, u as ThemeProvider } from "./AppShell-
|
|
1
|
+
import { m as OpenApisContext, p as ClarifyConfigContext, t as AppShell, u as ThemeProvider } from "./AppShell-Ci894P_0.js";
|
|
2
2
|
import { StrictMode } from "react";
|
|
3
3
|
import { BrowserRouter } from "react-router-dom";
|
|
4
4
|
import { jsx } from "react/jsx-runtime";
|
|
@@ -52,4 +52,4 @@ function render(options) {
|
|
|
52
52
|
//#endregion
|
|
53
53
|
export { render as t };
|
|
54
54
|
|
|
55
|
-
//# sourceMappingURL=render-
|
|
55
|
+
//# sourceMappingURL=render-bPMMBoDH.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-
|
|
1
|
+
{"version":3,"file":"render-bPMMBoDH.js","names":[],"sources":["../source/runtime/render.tsx"],"sourcesContent":["import { StrictMode } from 'react'\nimport { hydrateRoot, createRoot } from 'react-dom/client'\nimport { BrowserRouter } from 'react-router-dom'\n\nimport { AppShell } from '../app/AppShell'\nimport { ThemeProvider } from '../components/ThemeProvider'\nimport { ClarifyConfigContext, OpenApisContext } from '../context'\nimport type { RenderOptions } from '../types'\n\n/**\n * Clarify 客户端 Hydration 入口。\n * 在文档项目的 main.tsx 中调用:\n * ```ts\n * import { render } from '@clarify-labs/renderer';\n * import { routes } from 'virtual:clarify-routes';\n * import { config } from 'virtual:clarify-config';\n * render({ config, routes });\n * ```\n */\nfunction isHydrationDebugEnabled(): boolean {\n try {\n const params = new URLSearchParams(window.location.search)\n return params.get('clarifyHydrationDebug') === '1' || window.localStorage.getItem('clarify:hydration-debug') === '1'\n } catch {\n return false\n }\n}\n\nexport function render(options: RenderOptions) {\n const { config, routes, navigation, openApis = {}, container } = options\n\n const target = container ?? document.getElementById('root')\n if (!target) {\n throw new Error('[clarify] 渲染失败:找不到挂载节点,请确保 HTML 中存在 id=\"root\" 的元素')\n }\n\n const app = (\n <StrictMode>\n <BrowserRouter basename={config.routePrefix}>\n <ClarifyConfigContext.Provider value={config}>\n <OpenApisContext.Provider value={openApis}>\n <ThemeProvider>\n <AppShell config={config} routes={routes} navigation={navigation ?? []} />\n </ThemeProvider>\n </OpenApisContext.Provider>\n </ClarifyConfigContext.Provider>\n </BrowserRouter>\n </StrictMode>\n )\n\n const hydrationDebug = isHydrationDebugEnabled()\n\n try {\n hydrateRoot(target as Element, app, {\n onRecoverableError(error, errorInfo) {\n // Phase 1: suppress hydration mismatch noise by default. React 19\n // recovers automatically, but diagnostics can be enabled explicitly.\n if (hydrationDebug) {\n console.warn('[clarify] Recoverable hydration error:', error, errorInfo)\n }\n },\n })\n } catch (err) {\n console.warn('[clarify] Hydration failed, falling back to client render:', err)\n createRoot(target as Element).render(app)\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAmBA,SAAS,0BAAmC;CAC1C,IAAI;EAEF,OAAO,IADY,gBAAgB,OAAO,SAAS,MAC5C,EAAO,IAAI,uBAAuB,MAAM,OAAO,OAAO,aAAa,QAAQ,yBAAyB,MAAM;CACnH,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAgB,OAAO,SAAwB;CAC7C,MAAM,EAAE,QAAQ,QAAQ,YAAY,WAAW,CAAC,GAAG,cAAc;CAEjE,MAAM,SAAS,aAAa,SAAS,eAAe,MAAM;CAC1D,IAAI,CAAC,QACH,MAAM,IAAI,MAAM,qDAAmD;CAGrE,MAAM,MACJ,oBAAC,YAAD,EAAA,UACE,oBAAC,eAAD;EAAe,UAAU,OAAO;YAC9B,oBAAC,qBAAqB,UAAtB;GAA+B,OAAO;aACpC,oBAAC,gBAAgB,UAAjB;IAA0B,OAAO;cAC/B,oBAAC,eAAD,EAAA,UACE,oBAAC,UAAD;KAAkB;KAAgB;KAAQ,YAAY,cAAc,CAAC;IAAI,CAAA,EAC5D,CAAA;GACS,CAAA;EACG,CAAA;CAClB,CAAA,EACL,CAAA;CAGd,MAAM,iBAAiB,wBAAwB;CAE/C,IAAI;EACF,YAAY,QAAmB,KAAK,EAClC,mBAAmB,OAAO,WAAW;GAGnC,IAAI,gBACF,QAAQ,KAAK,0CAA0C,OAAO,SAAS;EAE3E,EACF,CAAC;CACH,SAAS,KAAK;EACZ,QAAQ,KAAK,8DAA8D,GAAG;EAC9E,WAAW,MAAiB,EAAE,OAAO,GAAG;CAC1C;AACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_AppShell = require("./AppShell-
|
|
1
|
+
const require_AppShell = require("./AppShell-4KB3lU-n.cjs");
|
|
2
2
|
let react = require("react");
|
|
3
3
|
let react_router_dom = require("react-router-dom");
|
|
4
4
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
@@ -57,4 +57,4 @@ Object.defineProperty(exports, "render", {
|
|
|
57
57
|
}
|
|
58
58
|
});
|
|
59
59
|
|
|
60
|
-
//# sourceMappingURL=render-
|
|
60
|
+
//# sourceMappingURL=render-z9rSQ00n.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-
|
|
1
|
+
{"version":3,"file":"render-z9rSQ00n.cjs","names":[],"sources":["../source/runtime/render.tsx"],"sourcesContent":["import { StrictMode } from 'react'\nimport { hydrateRoot, createRoot } from 'react-dom/client'\nimport { BrowserRouter } from 'react-router-dom'\n\nimport { AppShell } from '../app/AppShell'\nimport { ThemeProvider } from '../components/ThemeProvider'\nimport { ClarifyConfigContext, OpenApisContext } from '../context'\nimport type { RenderOptions } from '../types'\n\n/**\n * Clarify 客户端 Hydration 入口。\n * 在文档项目的 main.tsx 中调用:\n * ```ts\n * import { render } from '@clarify-labs/renderer';\n * import { routes } from 'virtual:clarify-routes';\n * import { config } from 'virtual:clarify-config';\n * render({ config, routes });\n * ```\n */\nfunction isHydrationDebugEnabled(): boolean {\n try {\n const params = new URLSearchParams(window.location.search)\n return params.get('clarifyHydrationDebug') === '1' || window.localStorage.getItem('clarify:hydration-debug') === '1'\n } catch {\n return false\n }\n}\n\nexport function render(options: RenderOptions) {\n const { config, routes, navigation, openApis = {}, container } = options\n\n const target = container ?? document.getElementById('root')\n if (!target) {\n throw new Error('[clarify] 渲染失败:找不到挂载节点,请确保 HTML 中存在 id=\"root\" 的元素')\n }\n\n const app = (\n <StrictMode>\n <BrowserRouter basename={config.routePrefix}>\n <ClarifyConfigContext.Provider value={config}>\n <OpenApisContext.Provider value={openApis}>\n <ThemeProvider>\n <AppShell config={config} routes={routes} navigation={navigation ?? []} />\n </ThemeProvider>\n </OpenApisContext.Provider>\n </ClarifyConfigContext.Provider>\n </BrowserRouter>\n </StrictMode>\n )\n\n const hydrationDebug = isHydrationDebugEnabled()\n\n try {\n hydrateRoot(target as Element, app, {\n onRecoverableError(error, errorInfo) {\n // Phase 1: suppress hydration mismatch noise by default. React 19\n // recovers automatically, but diagnostics can be enabled explicitly.\n if (hydrationDebug) {\n console.warn('[clarify] Recoverable hydration error:', error, errorInfo)\n }\n },\n })\n } catch (err) {\n console.warn('[clarify] Hydration failed, falling back to client render:', err)\n createRoot(target as Element).render(app)\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAmBA,SAAS,0BAAmC;CAC1C,IAAI;EAEF,OAAO,IADY,gBAAgB,OAAO,SAAS,MAC5C,EAAO,IAAI,uBAAuB,MAAM,OAAO,OAAO,aAAa,QAAQ,yBAAyB,MAAM;CACnH,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAgB,OAAO,SAAwB;CAC7C,MAAM,EAAE,QAAQ,QAAQ,YAAY,WAAW,CAAC,GAAG,cAAc;CAEjE,MAAM,SAAS,aAAa,SAAS,eAAe,MAAM;CAC1D,IAAI,CAAC,QACH,MAAM,IAAI,MAAM,qDAAmD;CAGrE,MAAM,MACJ,iBAAA,GAAA,kBAAA,KAAC,MAAA,YAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,KAAC,iBAAA,eAAD;EAAe,UAAU,OAAO;YAC9B,iBAAA,GAAA,kBAAA,KAAC,iBAAA,qBAAqB,UAAtB;GAA+B,OAAO;aACpC,iBAAA,GAAA,kBAAA,KAAC,iBAAA,gBAAgB,UAAjB;IAA0B,OAAO;cAC/B,iBAAA,GAAA,kBAAA,KAAC,iBAAA,eAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,KAAC,iBAAA,UAAD;KAAkB;KAAgB;KAAQ,YAAY,cAAc,CAAC;IAAI,CAAA,EAC5D,CAAA;GACS,CAAA;EACG,CAAA;CAClB,CAAA,EACL,CAAA;CAGd,MAAM,iBAAiB,wBAAwB;CAE/C,IAAI;EACF,CAAA,GAAA,iBAAA,aAAY,QAAmB,KAAK,EAClC,mBAAmB,OAAO,WAAW;GAGnC,IAAI,gBACF,QAAQ,KAAK,0CAA0C,OAAO,SAAS;EAE3E,EACF,CAAC;CACH,SAAS,KAAK;EACZ,QAAQ,KAAK,8DAA8D,GAAG;EAC9E,CAAA,GAAA,iBAAA,YAAW,MAAiB,EAAE,OAAO,GAAG;CAC1C;AACF"}
|