@blaaiz/docs-core 0.8.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/generator/index.ts"],"names":[],"mappings":"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","file":"generator.js","sourcesContent":["/**\n * `@blaaiz/docs-core/generator` — builds the docs content tree from `docs.json`.\n *\n * One call turns the site's navigation file into everything fumadocs needs:\n * generated API pages placed in their configured groups, and `meta.json` files\n * encoding tab and group order. Authors reorganize the docs by editing\n * `docs.json` — never by moving files.\n *\n * Node-only. A site that publishes an API reference injects `createOpenAPI` and\n * `generateFiles` from its own `fumadocs-openapi` install, so this package takes\n * no dependency on it. A site of prose alone injects nothing: with no API pages\n * in `docs.json` the generator writes the `meta.json` files and `nav.json` and\n * never touches `fumadocs-openapi`.\n *\n * @packageDocumentation\n */\n\nimport { mkdir, readFile, rm, writeFile } from 'node:fs/promises';\nimport path from 'node:path';\n\nimport { mergeOpenApiDocuments } from '../adapters/index.js';\nimport { parseNavigation } from '../adapters/index.js';\nimport type {\n NavItem,\n OpenApiDocument,\n OpenApiInfo,\n OpenApiServer,\n SidebarStyle,\n} from '../core/index.js';\nimport { planDocsTree } from '../core/index.js';\nimport { hasOpenApi } from '../core/docs-tree.js';\n\n/**\n * The two fumadocs-openapi functions the generator needs, injected by the site\n * (`createOpenAPI` from `fumadocs-openapi/server`, `generateFiles` from\n * `fumadocs-openapi`). Typed loosely so this package needs no fumadocs types.\n *\n * @public\n */\nexport interface FumadocsOpenApi {\n readonly createOpenAPI: (...args: never[]) => unknown;\n readonly generateFiles: (...args: never[]) => unknown;\n}\n\n/**\n * Options for {@link generateDocsTree}.\n *\n * @public\n */\nexport interface GenerateDocsTreeOptions {\n /** The site's content directory (holds `docs.json`, spec files, and `docs/`). */\n readonly contentDir: string;\n /** Path to the navigation file. Default `<contentDir>/docs.json`. */\n readonly docsJson?: string;\n /** Output directory for the page tree. Default `<contentDir>/docs`. */\n readonly outDir?: string;\n /** Folder for generated API pages. Default `api`. */\n readonly apiDir?: string;\n /**\n * `info` block of the merged OpenAPI document. Required when `docs.json`\n * publishes API pages; ignored on a site of prose alone, which merges no\n * documents.\n */\n readonly info?: OpenApiInfo;\n /** Servers of the merged document. */\n readonly servers?: readonly OpenApiServer[];\n /** Same-origin proxy route for the try-it playground. */\n readonly proxyUrl?: string;\n /** URL base the fumadocs loader serves pages under. Default `/docs`. */\n readonly baseUrl?: string;\n /**\n * The site's fumadocs-openapi functions. Required when `docs.json` publishes\n * API pages; omit it on a site of prose alone.\n */\n readonly fumadocs?: FumadocsOpenApi;\n}\n\n/**\n * A top-navigation link: one tab, pointing at its first page.\n *\n * @public\n */\nexport interface NavLink {\n readonly text: string;\n readonly url: string;\n /** The tab's icon name from `docs.json`, for the site to resolve. */\n readonly icon?: string;\n /**\n * Path prefixes the link is active for. Emitted for an API tab, whose\n * territory the generator knows exactly: the tab's generated folder plus\n * the folders of any doc pages it declares. `docsNavLinks` derives the\n * section from the URL when this is absent.\n */\n readonly match?: readonly string[];\n}\n\n/**\n * What the generator produced.\n *\n * @public\n */\nexport interface GenerateDocsTreeResult {\n readonly pages: number;\n readonly metas: number;\n /**\n * Top-nav links, one per tab, each pointing at the tab's first page — written\n * to `<contentDir>/nav.json` for the site's layout. Keeps the top nav in sync\n * with `docs.json` instead of a hand-maintained list.\n */\n readonly navLinks: readonly NavLink[];\n /**\n * Page URL to HTTP method, written to `<contentDir>/api-methods.json` for the\n * sidebar method badges (`apiMethodBadges` in `@blaaiz/docs-core/ui`).\n */\n readonly methodsByUrl: Readonly<Record<string, string>>;\n /**\n * Page URL to its operation's source, written to\n * `<contentDir>/api-sources.json` — the Markdown route serves the original\n * spec from it.\n */\n readonly sourcesByUrl: Readonly<\n Record<string, { readonly file: string; readonly method: string; readonly route: string }>\n >;\n /**\n * Old page URL to its current one, written to `<contentDir>/redirects.json`.\n * A renamed operation (its summary edited, its page moved) leaves a\n * forwarding address here; the site's middleware serves permanent redirects\n * from it through `redirectTarget`.\n */\n readonly redirects: Readonly<Record<string, string>>;\n /** The merged OpenAPI document (reusable for the runtime page renderer). */\n readonly document: OpenApiDocument;\n}\n\ninterface GeneratedFile {\n path: string;\n content: string;\n}\n\n/**\n * Kebab-case free text, splitting camelCase words. Distinct from the\n * planner's `slugify`, which names folders and must not re-split names that\n * already exist on disk.\n */\nfunction kebabCase(value: string): string {\n return value\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '');\n}\n\n/**\n * The page slug for one operation: its summary, kebab-cased — the readable\n * URL. A summary that kebab-cases to nothing falls back to the\n * `operationId`, then to `METHOD path`, which always yields a slug.\n */\nfunction pageSlug(\n operation: { operationId?: string; summary?: string },\n method: string,\n apiPath: string,\n): string {\n for (const candidate of [operation.summary, operation.operationId]) {\n if (candidate !== undefined) {\n const slug = kebabCase(candidate);\n if (slug !== '') {\n return slug;\n }\n }\n }\n return kebabCase(`${method} ${apiPath}`);\n}\n\n/**\n * The frontmatter `title` of an MDX page, or null when the file has none.\n * Reads only the leading frontmatter block; quotes around the value are\n * stripped.\n */\nfunction frontmatterTitle(source: string): string | null {\n const block = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---/.exec(source);\n if (!block?.[1]) {\n return null;\n }\n const line = /^title\\s*:\\s*(.+)\\s*$/m.exec(block[1]);\n if (!line?.[1]) {\n return null;\n }\n return line[1].replace(/^(['\"])(.*)\\1$/, '$2');\n}\n\n/** The `METHOD path` key of the first operation a generated page renders. */\nfunction operationKeyOf(content: string): string | null {\n const match = /operations=\\{(\\[[\\s\\S]*?\\])\\}/.exec(content);\n if (!match?.[1]) {\n return null;\n }\n try {\n const ops = JSON.parse(match[1]) as { path: string; method: string }[];\n const op = ops[0];\n return op ? `${op.method.toUpperCase()} ${op.path}` : null;\n } catch {\n return null;\n }\n}\n\n/**\n * The `info` a docs-only run reports on its (empty) merged document. Nothing\n * renders it: with no API pages there is no reference view to title.\n */\nconst PROSE_ONLY_INFO: OpenApiInfo = { title: 'No API reference', version: '0.0.0' };\n\n/** The optional top-level `sidebar` key of `docs.json`, validated. */\nfunction sidebarStyleOf(docsJson: Record<string, unknown>): SidebarStyle {\n const value = docsJson['sidebar'] ?? 'collapsible';\n if (value !== 'collapsible' && value !== 'headings') {\n throw new Error(\n `[docs-core] docs.json has sidebar: ${JSON.stringify(value)}. Use 'headings' ` +\n `(flat group headings, nested groups closed) or 'collapsible' (every group a folder).`,\n );\n }\n return value;\n}\n\n/**\n * The fumadocs functions, checked. Called only when the navigation publishes\n * API pages, so the message can name the exact reason they are needed.\n */\nfunction requireFumadocs(value: unknown, apiPageCount: number): FumadocsOpenApi {\n const because = `docs.json publishes ${String(apiPageCount)} API page(s)`;\n if (typeof value !== 'object' || value === null) {\n throw new Error(\n `[docs-core] generateDocsTree: the 'fumadocs' option is required because ${because}. ` +\n \"Pass { createOpenAPI, generateFiles } from the site's fumadocs-openapi install.\",\n );\n }\n const candidate = value as Record<string, unknown>;\n for (const name of ['createOpenAPI', 'generateFiles'] as const) {\n if (typeof candidate[name] !== 'function') {\n throw new Error(\n `[docs-core] generateDocsTree: fumadocs.${name} must be a function because ${because}. ` +\n `Import ${name} from ${name === 'createOpenAPI' ? \"'fumadocs-openapi/server'\" : \"'fumadocs-openapi'\"}.`,\n );\n }\n }\n return value as FumadocsOpenApi;\n}\n\n/**\n * Build the docs content tree from `docs.json`.\n *\n * Reads the navigation, merges every referenced spec, generates one page per\n * declared endpoint into its configured group folder, and writes the\n * `meta.json` files that give the sidebar the navigation's exact structure and\n * order. Operations present in a spec but not declared in `docs.json` get no\n * page — the navigation decides what is published, as on Mintlify.\n *\n * A site of prose alone needs neither option: with no API pages in `docs.json`\n * the run writes the `meta.json` files, `nav.json`, and an empty\n * `api-methods.json`, and never loads `fumadocs-openapi`.\n *\n * @example\n * ```ts\n * // A site of prose alone.\n * await generateDocsTree({ contentDir: 'content' });\n * ```\n *\n * @param options - directories, document info, and the injected fumadocs functions\n * @returns counts and the merged document\n * @throws when `docs.json` publishes API pages and `fumadocs` or `info` is missing\n * @public\n */\nexport async function generateDocsTree(\n options: GenerateDocsTreeOptions,\n): Promise<GenerateDocsTreeResult> {\n const docsJson = options.docsJson ?? path.join(options.contentDir, 'docs.json');\n const outDir = options.outDir ?? path.join(options.contentDir, 'docs');\n const apiDir = options.apiDir ?? 'api';\n\n const parsed = JSON.parse(await readFile(docsJson, 'utf8')) as Record<string, unknown>;\n const navigation = parseNavigation(parsed);\n const sidebar = sidebarStyleOf(parsed);\n const headings = sidebar === 'headings';\n const plan = planDocsTree(navigation, { apiDir, sidebar });\n\n // Where each planned API page lands. Both stay empty on a prose-only site.\n const placements = new Map<string, { dir: string; order: number; slug: string }>();\n const groupPages = new Map<string, { order: number; slug: string }[]>();\n let pages = 0;\n let document: OpenApiDocument;\n\n if (plan.apiPages.length === 0) {\n // A site of prose alone. Nothing to merge, nothing to generate, and — most\n // importantly — nothing removed: a hand-written folder named `api` is the\n // site's own content, not our output.\n document = mergeOpenApiDocuments([], { info: options.info ?? PROSE_ONLY_INFO });\n } else {\n const fumadocs = requireFumadocs(options.fumadocs, plan.apiPages.length);\n if (options.info === undefined) {\n throw new Error(\n `[docs-core] generateDocsTree: the 'info' option is required because docs.json ` +\n `publishes ${String(plan.apiPages.length)} API page(s). ` +\n 'Pass { title, version } for the merged OpenAPI document.',\n );\n }\n\n // Merge exactly the specs the navigation references.\n const docs = await Promise.all(\n plan.specs.map(\n async (file) =>\n JSON.parse(await readFile(path.join(options.contentDir, file), 'utf8')) as unknown,\n ),\n );\n document = mergeOpenApiDocuments(docs, {\n info: options.info,\n ...(options.servers ? { servers: options.servers } : {}),\n });\n\n // Resolve each planned page's slug from the merged document. Two pages in\n // one folder must never share a slug: that would be a silent overwrite.\n const taken = new Map<string, string>();\n for (const page of plan.apiPages) {\n const operation = document.paths[page.apiPath]?.[page.method.toLowerCase()] as\n { operationId?: string; summary?: string } | undefined;\n if (!operation) {\n throw new Error(\n `[docs-core] docs.json references ${page.method} ${page.apiPath}, ` +\n `but ${page.file} defines no such operation.`,\n );\n }\n const slug = pageSlug(operation, page.method, page.apiPath);\n const key = `${page.dir}/${slug}`;\n const holder = taken.get(key);\n if (holder !== undefined) {\n throw new Error(\n `[docs-core] ${holder} and ${page.method.toUpperCase()} ${page.apiPath} both ` +\n `resolve to the page '${key}'. Give one of them a distinct summary.`,\n );\n }\n taken.set(key, `${page.method.toUpperCase()} ${page.apiPath}`);\n placements.set(`${page.method.toUpperCase()} ${page.apiPath}`, { ...page, slug });\n const group = groupPages.get(page.dir) ?? [];\n group.push({ order: page.order, slug });\n groupPages.set(page.dir, group);\n }\n\n // Fresh API tree, then generate pages and route each into its planned\n // folder. A declared doc page inside a generated folder would be wiped\n // with it: refuse before deleting anything.\n for (const link of plan.apiDocLinks) {\n const owner = plan.apiGroups.find(\n (group) => group.root && (link.file === group.dir || link.file.startsWith(`${group.dir}/`)),\n );\n if (owner) {\n throw new Error(\n `[docs-core] docs.json places the doc page '${link.file}' inside '${owner.dir}', ` +\n `which the generator regenerates and wipes on every run. Move the page ` +\n `outside '${owner.dir}/'.`,\n );\n }\n }\n for (const group of plan.apiGroups) {\n if (group.root) {\n await rm(path.join(outDir, group.dir), { recursive: true, force: true });\n }\n }\n const createOpenAPI = fumadocs.createOpenAPI as (input: unknown) => unknown;\n const generateFiles = fumadocs.generateFiles as (input: unknown) => Promise<void>;\n await generateFiles({\n input: createOpenAPI({\n input: { blaaiz: document },\n ...(options.proxyUrl ? { proxyUrl: options.proxyUrl } : {}),\n }),\n output: outDir,\n per: 'operation',\n groupBy: 'none',\n beforeWrite(files: GeneratedFile[]) {\n for (let i = files.length - 1; i >= 0; i -= 1) {\n const file = files[i];\n if (!file) {\n continue;\n }\n const key = operationKeyOf(file.content);\n const placement = key ? placements.get(key) : undefined;\n if (!placement) {\n files.splice(i, 1); // not declared in docs.json -> not published\n continue;\n }\n file.path = path.join(placement.dir, `${placement.slug}.mdx`);\n pages += 1;\n }\n },\n });\n }\n\n // Doc pages declared inside API tabs become link entries in their group's\n // meta, at their declared position; the page keeps living in its own folder.\n const baseUrl = (options.baseUrl ?? '/docs').replace(/\\/$/, '');\n const docUrl = (file: string): string => {\n const clean = file.replace(/\\/?index$/, '');\n return clean ? `${baseUrl}/${clean}` : baseUrl;\n };\n for (const link of plan.apiDocLinks) {\n const source = path.join(outDir, `${link.file}.mdx`);\n let title: string | null = null;\n try {\n title = frontmatterTitle(await readFile(source, 'utf8'));\n } catch {\n console.warn(\n `[docs-core] docs.json lists ${link.file} inside an API tab, but ` +\n `${source} does not exist. The sidebar entry is skipped.`,\n );\n continue;\n }\n if (title === null) {\n title = link.file.split('/').pop() ?? link.file;\n console.warn(\n `[docs-core] ${link.file}.mdx has no frontmatter title; its sidebar ` +\n `entry falls back to '${title}'.`,\n );\n }\n const group = groupPages.get(link.dir) ?? [];\n // The meta link syntax cannot carry these characters in a name or URL.\n group.push({\n order: link.order,\n slug: `[${title.replace(/[[\\]()]/g, '')}](${docUrl(link.file)})`,\n });\n groupPages.set(link.dir, group);\n }\n\n // Meta files: the plan's static ones, plus each API group's entries — its\n // resolved page slugs and child folders, merged back into declared order.\n const metas = [\n ...plan.metas,\n ...plan.apiGroups.map((group) => ({\n path: `${group.dir}/meta.json`,\n content: {\n title: group.title,\n ...(group.root ? { root: true } : {}),\n ...(group.icon ? { icon: group.icon } : {}),\n // A nested group starts closed in the headings style, whatever the\n // site's defaultOpenLevel.\n ...(headings && !group.root ? { defaultOpen: false } : {}),\n pages: [\n ...(groupPages.get(group.dir) ?? []).map((page) => ({\n order: page.order,\n names: [page.slug],\n })),\n ...group.children.map((child) => ({\n order: child.order,\n // In the headings style a tab-level group is a flat heading with\n // its pages extracted beneath it, not a collapsible folder.\n names:\n headings && group.root\n ? [`---${child.title}---`, `...${child.folder}`]\n : [child.folder],\n })),\n ]\n .sort((a, b) => a.order - b.order)\n .flatMap((entry) => entry.names),\n },\n })),\n ];\n for (const meta of metas) {\n const target = path.join(outDir, meta.path);\n await mkdir(path.dirname(target), { recursive: true });\n await writeFile(target, `${JSON.stringify(meta.content, null, 2)}\\n`);\n }\n\n // Top-nav links: each tab points at its first page. The URL of an API page\n // needs its resolved slug, which is why this runs here, not in the planner.\n const firstUrl = (items: readonly NavItem[]): string | undefined => {\n for (const item of items) {\n if (item.kind === 'group') {\n const url = firstUrl(item.items);\n if (url) {\n return url;\n }\n } else if (item.kind === 'doc') {\n return docUrl(item.file);\n } else {\n const placement = placements.get(`${item.method.toUpperCase()} ${item.apiPath}`);\n if (placement) {\n return `${baseUrl}/${placement.dir}/${placement.slug}`;\n }\n }\n }\n return undefined;\n };\n const tabDocFiles = (items: readonly NavItem[]): string[] =>\n items.flatMap((item) => {\n if (item.kind === 'group') {\n return tabDocFiles(item.items);\n }\n return item.kind === 'doc' ? [item.file] : [];\n });\n\n // An API tab's active-match territory: its generated folder plus the exact\n // URLs of the doc pages it declares — pages, never their whole folders. The\n // tabs' generated folders sit in plan.apiGroups' root entries, in\n // navigation order.\n const apiTabRoots = plan.apiGroups.filter((group) => group.root).map((group) => group.dir);\n let apiTabIndex = 0;\n const navLinks: NavLink[] = [];\n for (const tab of navigation) {\n let match: string[] | undefined;\n if (hasOpenApi(tab.items)) {\n const root = apiTabRoots[apiTabIndex];\n apiTabIndex += 1;\n if (root !== undefined) {\n match = [\n ...new Set([`${baseUrl}/${root}`, ...tabDocFiles(tab.items).map((file) => docUrl(file))]),\n ];\n }\n }\n const url = firstUrl(tab.items);\n if (!url) {\n continue;\n }\n navLinks.push({\n text: tab.title,\n url,\n ...(tab.icon ? { icon: tab.icon } : {}),\n ...(match ? { match } : {}),\n });\n }\n await writeFile(\n path.join(options.contentDir, 'nav.json'),\n `${JSON.stringify(navLinks, null, 2)}\\n`,\n );\n\n // Page URL -> HTTP method, for the sidebar method badges; and page URL ->\n // the operation's source file, for the Markdown route.\n const methodsByUrl: Record<string, string> = {};\n const sourcesByUrl: Record<string, { file: string; method: string; route: string }> = {};\n for (const page of plan.apiPages) {\n const placement = placements.get(`${page.method.toUpperCase()} ${page.apiPath}`);\n if (placement) {\n const url = `${baseUrl}/${placement.dir}/${placement.slug}`;\n methodsByUrl[url] = page.method.toUpperCase();\n sourcesByUrl[url] = {\n file: page.file,\n method: page.method.toUpperCase(),\n route: page.apiPath,\n };\n }\n }\n // A renamed page leaves a forwarding address. The previous run's\n // api-sources.json keys each operation's old URL; where the same operation\n // (METHOD route) now lives at a new URL, redirects.json gains old -> new.\n // Existing entries are re-pointed through renames and dropped when their\n // old URL is a live page again.\n const sourcesPath = path.join(options.contentDir, 'api-sources.json');\n const redirectsPath = path.join(options.contentDir, 'redirects.json');\n const previousSources =\n await readJson<Record<string, { method: string; route: string }>>(sourcesPath);\n const redirects = (await readJson<Record<string, string>>(redirectsPath)) ?? {};\n if (previousSources) {\n const urlByOperation = new Map(\n Object.entries(sourcesByUrl).map(([url, s]) => [`${s.method} ${s.route}`, url]),\n );\n for (const [oldUrl, source] of Object.entries(previousSources)) {\n const newUrl = urlByOperation.get(`${source.method} ${source.route}`);\n if (newUrl !== undefined && newUrl !== oldUrl) {\n redirects[oldUrl] = newUrl;\n }\n }\n }\n // Each entry points at a live page: chains are chased to their end, cycles\n // and entries whose old URL is a live page again are dropped.\n const finalDestination = (from: string): string | null => {\n const seen = new Set([from]);\n let current = redirects[from];\n while (current !== undefined && !(current in sourcesByUrl)) {\n if (seen.has(current)) {\n return null;\n }\n seen.add(current);\n current = redirects[current];\n }\n return current ?? null;\n };\n const liveRedirects: Record<string, string> = {};\n for (const oldUrl of Object.keys(redirects)) {\n if (oldUrl in sourcesByUrl) {\n continue;\n }\n const destination = finalDestination(oldUrl);\n if (destination !== null && destination !== oldUrl) {\n liveRedirects[oldUrl] = destination;\n }\n }\n\n await writeFile(\n path.join(options.contentDir, 'api-methods.json'),\n `${JSON.stringify(methodsByUrl, null, 2)}\\n`,\n );\n await writeFile(sourcesPath, `${JSON.stringify(sourcesByUrl, null, 2)}\\n`);\n await writeFile(redirectsPath, `${JSON.stringify(liveRedirects, null, 2)}\\n`);\n\n return {\n pages,\n metas: metas.length,\n navLinks,\n methodsByUrl,\n sourcesByUrl,\n redirects: liveRedirects,\n document,\n };\n}\n\n/** A JSON file's parsed contents, or null when it does not exist or parse. */\nasync function readJson<T>(file: string): Promise<T | null> {\n try {\n return JSON.parse(await readFile(file, 'utf8')) as T;\n } catch {\n return null;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/generator/index.ts"],"names":[],"mappings":"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","file":"generator.js","sourcesContent":["/**\n * `@blaaiz/docs-core/generator` — builds the docs content tree from `docs.json`.\n *\n * One call turns the site's navigation file into everything fumadocs needs:\n * generated API pages placed in their configured groups, and `meta.json` files\n * encoding tab and group order. Authors reorganize the docs by editing\n * `docs.json` — never by moving files.\n *\n * Node-only. A site that publishes an API reference injects `createOpenAPI` and\n * `generateFiles` from its own `fumadocs-openapi` install, so this package takes\n * no dependency on it. A site of prose alone injects nothing: with no API pages\n * in `docs.json` the generator writes the `meta.json` files and `nav.json` and\n * never touches `fumadocs-openapi`.\n *\n * @packageDocumentation\n */\n\nimport { mkdir, readFile, rm, writeFile } from 'node:fs/promises';\nimport path from 'node:path';\n\nimport { mergeOpenApiDocuments } from '../adapters/index.js';\nimport { parseNavigation } from '../adapters/index.js';\nimport type {\n NavItem,\n OpenApiDocument,\n OpenApiInfo,\n OpenApiServer,\n SidebarStyle,\n} from '../core/index.js';\nimport { planDocsTree } from '../core/index.js';\nimport { hasOpenApi } from '../core/docs-tree.js';\n\n/**\n * The two fumadocs-openapi functions the generator needs, injected by the site\n * (`createOpenAPI` from `fumadocs-openapi/server`, `generateFiles` from\n * `fumadocs-openapi`). Typed loosely so this package needs no fumadocs types.\n *\n * @public\n */\nexport interface FumadocsOpenApi {\n readonly createOpenAPI: (...args: never[]) => unknown;\n readonly generateFiles: (...args: never[]) => unknown;\n}\n\n/**\n * Options for {@link generateDocsTree}.\n *\n * @public\n */\nexport interface GenerateDocsTreeOptions {\n /** The site's content directory (holds `docs.json`, spec files, and `docs/`). */\n readonly contentDir: string;\n /** Path to the navigation file. Default `<contentDir>/docs.json`. */\n readonly docsJson?: string;\n /** Output directory for the page tree. Default `<contentDir>/docs`. */\n readonly outDir?: string;\n /** Folder for generated API pages. Default `api`. */\n readonly apiDir?: string;\n /**\n * `info` block of the merged OpenAPI document. Required when `docs.json`\n * publishes API pages; ignored on a site of prose alone, which merges no\n * documents.\n */\n readonly info?: OpenApiInfo;\n /** Servers of the merged document. */\n readonly servers?: readonly OpenApiServer[];\n /** Same-origin proxy route for the try-it playground. */\n readonly proxyUrl?: string;\n /** URL base the fumadocs loader serves pages under. Default `/docs`. */\n readonly baseUrl?: string;\n /**\n * The site's fumadocs-openapi functions. Required when `docs.json` publishes\n * API pages; omit it on a site of prose alone.\n */\n readonly fumadocs?: FumadocsOpenApi;\n}\n\n/**\n * A top-navigation link: one tab, pointing at its first page.\n *\n * @public\n */\nexport interface NavLink {\n readonly text: string;\n readonly url: string;\n /** The tab's icon name from `docs.json`, for the site to resolve. */\n readonly icon?: string;\n /**\n * Path prefixes the link is active for. Emitted for an API tab, whose\n * territory the generator knows exactly: the tab's generated folder plus\n * the folders of any doc pages it declares. `docsNavLinks` derives the\n * section from the URL when this is absent.\n */\n readonly match?: readonly string[];\n}\n\n/**\n * What the generator produced.\n *\n * @public\n */\nexport interface GenerateDocsTreeResult {\n readonly pages: number;\n readonly metas: number;\n /**\n * Top-nav links, one per tab, each pointing at the tab's first page — written\n * to `<contentDir>/nav.json` for the site's layout. Keeps the top nav in sync\n * with `docs.json` instead of a hand-maintained list.\n */\n readonly navLinks: readonly NavLink[];\n /**\n * Page URL to HTTP method, written to `<contentDir>/api-methods.json` for the\n * sidebar method badges (`apiMethodBadges` in `@blaaiz/docs-core/ui`).\n */\n readonly methodsByUrl: Readonly<Record<string, string>>;\n /**\n * Page URL to its operation's source, written to\n * `<contentDir>/api-sources.json` — the Markdown route serves the original\n * spec from it.\n */\n readonly sourcesByUrl: Readonly<\n Record<string, { readonly file: string; readonly method: string; readonly route: string }>\n >;\n /**\n * Old page URL to its current one, written to `<contentDir>/redirects.json`.\n * A renamed operation (its summary edited, its page moved) leaves a\n * forwarding address here; the site's middleware serves permanent redirects\n * from it through `redirectTarget`.\n */\n readonly redirects: Readonly<Record<string, string>>;\n /** The merged OpenAPI document (reusable for the runtime page renderer). */\n readonly document: OpenApiDocument;\n}\n\ninterface GeneratedFile {\n path: string;\n content: string;\n}\n\n/**\n * Kebab-case free text, splitting camelCase words. Distinct from the\n * planner's `slugify`, which names folders and must not re-split names that\n * already exist on disk.\n */\nfunction kebabCase(value: string): string {\n return value\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '');\n}\n\n/**\n * The page slug for one operation: its summary, kebab-cased — the readable\n * URL. A summary that kebab-cases to nothing falls back to the\n * `operationId`, then to `METHOD path`, which always yields a slug.\n */\nfunction pageSlug(\n operation: { operationId?: string; summary?: string },\n method: string,\n apiPath: string,\n): string {\n for (const candidate of [operation.summary, operation.operationId]) {\n if (candidate !== undefined) {\n const slug = kebabCase(candidate);\n if (slug !== '') {\n return slug;\n }\n }\n }\n return kebabCase(`${method} ${apiPath}`);\n}\n\n/**\n * The frontmatter `title` of an MDX page, or null when the file has none.\n * Reads only the leading frontmatter block; quotes around the value are\n * stripped.\n */\nfunction frontmatterTitle(source: string): string | null {\n const block = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---/.exec(source);\n if (!block?.[1]) {\n return null;\n }\n const line = /^title\\s*:\\s*(.+)\\s*$/m.exec(block[1]);\n if (!line?.[1]) {\n return null;\n }\n return line[1].replace(/^(['\"])(.*)\\1$/, '$2');\n}\n\n/** The `METHOD path` key of the first operation a generated page renders. */\nfunction operationKeyOf(content: string): string | null {\n const match = /operations=\\{(\\[[\\s\\S]*?\\])\\}/.exec(content);\n if (!match?.[1]) {\n return null;\n }\n try {\n const ops = JSON.parse(match[1]) as { path: string; method: string }[];\n const op = ops[0];\n return op ? `${op.method.toUpperCase()} ${op.path}` : null;\n } catch {\n return null;\n }\n}\n\n/**\n * The `info` a docs-only run reports on its (empty) merged document. Nothing\n * renders it: with no API pages there is no reference view to title.\n */\nconst PROSE_ONLY_INFO: OpenApiInfo = { title: 'No API reference', version: '0.0.0' };\n\n/** The optional top-level `sidebar` key of `docs.json`, validated. */\nfunction sidebarStyleOf(docsJson: Record<string, unknown>): SidebarStyle {\n const value = docsJson['sidebar'] ?? 'collapsible';\n if (value !== 'collapsible' && value !== 'headings') {\n throw new Error(\n `[docs-core] docs.json has sidebar: ${JSON.stringify(value)}. Use 'headings' ` +\n `(flat group headings, nested groups closed) or 'collapsible' (every group a folder).`,\n );\n }\n return value;\n}\n\n/**\n * The fumadocs functions, checked. Called only when the navigation publishes\n * API pages, so the message can name the exact reason they are needed.\n */\nfunction requireFumadocs(value: unknown, apiPageCount: number): FumadocsOpenApi {\n const because = `docs.json publishes ${String(apiPageCount)} API page(s)`;\n if (typeof value !== 'object' || value === null) {\n throw new Error(\n `[docs-core] generateDocsTree: the 'fumadocs' option is required because ${because}. ` +\n \"Pass { createOpenAPI, generateFiles } from the site's fumadocs-openapi install.\",\n );\n }\n const candidate = value as Record<string, unknown>;\n for (const name of ['createOpenAPI', 'generateFiles'] as const) {\n if (typeof candidate[name] !== 'function') {\n throw new Error(\n `[docs-core] generateDocsTree: fumadocs.${name} must be a function because ${because}. ` +\n `Import ${name} from ${name === 'createOpenAPI' ? \"'fumadocs-openapi/server'\" : \"'fumadocs-openapi'\"}.`,\n );\n }\n }\n return value as FumadocsOpenApi;\n}\n\n/**\n * Build the docs content tree from `docs.json`.\n *\n * Reads the navigation, merges every referenced spec, generates one page per\n * declared endpoint into its configured group folder, and writes the\n * `meta.json` files that give the sidebar the navigation's exact structure and\n * order. Operations present in a spec but not declared in `docs.json` get no\n * page — the navigation decides what is published, as on Mintlify.\n *\n * A site of prose alone needs neither option: with no API pages in `docs.json`\n * the run writes the `meta.json` files, `nav.json`, and an empty\n * `api-methods.json`, and never loads `fumadocs-openapi`.\n *\n * @example\n * ```ts\n * // A site of prose alone.\n * await generateDocsTree({ contentDir: 'content' });\n * ```\n *\n * @param options - directories, document info, and the injected fumadocs functions\n * @returns counts and the merged document\n * @throws when `docs.json` publishes API pages and `fumadocs` or `info` is missing\n * @public\n */\nexport async function generateDocsTree(\n options: GenerateDocsTreeOptions,\n): Promise<GenerateDocsTreeResult> {\n const docsJson = options.docsJson ?? path.join(options.contentDir, 'docs.json');\n const outDir = options.outDir ?? path.join(options.contentDir, 'docs');\n const apiDir = options.apiDir ?? 'api';\n\n const parsed = JSON.parse(await readFile(docsJson, 'utf8')) as Record<string, unknown>;\n const navigation = parseNavigation(parsed);\n const sidebar = sidebarStyleOf(parsed);\n const headings = sidebar === 'headings';\n const plan = planDocsTree(navigation, { apiDir, sidebar });\n\n // Where each planned API page lands. Both stay empty on a prose-only site.\n const placements = new Map<string, { dir: string; order: number; slug: string }>();\n const groupPages = new Map<string, { order: number; slug: string }[]>();\n let pages = 0;\n let document: OpenApiDocument;\n\n if (plan.apiPages.length === 0) {\n // A site of prose alone. Nothing to merge, nothing to generate, and — most\n // importantly — nothing removed: a hand-written folder named `api` is the\n // site's own content, not our output.\n document = mergeOpenApiDocuments([], { info: options.info ?? PROSE_ONLY_INFO });\n } else {\n const fumadocs = requireFumadocs(options.fumadocs, plan.apiPages.length);\n if (options.info === undefined) {\n throw new Error(\n `[docs-core] generateDocsTree: the 'info' option is required because docs.json ` +\n `publishes ${String(plan.apiPages.length)} API page(s). ` +\n 'Pass { title, version } for the merged OpenAPI document.',\n );\n }\n\n // Merge exactly the specs the navigation references.\n const docs = await Promise.all(\n plan.specs.map(\n async (file) =>\n JSON.parse(await readFile(path.join(options.contentDir, file), 'utf8')) as unknown,\n ),\n );\n document = mergeOpenApiDocuments(docs, {\n info: options.info,\n ...(options.servers ? { servers: options.servers } : {}),\n });\n\n // Resolve each planned page's slug from the merged document. Two pages in\n // one folder must never share a slug: that would be a silent overwrite.\n const taken = new Map<string, string>();\n for (const page of plan.apiPages) {\n const operation = document.paths[page.apiPath]?.[page.method.toLowerCase()] as\n { operationId?: string; summary?: string } | undefined;\n if (!operation) {\n throw new Error(\n `[docs-core] docs.json references ${page.method} ${page.apiPath}, ` +\n `but ${page.file} defines no such operation.`,\n );\n }\n const slug = pageSlug(operation, page.method, page.apiPath);\n const key = `${page.dir}/${slug}`;\n const holder = taken.get(key);\n if (holder !== undefined) {\n throw new Error(\n `[docs-core] ${holder} and ${page.method.toUpperCase()} ${page.apiPath} both ` +\n `resolve to the page '${key}'. Give one of them a distinct summary.`,\n );\n }\n taken.set(key, `${page.method.toUpperCase()} ${page.apiPath}`);\n placements.set(`${page.method.toUpperCase()} ${page.apiPath}`, { ...page, slug });\n const group = groupPages.get(page.dir) ?? [];\n group.push({ order: page.order, slug });\n groupPages.set(page.dir, group);\n }\n\n // Fresh API tree, then generate pages and route each into its planned\n // folder. A declared doc page inside a generated folder would be wiped\n // with it: refuse before deleting anything.\n for (const link of plan.apiDocLinks) {\n const owner = plan.apiGroups.find(\n (group) => group.root && (link.file === group.dir || link.file.startsWith(`${group.dir}/`)),\n );\n if (owner) {\n throw new Error(\n `[docs-core] docs.json places the doc page '${link.file}' inside '${owner.dir}', ` +\n `which the generator regenerates and wipes on every run. Move the page ` +\n `outside '${owner.dir}/'.`,\n );\n }\n }\n for (const group of plan.apiGroups) {\n if (group.root) {\n await rm(path.join(outDir, group.dir), { recursive: true, force: true });\n }\n }\n const createOpenAPI = fumadocs.createOpenAPI as (input: unknown) => unknown;\n const generateFiles = fumadocs.generateFiles as (input: unknown) => Promise<void>;\n await generateFiles({\n input: createOpenAPI({\n input: { blaaiz: document },\n ...(options.proxyUrl ? { proxyUrl: options.proxyUrl } : {}),\n }),\n output: outDir,\n per: 'operation',\n groupBy: 'none',\n beforeWrite(files: GeneratedFile[]) {\n for (let i = files.length - 1; i >= 0; i -= 1) {\n const file = files[i];\n if (!file) {\n continue;\n }\n const key = operationKeyOf(file.content);\n const placement = key ? placements.get(key) : undefined;\n if (!placement) {\n files.splice(i, 1); // not declared in docs.json -> not published\n continue;\n }\n file.path = path.join(placement.dir, `${placement.slug}.mdx`);\n pages += 1;\n }\n },\n });\n }\n\n // Doc pages declared inside API tabs become link entries in their group's\n // meta, at their declared position; the page keeps living in its own folder.\n const baseUrl = (options.baseUrl ?? '/docs').replace(/\\/$/, '');\n const docUrl = (file: string): string => {\n const clean = file.replace(/\\/?index$/, '');\n return clean ? `${baseUrl}/${clean}` : baseUrl;\n };\n for (const link of plan.apiDocLinks) {\n const source = path.join(outDir, `${link.file}.mdx`);\n let title: string | null = null;\n try {\n title = frontmatterTitle(await readFile(source, 'utf8'));\n } catch {\n console.warn(\n `[docs-core] docs.json lists ${link.file} inside an API tab, but ` +\n `${source} does not exist. The sidebar entry is skipped.`,\n );\n continue;\n }\n if (title === null) {\n title = link.file.split('/').pop() ?? link.file;\n console.warn(\n `[docs-core] ${link.file}.mdx has no frontmatter title; its sidebar ` +\n `entry falls back to '${title}'.`,\n );\n }\n const group = groupPages.get(link.dir) ?? [];\n // The meta link syntax cannot carry these characters in a name or URL.\n group.push({\n order: link.order,\n slug: `[${title.replace(/[[\\]()]/g, '')}](${docUrl(link.file)})`,\n });\n groupPages.set(link.dir, group);\n }\n\n // Meta files: the plan's static ones, plus each API group's entries — its\n // resolved page slugs and child folders, merged back into declared order.\n const metas = [\n ...plan.metas,\n ...plan.apiGroups.map((group) => ({\n path: `${group.dir}/meta.json`,\n content: {\n title: group.title,\n ...(group.root ? { root: true } : {}),\n ...(group.icon ? { icon: group.icon } : {}),\n // A nested group starts closed in the headings style, whatever the\n // site's defaultOpenLevel.\n ...(headings && !group.root ? { defaultOpen: false } : {}),\n pages: [\n ...(groupPages.get(group.dir) ?? []).map((page) => ({\n order: page.order,\n names: [page.slug],\n })),\n ...group.children.map((child) => ({\n order: child.order,\n // In the headings style a tab-level group is a flat heading with\n // its pages extracted beneath it, not a collapsible folder.\n names:\n headings && group.root\n ? [`---${child.title}---`, `...${child.folder}`]\n : [child.folder],\n })),\n ]\n .sort((a, b) => a.order - b.order)\n .flatMap((entry) => entry.names),\n },\n })),\n ];\n for (const meta of metas) {\n const target = path.join(outDir, meta.path);\n await mkdir(path.dirname(target), { recursive: true });\n await writeFile(target, `${JSON.stringify(meta.content, null, 2)}\\n`);\n }\n\n // Top-nav links: each tab points at its first page. The URL of an API page\n // needs its resolved slug, which is why this runs here, not in the planner.\n const firstUrl = (items: readonly NavItem[]): string | undefined => {\n for (const item of items) {\n if (item.kind === 'group') {\n const url = firstUrl(item.items);\n if (url) {\n return url;\n }\n } else if (item.kind === 'doc') {\n return docUrl(item.file);\n } else {\n const placement = placements.get(`${item.method.toUpperCase()} ${item.apiPath}`);\n if (placement) {\n return `${baseUrl}/${placement.dir}/${placement.slug}`;\n }\n }\n }\n return undefined;\n };\n const tabDocFiles = (items: readonly NavItem[]): string[] =>\n items.flatMap((item) => {\n if (item.kind === 'group') {\n return tabDocFiles(item.items);\n }\n return item.kind === 'doc' ? [item.file] : [];\n });\n\n // An API tab's active-match territory: its generated folder plus the exact\n // URLs of the doc pages it declares — pages, never their whole folders. The\n // tabs' generated folders sit in plan.apiGroups' root entries, in\n // navigation order.\n const apiTabRoots = plan.apiGroups.filter((group) => group.root).map((group) => group.dir);\n let apiTabIndex = 0;\n const navLinks: NavLink[] = [];\n for (const tab of navigation) {\n let match: string[] | undefined;\n if (hasOpenApi(tab.items)) {\n const root = apiTabRoots[apiTabIndex];\n apiTabIndex += 1;\n if (root !== undefined) {\n match = [\n ...new Set([`${baseUrl}/${root}`, ...tabDocFiles(tab.items).map((file) => docUrl(file))]),\n ];\n }\n }\n const url = firstUrl(tab.items);\n if (!url) {\n continue;\n }\n navLinks.push({\n text: tab.title,\n url,\n ...(tab.icon ? { icon: tab.icon } : {}),\n ...(match ? { match } : {}),\n });\n }\n await writeFile(\n path.join(options.contentDir, 'nav.json'),\n `${JSON.stringify(navLinks, null, 2)}\\n`,\n );\n\n // Page URL -> HTTP method, for the sidebar method badges; and page URL ->\n // the operation's source file, for the Markdown route.\n const methodsByUrl: Record<string, string> = {};\n const sourcesByUrl: Record<string, { file: string; method: string; route: string }> = {};\n for (const page of plan.apiPages) {\n const placement = placements.get(`${page.method.toUpperCase()} ${page.apiPath}`);\n if (placement) {\n const url = `${baseUrl}/${placement.dir}/${placement.slug}`;\n methodsByUrl[url] = page.method.toUpperCase();\n sourcesByUrl[url] = {\n file: page.file,\n method: page.method.toUpperCase(),\n route: page.apiPath,\n };\n }\n }\n // A renamed page leaves a forwarding address. The previous run's\n // api-sources.json keys each operation's old URL; where the same operation\n // (METHOD route) now lives at a new URL, redirects.json gains old -> new.\n // Existing entries are re-pointed through renames and dropped when their\n // old URL is a live page again.\n const sourcesPath = path.join(options.contentDir, 'api-sources.json');\n const redirectsPath = path.join(options.contentDir, 'redirects.json');\n const previousSources =\n await readJson<Record<string, { method: string; route: string }>>(sourcesPath);\n const redirects = (await readJson<Record<string, string>>(redirectsPath)) ?? {};\n if (previousSources) {\n const urlByOperation = new Map(\n Object.entries(sourcesByUrl).map(([url, s]) => [`${s.method} ${s.route}`, url]),\n );\n for (const [oldUrl, source] of Object.entries(previousSources)) {\n const newUrl = urlByOperation.get(`${source.method} ${source.route}`);\n if (newUrl !== undefined && newUrl !== oldUrl) {\n redirects[oldUrl] = newUrl;\n }\n }\n }\n // Each entry points at a live page: chains are chased to their end, cycles\n // and entries whose old URL is a live page again are dropped. A destination\n // the generator cannot see — a doc page, or a hand-added legacy redirect's\n // target — is terminal and kept: the generator only owns API-page renames,\n // and pruning what it cannot verify would silently wipe the site's own\n // redirect table on every run.\n const finalDestination = (from: string): string | null => {\n const seen = new Set([from]);\n let current = redirects[from];\n while (current !== undefined && !(current in sourcesByUrl) && current in redirects) {\n if (seen.has(current)) {\n return null;\n }\n seen.add(current);\n current = redirects[current];\n }\n return current ?? null;\n };\n const liveRedirects: Record<string, string> = {};\n for (const oldUrl of Object.keys(redirects)) {\n if (oldUrl in sourcesByUrl) {\n continue;\n }\n const destination = finalDestination(oldUrl);\n if (destination !== null && destination !== oldUrl) {\n liveRedirects[oldUrl] = destination;\n }\n }\n\n await writeFile(\n path.join(options.contentDir, 'api-methods.json'),\n `${JSON.stringify(methodsByUrl, null, 2)}\\n`,\n );\n await writeFile(sourcesPath, `${JSON.stringify(sourcesByUrl, null, 2)}\\n`);\n await writeFile(redirectsPath, `${JSON.stringify(liveRedirects, null, 2)}\\n`);\n\n return {\n pages,\n metas: metas.length,\n navLinks,\n methodsByUrl,\n sourcesByUrl,\n redirects: liveRedirects,\n document,\n };\n}\n\n/** A JSON file's parsed contents, or null when it does not exist or parse. */\nasync function readJson<T>(file: string): Promise<T | null> {\n try {\n return JSON.parse(await readFile(file, 'utf8')) as T;\n } catch {\n return null;\n }\n}\n"]}
@@ -98,6 +98,53 @@ var GLYPHS = {
98
98
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "9" }),
99
99
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 7v5l3 2" })
100
100
  ] }),
101
+ /** A clock with a counter-clockwise arrow — a changelog, a history. */
102
+ history: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
103
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8" }),
104
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 3v5h5" }),
105
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 7v5l4 2" })
106
+ ] }),
107
+ bell: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
108
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9" }),
109
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M10.3 21a1.94 1.94 0 0 0 3.4 0" })
110
+ ] }),
111
+ /** A paper plane — send, deliver. */
112
+ send: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
113
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m22 2-7 20-4-9-9-4Z" }),
114
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M22 2 11 13" })
115
+ ] }),
116
+ idCard: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
117
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "2", y: "5", width: "20", height: "14", rx: "2" }),
118
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "9", cy: "11", r: "2" }),
119
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6.17 15a3 3 0 0 1 5.66 0" }),
120
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 10h2M16 14h2" })
121
+ ] }),
122
+ coins: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
123
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "8", cy: "8", r: "6" }),
124
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M18.09 10.37A6 6 0 1 1 10.34 18" }),
125
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7 6h1v4" }),
126
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m16.71 13.88.7.71-2.82 2.82" })
127
+ ] }),
128
+ handshake: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
129
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m11 17 2 2a1 1 0 1 0 3-3" }),
130
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m14 14 2.5 2.5a1 1 0 1 0 3-3l-3.88-3.88a3 3 0 0 0-4.24 0l-.88.88a1 1 0 1 1-3-3l2.81-2.81a5.79 5.79 0 0 1 7.06-.87l.47.28a2 2 0 0 0 1.42.25L21 4" }),
131
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m21 3 1 11h-2" }),
132
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 3 2 14l6.5 6.5a1 1 0 1 0 3-3" }),
133
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 4h8" })
134
+ ] }),
135
+ shieldCheck: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
136
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1 1 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z" }),
137
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m9 12 2 2 4-4" })
138
+ ] }),
139
+ banknote: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
140
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "2", y: "6", width: "20", height: "12", rx: "2" }),
141
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "2" }),
142
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6 12h.01M18 12h.01" })
143
+ ] }),
144
+ circlePlay: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
145
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }),
146
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m10 8 6 4-6 4z" })
147
+ ] }),
101
148
  /** A circled `i` — an informational note, and the generic error state. */
102
149
  info: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
103
150
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ui/clipboard.ts","../../src/ui/icons.tsx","../../src/ui/api-try-it.tsx"],"names":["jsxs","Fragment","jsx","useEffect","useState","useRef","createPortal"],"mappings":"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","file":"api-try-it.cjs","sourcesContent":["/**\n * Clipboard copying for the framework's client components — internal.\n *\n * The Clipboard API is the right way to copy, and it is not always available:\n * an insecure origin, an embedded frame with no permission, or an older browser\n * leaves `navigator.clipboard` missing or its promise rejected. Every copy\n * control in the framework therefore needs the same two-step attempt, so the\n * attempt lives here once instead of in each control.\n *\n * @packageDocumentation\n */\n\n/**\n * Copy through a hidden textarea and `document.execCommand`. The fallback, for\n * the contexts the Clipboard API refuses.\n */\nfunction legacyCopy(text: string): boolean {\n try {\n const area = document.createElement('textarea');\n area.value = text;\n area.style.position = 'fixed';\n area.style.opacity = '0';\n document.body.appendChild(area);\n area.select();\n // eslint-disable-next-line @typescript-eslint/no-deprecated -- clipboard fallback\n const ok = document.execCommand('copy');\n document.body.removeChild(area);\n return ok;\n } catch {\n return false;\n }\n}\n\n/**\n * Copy text to the clipboard.\n *\n * Tries the Clipboard API, then the hidden-textarea fallback. It never throws:\n * a caller flashes \"Copied\" on `true` and leaves its label alone on `false`.\n *\n * @param text - the text to copy\n * @returns whether the text reached the clipboard\n */\nexport async function copyToClipboard(text: string): Promise<boolean> {\n // TypeScript types `navigator.clipboard` as always present; a browser on an\n // insecure origin disagrees, so treat it as optional.\n const clip = navigator.clipboard as Clipboard | undefined;\n if (typeof clip?.writeText === 'function') {\n try {\n await clip.writeText(text);\n return true;\n } catch {\n // Denied or unavailable; fall through to the legacy path.\n }\n }\n return legacyCopy(text);\n}\n","import type { ReactNode } from 'react';\n\n/**\n * The framework's inline-SVG glyph set — internal.\n *\n * Five UI modules drew their own icons, and four glyphs were drawn twice: the\n * house on the error screen and in the sidebar icon map, the padlock on the\n * sign-in and the `403` screen, the info circle on both of those, the key in\n * both places again, and the check mark in the copy-page button and the\n * playground. One drawing per glyph now lives here.\n *\n * Nothing is exported from the package: the modules below compose these paths,\n * and `docsIcon` remains the only public icon surface. Zero dependencies — the\n * paths are Lucide-shaped, on the same 24×24 grid, so any glyph works at any\n * size.\n *\n * @packageDocumentation\n */\n\n/**\n * The glyph paths, keyed by name. Each value is the *inside* of an `<svg>`, so\n * a caller decides the size, the stroke, and the class.\n */\nconst GLYPHS = {\n house: (\n <>\n <path d=\"m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\" />\n <path d=\"M9 22V12h6v10\" />\n </>\n ),\n book: <path d=\"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1 0-5H20\" />,\n code: (\n <>\n <path d=\"m16 18 6-6-6-6\" />\n <path d=\"m8 6-6 6 6 6\" />\n </>\n ),\n rocket: (\n <>\n <path d=\"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91 0z\" />\n <path d=\"m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z\" />\n <path d=\"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0\" />\n <path d=\"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5\" />\n </>\n ),\n terminal: (\n <>\n <path d=\"m4 17 6-6-6-6\" />\n <path d=\"M12 19h8\" />\n </>\n ),\n wallet: (\n <>\n <path d=\"M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1\" />\n <path d=\"M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4\" />\n </>\n ),\n key: (\n <>\n <path d=\"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4\" />\n <path d=\"m21 2-9.6 9.6\" />\n <circle cx=\"7.5\" cy=\"15.5\" r=\"5.5\" />\n </>\n ),\n webhook: (\n <>\n <path d=\"M18 16.98h-5.99c-1.1 0-1.95.94-2.48 1.9A4 4 0 0 1 2 17c.01-.7.2-1.4.57-2\" />\n <path d=\"m6 17 3.13-5.78c.53-.97.1-2.18-.5-3.1a4 4 0 1 1 6.89-4.06\" />\n <path d=\"m12 6 3.13 5.73C15.66 12.7 16.9 13 18 13a4 4 0 0 1 0 8\" />\n </>\n ),\n globe: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\" />\n <path d=\"M2 12h20\" />\n </>\n ),\n mail: (\n <>\n <rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\" />\n <path d=\"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7\" />\n </>\n ),\n user: (\n <>\n <circle cx=\"12\" cy=\"8\" r=\"4\" />\n <path d=\"M4 21a8 8 0 0 1 16 0\" />\n </>\n ),\n lock: (\n <>\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" />\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\n </>\n ),\n users: (\n <>\n <circle cx=\"9\" cy=\"7\" r=\"4\" />\n <path d=\"M2 21a7 7 0 0 1 14 0\" />\n <path d=\"M16 3.5a4 4 0 0 1 0 7\" />\n <path d=\"M17.5 14.5a7 7 0 0 1 4.5 6.5\" />\n </>\n ),\n building: (\n <>\n <rect x=\"4\" y=\"2\" width=\"16\" height=\"20\" rx=\"2\" />\n <path d=\"M9 22v-4h6v4\" />\n <path d=\"M8 6h.01M12 6h.01M16 6h.01M8 10h.01M12 10h.01M16 10h.01M8 14h.01M12 14h.01M16 14h.01\" />\n </>\n ),\n clock: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"M12 7v5l3 2\" />\n </>\n ),\n /** A circled `i` — an informational note, and the generic error state. */\n info: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 8v4M12 16h.01\" strokeLinecap=\"round\" />\n </>\n ),\n /** A warning triangle — a caution, and the `500` screen. */\n alert: (\n <>\n <path d=\"M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <path d=\"M12 9v4M12 17h.01\" strokeLinecap=\"round\" />\n </>\n ),\n /** A light bulb — a tip. */\n bulb: (\n <path d=\"M9 18h6M10 22h4M12 2a7 7 0 0 0-4 12.7c.6.5 1 1.3 1 2.1V17h6v-.2c0-.8.4-1.6 1-2.1A7 7 0 0 0 12 2Z\" />\n ),\n /** A circle with a cross — the `404` screen. */\n crossCircle: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"m14.31 8-1.31 2.4M9.69 8l4.62 8M14.31 16 9.69 8\" strokeLinecap=\"round\" />\n </>\n ),\n /** Struck-through signal bars — the offline screen. */\n offline: (\n <>\n <path d=\"M5 12.55a11 11 0 0 1 14 0M8.5 16.11a6 6 0 0 1 7 0M12 20h.01\" strokeLinecap=\"round\" />\n <path d=\"m2 2 20 20\" strokeLinecap=\"round\" />\n </>\n ),\n copy: (\n <path d=\"M9 9h9a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2v-9a2 2 0 0 1 2-2ZM5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n ),\n check: <path d=\"M20 6 9 17l-5-5\" />,\n chevronDown: <path d=\"m6 9 6 6 6-6\" />,\n /** Stacked chevrons — a value this control switches between. */\n chevronUpDown: <path d=\"m7 15 5 5 5-5M7 9l5-5 5 5\" />,\n /** An open arc — one turn of a loading spinner. */\n spinner: <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" strokeLinecap=\"round\" />,\n markdown: (\n <>\n <rect x=\"2\" y=\"5\" width=\"20\" height=\"14\" rx=\"2\" />\n <path d=\"M6 15V9l3 3 3-3v6M17 9v4m0 0 2-2m-2 2-2-2\" />\n </>\n ),\n} satisfies Record<string, ReactNode>;\n\n/** A glyph in {@link GLYPHS}. */\nexport type GlyphName = keyof typeof GLYPHS;\n\n/**\n * How one icon is drawn. Every field is optional, and the defaults match the\n * house style: 24×24 grid, current colour, hidden from assistive technology.\n */\nexport interface IconOptions {\n /**\n * React key for the `<svg>`. Set it when a host may place the icon in an\n * array of children — fumadocs renders a sidebar link as `[icon, text]`, and\n * an unkeyed element there raises React's \"unique key\" warning in the\n * consuming site's console.\n */\n readonly key?: string;\n /** Pixel size for `width` and `height`. Omit to let CSS size the icon. */\n readonly size?: number;\n /** Stroke width. Default 2. */\n readonly strokeWidth?: number;\n /** Round the stroke's ends and joins. Default `false`. */\n readonly rounded?: boolean;\n /** Class for the `<svg>`, e.g. a spin animation. */\n readonly className?: string;\n}\n\n/**\n * Draw a stroked glyph.\n *\n * @param name - the glyph\n * @param options - size, stroke, and class\n * @returns the `<svg>` element\n */\nexport function strokeIcon(name: GlyphName, options: IconOptions = {}): ReactNode {\n return (\n <svg\n key={options.key}\n {...(options.className === undefined ? {} : { className: options.className })}\n {...(options.size === undefined ? {} : { width: options.size, height: options.size })}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={options.strokeWidth ?? 2}\n {...(options.rounded ? { strokeLinecap: 'round', strokeLinejoin: 'round' } : {})}\n aria-hidden=\"true\"\n >\n {GLYPHS[name]}\n </svg>\n );\n}\n\n/**\n * Draw a filled glyph. Used by the solid play triangle, where a stroke would\n * read as an outline.\n *\n * @param path - the path data\n * @param options - size and class\n * @returns the `<svg>` element\n */\nexport function filledIcon(path: string, options: IconOptions = {}): ReactNode {\n return (\n <svg\n key={options.key}\n {...(options.className === undefined ? {} : { className: options.className })}\n {...(options.size === undefined ? {} : { width: options.size, height: options.size })}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d={path} />\n </svg>\n );\n}\n\n/** A solid right-pointing triangle: run this request. */\nexport const PLAY_PATH = 'M8 5v14l11-7z';\n","'use client';\n\nimport {\n useEffect,\n useRef,\n useState,\n type KeyboardEvent as ReactKeyboardEvent,\n type MouseEvent,\n type ReactNode,\n type RefObject,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { copyToClipboard } from './clipboard.js';\nimport { PLAY_PATH, filledIcon, strokeIcon } from './icons.js';\n\n/**\n * The Mintlify-style try-it surface: a compact endpoint bar with a \"Try it\"\n * button, opening the API playground in a two-column modal — the form on the\n * left, the live code sample and response on the right. The form is passed as\n * `children` (the site renders fumadocs' PlaygroundClient) and the right column\n * arrives as `example`, injected by `apiOperationLayout`, so this module needs\n * no fumadocs dependency. Styled by `styles/api-reference.css`.\n *\n * @packageDocumentation\n */\n\n/**\n * One selectable API server. `url` is optional so fumadocs' own server list\n * (whose OpenAPI type declares `url` optional) passes straight through; an\n * entry without a URL is not selectable and is skipped.\n *\n * @public\n */\nexport interface ApiServerOption {\n readonly url?: string;\n readonly description?: string;\n}\n\n/**\n * Props for {@link ApiTryIt}.\n *\n * @public\n */\nexport interface ApiTryItProps {\n /** HTTP method, e.g. `post`. */\n readonly method: string;\n /** Operation route, e.g. `/api/user/login`. */\n readonly path: string;\n /** First server URL, shown muted before the path. */\n readonly serverUrl?: string;\n /**\n * The selectable servers. With two or more — and {@link onSelectServer} —\n * the request bar's URL opens a small inline menu instead of the playground's\n * server dialog.\n */\n readonly servers?: readonly ApiServerOption[];\n /** Switch the active server. Receives the chosen server's URL. */\n readonly onSelectServer?: (url: string) => void;\n /** The playground form (fumadocs' PlaygroundClient), shown in the modal. */\n readonly children: ReactNode;\n /** Code sample + response column, injected by the operation layout. */\n readonly example?: ReactNode;\n}\n\nfunction chevronUpDownIcon(): ReactNode {\n return strokeIcon('chevronUpDown', { rounded: true });\n}\n\nfunction playIcon(): ReactNode {\n return filledIcon(PLAY_PATH);\n}\n\nfunction spinnerIcon(): ReactNode {\n return strokeIcon('spinner', { strokeWidth: 2.5, className: 'api-tryit-spin' });\n}\n\nfunction copyIcon(): ReactNode {\n return strokeIcon('copy');\n}\n\nfunction checkIcon(): ReactNode {\n return strokeIcon('check', { strokeWidth: 2.5, rounded: true });\n}\n\n/* --- Enum value menus --------------------------------------------------- */\n\n/**\n * The enum (\"Value in\") chips on the schema are rendered by fumadocs, so their\n * open state cannot live in React. One delegated listener per document drives\n * them all: clicking a chip toggles it, clicking among its values leaves it\n * open so they can be selected and copied, and clicking away or pressing\n * Escape closes.\n */\nconst ENUM_CARD =\n 'div[class*=\"prose-no-margin\"] > div[class*=\"mt-2\"][class*=\"flex-row\"] >' +\n ' div[class*=\"flex-col\"][class*=\"bg-fd-secondary\"]';\n\nlet enumMenuUsers = 0;\nlet detachEnumMenus: (() => void) | null = null;\n\nfunction installEnumMenus(): void {\n const closeAll = (except?: Element | null) => {\n document.querySelectorAll(`${ENUM_CARD}[data-open]`).forEach((card) => {\n if (card !== except) {\n card.removeAttribute('data-open');\n }\n });\n };\n\n const onClick = (event: globalThis.MouseEvent) => {\n const target = event.target as Element | null;\n const card = target?.closest<HTMLElement>(ENUM_CARD) ?? null;\n // A click among the values must not close the menu — that is how a reader\n // selects and copies them.\n if (card && target?.closest('ul') && card.hasAttribute('data-open')) {\n return;\n }\n closeAll(card);\n card?.toggleAttribute('data-open');\n };\n\n const onKey = (event: globalThis.KeyboardEvent) => {\n if (event.key === 'Escape') {\n closeAll();\n }\n };\n\n document.addEventListener('click', onClick);\n document.addEventListener('keydown', onKey);\n detachEnumMenus = () => {\n document.removeEventListener('click', onClick);\n document.removeEventListener('keydown', onKey);\n closeAll();\n };\n}\n\n/** Drive the schema's enum menus while an operation is on the page. */\nfunction useEnumMenus(): void {\n useEffect(() => {\n enumMenuUsers += 1;\n if (enumMenuUsers === 1) {\n installEnumMenus();\n }\n return () => {\n enumMenuUsers -= 1;\n if (enumMenuUsers === 0) {\n detachEnumMenus?.();\n detachEnumMenus = null;\n }\n };\n }, []);\n}\n\n/** Render a path as bold segments separated by muted slashes. */\nfunction pathSegments(path: string): ReactNode {\n const parts = path.split('/').filter(Boolean);\n return parts.map((part, index) => (\n <span key={`${String(index)}-${part}`} className=\"api-tryit-seg\">\n <span className=\"api-tryit-slash\">/</span>\n {part}\n </span>\n ));\n}\n\n/**\n * The one-line request bar: a method badge, the live base URL with an\n * environment-selector chevron, and the endpoint path — reading as one URL —\n * with a Send button outside the bar.\n *\n * The base URL, the environment selector, and Send are owned by fumadocs'\n * hidden form (so the URL stays live and Send runs the real request); this bar\n * mirrors the URL via an observer and forwards clicks to those controls.\n */\nfunction RequestBar({\n method,\n path,\n serverUrl,\n servers,\n onSelectServer,\n formRef,\n}: {\n readonly method: string;\n readonly path: string;\n readonly serverUrl: string | undefined;\n readonly servers: readonly ApiServerOption[] | undefined;\n readonly onSelectServer: ((url: string) => void) | undefined;\n readonly formRef: RefObject<HTMLDivElement | null>;\n}) {\n const [baseUrl, setBaseUrl] = useState((serverUrl ?? '').replace(/\\/$/, ''));\n const [copied, setCopied] = useState(false);\n const [loading, setLoading] = useState(false);\n const [menuOpen, setMenuOpen] = useState(false);\n const [menuAt, setMenuAt] = useState<{ top: number; left: number } | null>(null);\n const envRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLUListElement>(null);\n\n // The site can hand over the server list and a setter; without them the bar\n // falls back to the playground's own server dialog. An entry without a URL\n // cannot be selected, so it does not make a menu.\n const selectable = (servers ?? []).filter(\n (option): option is ApiServerOption & { readonly url: string } =>\n typeof option.url === 'string' && option.url !== '',\n );\n const inline =\n onSelectServer && selectable.length > 1 ? { list: selectable, select: onSelectServer } : null;\n\n // Dismiss the menu on an outside click or Escape.\n useEffect(() => {\n if (!menuOpen) {\n return;\n }\n const onDown = (event: globalThis.MouseEvent) => {\n const target = event.target as Node;\n if (!envRef.current?.contains(target) && !menuRef.current?.contains(target)) {\n setMenuOpen(false);\n }\n };\n const onKey = (event: globalThis.KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.stopPropagation();\n setMenuOpen(false);\n }\n };\n document.addEventListener('mousedown', onDown);\n document.addEventListener('keydown', onKey, true);\n return () => {\n document.removeEventListener('mousedown', onDown);\n document.removeEventListener('keydown', onKey, true);\n };\n }, [menuOpen]);\n\n // Mirror fumadocs' hidden controls into the bar: the live server URL (it\n // changes when the environment is switched, and lives in the trigger's\n // <code>), and Send's loading state (fumadocs disables its Send button while\n // the request is in flight).\n useEffect(() => {\n const root = formRef.current;\n if (!root) {\n return;\n }\n const read = () => {\n const text = root.querySelector('form > button code')?.textContent?.trim();\n if (text) {\n setBaseUrl(text.replace(/\\/$/, ''));\n }\n const send = root.querySelector('form > div > button');\n setLoading(send?.hasAttribute('disabled') ?? false);\n };\n read();\n const observer = new MutationObserver(read);\n observer.observe(root, {\n subtree: true,\n childList: true,\n characterData: true,\n attributes: true,\n attributeFilter: ['disabled'],\n });\n return () => {\n observer.disconnect();\n };\n }, [formRef]);\n\n const clickHidden = (selector: string) => {\n const el = formRef.current?.querySelector<HTMLElement>(selector);\n el?.click();\n };\n\n const fullUrl = `${baseUrl}/${path.replace(/^\\/+/, '')}`;\n const copyUrl = () => {\n const flash = () => {\n setCopied(true);\n setTimeout(() => {\n setCopied(false);\n }, 1600);\n };\n void copyToClipboard(fullUrl).then((ok) => {\n if (ok) {\n flash();\n }\n });\n };\n\n return (\n <div className=\"api-tryit-reqline not-prose\">\n <div className=\"api-tryit-reqbar\">\n <span className=\"api-tryit-reqmethod\" data-method={method.toLowerCase()}>\n {method.toUpperCase()}\n </span>\n <div className=\"api-tryit-reqscroll\">\n <div className=\"api-tryit-envwrap\">\n <button\n type=\"button\"\n ref={envRef}\n className=\"api-tryit-env\"\n aria-label=\"Change server\"\n aria-haspopup={inline ? 'listbox' : 'dialog'}\n aria-expanded={inline ? menuOpen : undefined}\n onClick={() => {\n if (inline) {\n const rect = envRef.current?.getBoundingClientRect();\n if (rect) {\n setMenuAt({ top: rect.bottom + 7, left: rect.left - 8 });\n }\n setMenuOpen((prev) => !prev);\n } else {\n clickHidden('form > button');\n }\n }}\n >\n <span className=\"api-tryit-baseurl\">{baseUrl}</span>\n {chevronUpDownIcon()}\n </button>\n {inline && menuOpen && menuAt\n ? createPortal(\n <ul\n ref={menuRef}\n className=\"api-tryit-envmenu\"\n role=\"listbox\"\n aria-label=\"API server\"\n style={{ top: menuAt.top, left: menuAt.left }}\n >\n {inline.list.map((option) => {\n const active = option.url.replace(/\\/$/, '') === baseUrl;\n return (\n <li key={option.url}>\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={active}\n className=\"api-tryit-envitem\"\n data-active={active ? '' : undefined}\n onClick={() => {\n inline.select(option.url);\n setMenuOpen(false);\n }}\n >\n <span className=\"api-tryit-envcheck\">\n {active ? checkIcon() : null}\n </span>\n <span className=\"api-tryit-envurl\">{option.url}</span>\n </button>\n </li>\n );\n })}\n </ul>,\n document.body,\n )\n : null}\n </div>\n <span className=\"api-tryit-reqpath\">{pathSegments(path)}</span>\n </div>\n <button\n type=\"button\"\n className=\"api-tryit-copy\"\n aria-label={copied ? 'Copied' : 'Copy URL'}\n data-copied={copied ? '' : undefined}\n onClick={copyUrl}\n >\n {copied ? checkIcon() : copyIcon()}\n </button>\n </div>\n <button\n type=\"button\"\n className=\"api-tryit-send\"\n data-loading={loading ? '' : undefined}\n disabled={loading}\n onClick={() => {\n clickHidden('form > div > button');\n }}\n >\n {loading ? 'Sending' : 'Send'}\n {loading ? spinnerIcon() : playIcon()}\n </button>\n </div>\n );\n}\n\n/**\n * Compact endpoint bar + two-column modal playground.\n *\n * @param props - method, path, optional server URL, the form, and the example column\n * @public\n */\nexport function ApiTryIt({\n method,\n path,\n serverUrl,\n servers,\n onSelectServer,\n children,\n example,\n}: ApiTryItProps) {\n const [open, setOpen] = useState(false);\n const [mounted, setMounted] = useState(false);\n const formRef = useRef<HTMLDivElement>(null);\n\n // Click-to-open menus for the schema's enum chips on this page.\n useEnumMenus();\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n useEffect(() => {\n if (!open) {\n return;\n }\n const onKey = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n setOpen(false);\n }\n };\n document.addEventListener('keydown', onKey);\n document.body.style.overflow = 'hidden';\n // Marks the modal open so the stylesheet can lift fumadocs' Base UI popups\n // (select, dialog, popover) above the modal — they portal to <body> at a low\n // z-index and would otherwise open behind it.\n document.body.classList.add('api-tryit-open');\n return () => {\n document.removeEventListener('keydown', onKey);\n document.body.style.overflow = '';\n document.body.classList.remove('api-tryit-open');\n };\n }, [open]);\n\n const host = serverUrl ? serverUrl.replace(/^https?:\\/\\//, '').replace(/\\/$/, '') : null;\n\n const onBackdrop = (event: MouseEvent<HTMLDivElement>) => {\n if (event.target === event.currentTarget) {\n setOpen(false);\n }\n };\n\n return (\n <>\n <div className=\"api-tryit-bar not-prose\">\n <span className=\"api-tryit-method\" data-method={method.toLowerCase()}>\n {method.toUpperCase()}\n </span>\n <span className=\"api-tryit-url\">\n {host ? <span className=\"api-tryit-host\">{host}</span> : null}\n <span className=\"api-tryit-path\">{path}</span>\n </span>\n <button\n type=\"button\"\n className=\"api-tryit-btn\"\n onClick={() => {\n setOpen(true);\n }}\n >\n Try it\n {filledIcon(PLAY_PATH, { size: 11 })}\n </button>\n </div>\n {mounted && open\n ? createPortal(\n <div className=\"api-tryit-overlay\" onClick={onBackdrop}>\n <div\n className=\"api-tryit-modal\"\n data-columns={example ? '2' : '1'}\n role=\"dialog\"\n aria-label=\"API playground\"\n >\n {/* No close button: clicking the backdrop or pressing Escape\n closes the playground. */}\n <div className=\"api-tryit-form\" ref={formRef}>\n <RequestBar\n method={method}\n path={path}\n serverUrl={serverUrl}\n servers={servers}\n onSelectServer={onSelectServer}\n formRef={formRef}\n />\n <div className=\"api-tryit-scroll\">{children}</div>\n </div>\n {example ? <div className=\"api-tryit-example\">{example}</div> : null}\n </div>\n </div>,\n document.body,\n )\n : null}\n </>\n );\n}\n\n// Marker the operation layout checks before injecting the `example` prop, so it\n// never leaks onto a plain <form> element when a site uses its own playground.\nApiTryIt.acceptsExample = true;\n\n/* --- The JSON body editor ------------------------------------------------ */\n\n/** One highlighted run of the source. */\ninterface JsonToken {\n readonly text: string;\n readonly kind?: 'key' | 'string' | 'number' | 'literal' | 'punctuation';\n}\n\n/**\n * Split JSON into highlight runs. Strings are matched first, so a `true` or a\n * brace inside a string is never mistaken for a literal or punctuation; a string\n * followed by a colon is a key.\n */\nfunction tokenizeJson(source: string): JsonToken[] {\n const pattern =\n /(\"(?:\\\\.|[^\"\\\\])*\")(\\s*:)?|(-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)|\\b(true|false|null)\\b|([{}[\\],:])/g;\n const tokens: JsonToken[] = [];\n let last = 0;\n let match: RegExpExecArray | null;\n\n while ((match = pattern.exec(source)) !== null) {\n if (match.index > last) {\n tokens.push({ text: source.slice(last, match.index) });\n }\n if (match[1] !== undefined) {\n if (match[2] !== undefined) {\n tokens.push({ text: match[1], kind: 'key' });\n tokens.push({ text: match[2], kind: 'punctuation' });\n } else {\n tokens.push({ text: match[1], kind: 'string' });\n }\n } else if (match[3] !== undefined) {\n tokens.push({ text: match[3], kind: 'number' });\n } else if (match[4] !== undefined) {\n tokens.push({ text: match[4], kind: 'literal' });\n } else if (match[5] !== undefined) {\n tokens.push({ text: match[5], kind: 'punctuation' });\n }\n last = pattern.lastIndex;\n }\n if (last < source.length) {\n tokens.push({ text: source.slice(last) });\n }\n return tokens;\n}\n\n/**\n * Write to a React-controlled textarea so its onChange still fires. Assigning\n * `.value` directly is swallowed by React's synthetic-event layer, so the write\n * goes through the native setter and is announced with an `input` event.\n */\nfunction setReactTextareaValue(el: HTMLTextAreaElement, next: string): void {\n const descriptor = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n // eslint-disable-next-line @typescript-eslint/unbound-method -- bound via .call below\n const setter = descriptor?.set;\n setter?.call(el, next);\n el.dispatchEvent(new Event('input', { bubbles: true }));\n}\n\n/**\n * The JSON body editor.\n *\n * Fumadocs renders the raw-JSON body as a plain textarea: no highlighting, no\n * formatting, and a validation error shown only as a bare line of text. This\n * replaces the *presentation* while leaving fumadocs' own textarea mounted and\n * authoritative — every edit is written back to it, so its parser and the form\n * engine stay in charge of the request. Highlighting is a mirror element behind\n * a transparent-text textarea; the mirror also sizes the editor, so it grows\n * with its content instead of holding a fixed empty box.\n */\nfunction JsonBodyEditor({ sectionRef }: { readonly sectionRef: RefObject<HTMLElement | null> }) {\n const sourceRef = useRef<HTMLTextAreaElement | null>(null);\n const [value, setValue] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [copied, setCopied] = useState(false);\n\n // Track fumadocs' textarea: it mounts when JSON mode opens and unmounts when\n // the reader switches back to the field inputs.\n useEffect(() => {\n const root = sectionRef.current;\n if (!root) {\n return;\n }\n const read = () => {\n const el = root.querySelector<HTMLTextAreaElement>('textarea:not(.api-json-input)');\n sourceRef.current = el;\n setValue(el ? el.value : null);\n };\n read();\n const observer = new MutationObserver(read);\n observer.observe(root, { subtree: true, childList: true });\n return () => {\n observer.disconnect();\n };\n }, [sectionRef]);\n\n if (value === null) {\n return null;\n }\n\n const push = (next: string) => {\n setValue(next);\n try {\n JSON.parse(next);\n setError(null);\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : 'Invalid JSON.');\n }\n if (sourceRef.current) {\n setReactTextareaValue(sourceRef.current, next);\n }\n };\n\n const format = () => {\n try {\n push(JSON.stringify(JSON.parse(value), null, 2));\n } catch {\n /* Leave invalid JSON as typed; the error bar already explains why. */\n }\n };\n\n const copy = () => {\n const flash = () => {\n setCopied(true);\n setTimeout(() => {\n setCopied(false);\n }, 1600);\n };\n void copyToClipboard(value).then((ok) => {\n if (ok) {\n flash();\n }\n });\n };\n\n // Tab indents instead of leaving the field, as in any code editor.\n const onKeyDown = (event: ReactKeyboardEvent<HTMLTextAreaElement>) => {\n if (event.key !== 'Tab') {\n return;\n }\n event.preventDefault();\n const el = event.currentTarget;\n const { selectionStart: start, selectionEnd: end } = el;\n const next = `${value.slice(0, start)} ${value.slice(end)}`;\n push(next);\n requestAnimationFrame(() => {\n el.selectionStart = el.selectionEnd = start + 2;\n });\n };\n\n return (\n <div className=\"api-json\" data-invalid={error ? '' : undefined}>\n <div className=\"api-json-toolbar\">\n <button\n type=\"button\"\n className=\"api-json-action\"\n onClick={format}\n disabled={error !== null}\n >\n Format\n </button>\n <button type=\"button\" className=\"api-json-action\" onClick={copy}>\n {copied ? 'Copied' : 'Copy'}\n </button>\n </div>\n <div className=\"api-json-editor\">\n {/* The mirror paints the highlighting and sets the editor's height. */}\n <pre className=\"api-json-mirror\" aria-hidden=\"true\">\n {tokenizeJson(value).map((token, index) => (\n <span key={`${String(index)}-${token.kind ?? 'plain'}`} data-token={token.kind}>\n {token.text}\n </span>\n ))}\n {'\\n'}\n </pre>\n <textarea\n className=\"api-json-input\"\n value={value}\n spellCheck={false}\n aria-label=\"Request body JSON\"\n onChange={(event) => {\n push(event.target.value);\n }}\n onKeyDown={onKeyDown}\n />\n </div>\n {error ? (\n <p className=\"api-json-error\" role=\"alert\">\n {error}\n </p>\n ) : null}\n </div>\n );\n}\n\n/**\n * An always-open playground section — pass it as the playground's\n * `CollapsiblePanel` so Authorization and Body render as visible cards, as\n * Mintlify does, instead of collapsed rows.\n *\n * @param props - the section title and its fields\n * @public\n */\nexport function ApiPlaygroundSection({\n title,\n type,\n children,\n}: {\n readonly title?: ReactNode;\n /**\n * Which panel this is (`body`, `authorization`, `query`, …) — fumadocs passes\n * it to the playground's `CollapsiblePanel` as `data-type`. Rendered onto the\n * section so styling can target one panel precisely instead of guessing from\n * the utility classes its buttons happen to share.\n */\n readonly type?: string;\n readonly children?: ReactNode;\n}) {\n const sectionRef = useRef<HTMLElement>(null);\n return (\n <section className=\"api-tryit-section\" data-type={type} ref={sectionRef}>\n {title ? <h4 className=\"api-tryit-section-title\">{title}</h4> : null}\n {children}\n {/* Renders only while the body panel's raw-JSON editor is open. */}\n {type === 'body' ? <JsonBodyEditor sectionRef={sectionRef} /> : null}\n </section>\n );\n}\n"]}
1
+ {"version":3,"sources":["../../src/ui/clipboard.ts","../../src/ui/icons.tsx","../../src/ui/api-try-it.tsx"],"names":["jsxs","Fragment","jsx","useEffect","useState","useRef","createPortal"],"mappings":";;;;;;;AAgBA,SAAS,WAAW,IAAA,EAAuB;AACzC,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,aAAA,CAAc,UAAU,CAAA;AAC9C,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AACb,IAAA,IAAA,CAAK,MAAM,QAAA,GAAW,OAAA;AACtB,IAAA,IAAA,CAAK,MAAM,OAAA,GAAU,GAAA;AACrB,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,IAAI,CAAA;AAC9B,IAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,IAAA,MAAM,EAAA,GAAK,QAAA,CAAS,WAAA,CAAY,MAAM,CAAA;AACtC,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,IAAI,CAAA;AAC9B,IAAA,OAAO,EAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAWA,eAAsB,gBAAgB,IAAA,EAAgC;AAGpE,EAAA,MAAM,OAAO,SAAA,CAAU,SAAA;AACvB,EAAA,IAAI,OAAO,IAAA,EAAM,SAAA,KAAc,UAAA,EAAY;AACzC,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,UAAU,IAAI,CAAA;AACzB,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACA,EAAA,OAAO,WAAW,IAAI,CAAA;AACxB;AChCA,IAAM,MAAA,GAAS;AAAA,EACb,uBACEA,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,GAAE,gDAAA,EAAiD,CAAA;AAAA,oBACzDA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,eAAA,EAAgB;AAAA,GAAA,EAC1B,CAAA;AAAA,EAEF,IAAA,kBAAMA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,gEAAA,EAAiE,CAAA;AAAA,EAC/E,sBACEF,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,GAAE,gBAAA,EAAiB,CAAA;AAAA,oBACzBA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,cAAA,EAAe;AAAA,GAAA,EACzB,CAAA;AAAA,EAEF,wBACEF,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,GAAE,yFAAA,EAA0F,CAAA;AAAA,oBAClGA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,iGAAA,EAAkG,CAAA;AAAA,oBAC1GA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,wCAAA,EAAyC,CAAA;AAAA,oBACjDA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,yCAAA,EAA0C;AAAA,GAAA,EACpD,CAAA;AAAA,EAEF,0BACEF,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,GAAE,eAAA,EAAgB,CAAA;AAAA,oBACxBA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,UAAA,EAAW;AAAA,GAAA,EACrB,CAAA;AAAA,EAEF,wBACEF,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,GAAE,4GAAA,EAA6G,CAAA;AAAA,oBACrHA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,2CAAA,EAA4C;AAAA,GAAA,EACtD,CAAA;AAAA,EAEF,qBACEF,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,GAAE,gEAAA,EAAiE,CAAA;AAAA,oBACzEA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,eAAA,EAAgB,CAAA;AAAA,mCACvB,QAAA,EAAA,EAAO,EAAA,EAAG,OAAM,EAAA,EAAG,MAAA,EAAO,GAAE,KAAA,EAAM;AAAA,GAAA,EACrC,CAAA;AAAA,EAEF,yBACEF,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,GAAE,0EAAA,EAA2E,CAAA;AAAA,oBACnFA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,2DAAA,EAA4D,CAAA;AAAA,oBACpEA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,wDAAA,EAAyD;AAAA,GAAA,EACnE,CAAA;AAAA,EAEF,uBACEF,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,YAAO,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,GAAE,IAAA,EAAK,CAAA;AAAA,oBAC/BA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,iDAAA,EAAkD,CAAA;AAAA,oBAC1DA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,UAAA,EAAW;AAAA,GAAA,EACrB,CAAA;AAAA,EAEF,sBACEF,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,OAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,EAAA,EAAG,GAAA,EAAI,CAAA;AAAA,oBAChDA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,2CAAA,EAA4C;AAAA,GAAA,EACtD,CAAA;AAAA,EAEF,sBACEF,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,YAAO,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,GAAA,EAAI,GAAE,GAAA,EAAI,CAAA;AAAA,oBAC7BA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,sBAAA,EAAuB;AAAA,GAAA,EACjC,CAAA;AAAA,EAEF,sBACEF,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,GAAA,EAAI,CAAA,EAAE,IAAA,EAAK,OAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,EAAA,EAAG,GAAA,EAAI,CAAA;AAAA,oBACjDA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,0BAAA,EAA2B;AAAA,GAAA,EACrC,CAAA;AAAA,EAEF,uBACEF,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,YAAO,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,GAAA,EAAI,GAAE,GAAA,EAAI,CAAA;AAAA,oBAC5BA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,sBAAA,EAAuB,CAAA;AAAA,oBAC/BA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,uBAAA,EAAwB,CAAA;AAAA,oBAChCA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,8BAAA,EAA+B;AAAA,GAAA,EACzC,CAAA;AAAA,EAEF,0BACEF,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,OAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,EAAA,EAAG,GAAA,EAAI,CAAA;AAAA,oBAChDA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,cAAA,EAAe,CAAA;AAAA,oBACvBA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,sFAAA,EAAuF;AAAA,GAAA,EACjG,CAAA;AAAA,EAEF,uBACEF,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,YAAO,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,GAAE,GAAA,EAAI,CAAA;AAAA,oBAC9BA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,aAAA,EAAc;AAAA,GAAA,EACxB,CAAA;AAAA;AAAA,EAGF,yBACEF,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,GAAE,mDAAA,EAAoD,CAAA;AAAA,oBAC5DA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,UAAA,EAAW,CAAA;AAAA,oBACnBA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,aAAA,EAAc;AAAA,GAAA,EACxB,CAAA;AAAA,EAEF,sBACEF,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,GAAE,2CAAA,EAA4C,CAAA;AAAA,oBACpDA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,gCAAA,EAAiC;AAAA,GAAA,EAC3C,CAAA;AAAA;AAAA,EAGF,sBACEF,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,GAAE,qBAAA,EAAsB,CAAA;AAAA,oBAC9BA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,aAAA,EAAc;AAAA,GAAA,EACxB,CAAA;AAAA,EAEF,wBACEF,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,OAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,EAAA,EAAG,GAAA,EAAI,CAAA;AAAA,mCAC/C,QAAA,EAAA,EAAO,EAAA,EAAG,KAAI,EAAA,EAAG,IAAA,EAAK,GAAE,GAAA,EAAI,CAAA;AAAA,oBAC7BA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,2BAAA,EAA4B,CAAA;AAAA,oBACpCA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,kBAAA,EAAmB;AAAA,GAAA,EAC7B,CAAA;AAAA,EAEF,uBACEF,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,YAAO,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,GAAA,EAAI,GAAE,GAAA,EAAI,CAAA;AAAA,oBAC5BA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,iCAAA,EAAkC,CAAA;AAAA,oBAC1CA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,UAAA,EAAW,CAAA;AAAA,oBACnBA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,6BAAA,EAA8B;AAAA,GAAA,EACxC,CAAA;AAAA,EAEF,2BACEF,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,GAAE,0BAAA,EAA2B,CAAA;AAAA,oBACnCA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,iJAAA,EAAkJ,CAAA;AAAA,oBAC1JA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,eAAA,EAAgB,CAAA;AAAA,oBACxBA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,iCAAA,EAAkC,CAAA;AAAA,oBAC1CA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,QAAA,EAAS;AAAA,GAAA,EACnB,CAAA;AAAA,EAEF,6BACEF,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,GAAE,8JAAA,EAA+J,CAAA;AAAA,oBACvKA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,eAAA,EAAgB;AAAA,GAAA,EAC1B,CAAA;AAAA,EAEF,0BACEF,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,OAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,EAAA,EAAG,GAAA,EAAI,CAAA;AAAA,mCAC/C,QAAA,EAAA,EAAO,EAAA,EAAG,MAAK,EAAA,EAAG,IAAA,EAAK,GAAE,GAAA,EAAI,CAAA;AAAA,oBAC9BA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,qBAAA,EAAsB;AAAA,GAAA,EAChC,CAAA;AAAA,EAEF,4BACEF,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,YAAO,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,GAAE,IAAA,EAAK,CAAA;AAAA,oBAC/BA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,gBAAA,EAAiB;AAAA,GAAA,EAC3B,CAAA;AAAA;AAAA,EAGF,sBACEF,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,YAAO,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,GAAE,IAAA,EAAK,CAAA;AAAA,oBAC/BA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,mBAAA,EAAoB,eAAc,OAAA,EAAQ;AAAA,GAAA,EACpD,CAAA;AAAA;AAAA,EAGF,uBACEF,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,GAAE,0FAAA,EAA2F,CAAA;AAAA,oBACnGA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,mBAAA,EAAoB,eAAc,OAAA,EAAQ;AAAA,GAAA,EACpD,CAAA;AAAA;AAAA,EAGF,IAAA,kBACEA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,kGAAA,EAAmG,CAAA;AAAA;AAAA,EAG7G,6BACEF,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,YAAO,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,GAAE,IAAA,EAAK,CAAA;AAAA,oBAC/BA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,iDAAA,EAAkD,eAAc,OAAA,EAAQ;AAAA,GAAA,EAClF,CAAA;AAAA;AAAA,EAGF,yBACEF,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,6DAAA,EAA8D,aAAA,EAAc,OAAA,EAAQ,CAAA;AAAA,oBAC5FA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,YAAA,EAAa,eAAc,OAAA,EAAQ;AAAA,GAAA,EAC7C,CAAA;AAAA,EAEF,IAAA,kBACEA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,+HAAA,EAAgI,CAAA;AAAA,EAE1I,KAAA,kBAAOA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,iBAAA,EAAkB,CAAA;AAAA,EACjC,WAAA,kBAAaA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,cAAA,EAAe,CAAA;AAAA;AAAA,EAEpC,aAAA,kBAAeA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,2BAAA,EAA4B,CAAA;AAAA;AAAA,EAEnD,yBAASA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,6BAAA,EAA8B,eAAc,OAAA,EAAQ,CAAA;AAAA,EACrE,0BACEF,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,OAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,EAAA,EAAG,GAAA,EAAI,CAAA;AAAA,oBAChDA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,2CAAA,EAA4C;AAAA,GAAA,EACtD;AAEJ,CAAA;AAkCO,SAAS,UAAA,CAAW,IAAA,EAAiB,OAAA,GAAuB,EAAC,EAAc;AAChF,EAAA,uBACEA,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MAEE,GAAI,QAAQ,SAAA,KAAc,MAAA,GAAY,EAAC,GAAI,EAAE,SAAA,EAAW,OAAA,CAAQ,SAAA,EAAU;AAAA,MAC1E,GAAI,OAAA,CAAQ,IAAA,KAAS,MAAA,GAAY,EAAC,GAAI,EAAE,KAAA,EAAO,OAAA,CAAQ,IAAA,EAAM,MAAA,EAAQ,OAAA,CAAQ,IAAA,EAAK;AAAA,MACnF,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,MAAA,EAAO,cAAA;AAAA,MACP,WAAA,EAAa,QAAQ,WAAA,IAAe,CAAA;AAAA,MACnC,GAAI,QAAQ,OAAA,GAAU,EAAE,eAAe,OAAA,EAAS,cAAA,EAAgB,OAAA,EAAQ,GAAI,EAAC;AAAA,MAC9E,aAAA,EAAY,MAAA;AAAA,MAEX,iBAAO,IAAI;AAAA,KAAA;AAAA,IAVP,OAAA,CAAQ;AAAA,GAWf;AAEJ;AAUO,SAAS,UAAA,CAAW,IAAA,EAAc,OAAA,GAAuB,EAAC,EAAc;AAC7E,EAAA,uBACEA,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MAEE,GAAI,QAAQ,SAAA,KAAc,MAAA,GAAY,EAAC,GAAI,EAAE,SAAA,EAAW,OAAA,CAAQ,SAAA,EAAU;AAAA,MAC1E,GAAI,OAAA,CAAQ,IAAA,KAAS,MAAA,GAAY,EAAC,GAAI,EAAE,KAAA,EAAO,OAAA,CAAQ,IAAA,EAAM,MAAA,EAAQ,OAAA,CAAQ,IAAA,EAAK;AAAA,MACnF,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,cAAA;AAAA,MACL,aAAA,EAAY,MAAA;AAAA,MAEZ,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAG,IAAA,EAAM;AAAA,KAAA;AAAA,IAPV,OAAA,CAAQ;AAAA,GAQf;AAEJ;AAGO,IAAM,SAAA,GAAY,eAAA;AChPzB,SAAS,iBAAA,GAA+B;AACtC,EAAA,OAAO,UAAA,CAAW,eAAA,EAAiB,EAAE,OAAA,EAAS,MAAM,CAAA;AACtD;AAEA,SAAS,QAAA,GAAsB;AAC7B,EAAA,OAAO,WAAW,SAAS,CAAA;AAC7B;AAEA,SAAS,WAAA,GAAyB;AAChC,EAAA,OAAO,WAAW,SAAA,EAAW,EAAE,aAAa,GAAA,EAAK,SAAA,EAAW,kBAAkB,CAAA;AAChF;AAEA,SAAS,QAAA,GAAsB;AAC7B,EAAA,OAAO,WAAW,MAAM,CAAA;AAC1B;AAEA,SAAS,SAAA,GAAuB;AAC9B,EAAA,OAAO,WAAW,OAAA,EAAS,EAAE,aAAa,GAAA,EAAK,OAAA,EAAS,MAAM,CAAA;AAChE;AAWA,IAAM,SAAA,GACJ,0HAAA;AAGF,IAAI,aAAA,GAAgB,CAAA;AACpB,IAAI,eAAA,GAAuC,IAAA;AAE3C,SAAS,gBAAA,GAAyB;AAChC,EAAA,MAAM,QAAA,GAAW,CAAC,MAAA,KAA4B;AAC5C,IAAA,QAAA,CAAS,iBAAiB,CAAA,EAAG,SAAS,aAAa,CAAA,CAAE,OAAA,CAAQ,CAAC,IAAA,KAAS;AACrE,MAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,QAAA,IAAA,CAAK,gBAAgB,WAAW,CAAA;AAAA,MAClC;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU,CAAC,KAAA,KAAiC;AAChD,IAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,IAAA,MAAM,IAAA,GAAO,MAAA,EAAQ,OAAA,CAAqB,SAAS,CAAA,IAAK,IAAA;AAGxD,IAAA,IAAI,IAAA,IAAQ,QAAQ,OAAA,CAAQ,IAAI,KAAK,IAAA,CAAK,YAAA,CAAa,WAAW,CAAA,EAAG;AACnE,MAAA;AAAA,IACF;AACA,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAA,EAAM,gBAAgB,WAAW,CAAA;AAAA,EACnC,CAAA;AAEA,EAAA,MAAM,KAAA,GAAQ,CAAC,KAAA,KAAoC;AACjD,IAAA,IAAI,KAAA,CAAM,QAAQ,QAAA,EAAU;AAC1B,MAAA,QAAA,EAAS;AAAA,IACX;AAAA,EACF,CAAA;AAEA,EAAA,QAAA,CAAS,gBAAA,CAAiB,SAAS,OAAO,CAAA;AAC1C,EAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,KAAK,CAAA;AAC1C,EAAA,eAAA,GAAkB,MAAM;AACtB,IAAA,QAAA,CAAS,mBAAA,CAAoB,SAAS,OAAO,CAAA;AAC7C,IAAA,QAAA,CAAS,mBAAA,CAAoB,WAAW,KAAK,CAAA;AAC7C,IAAA,QAAA,EAAS;AAAA,EACX,CAAA;AACF;AAGA,SAAS,YAAA,GAAqB;AAC5B,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,aAAA,IAAiB,CAAA;AACjB,IAAA,IAAI,kBAAkB,CAAA,EAAG;AACvB,MAAA,gBAAA,EAAiB;AAAA,IACnB;AACA,IAAA,OAAO,MAAM;AACX,MAAA,aAAA,IAAiB,CAAA;AACjB,MAAA,IAAI,kBAAkB,CAAA,EAAG;AACvB,QAAA,eAAA,IAAkB;AAClB,QAAA,eAAA,GAAkB,IAAA;AAAA,MACpB;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AACP;AAGA,SAAS,aAAa,IAAA,EAAyB;AAC7C,EAAA,MAAM,QAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,OAAO,OAAO,CAAA;AAC5C,EAAA,OAAO,KAAA,CAAM,IAAI,CAAC,IAAA,EAAM,0BACtBH,eAAAA,CAAC,MAAA,EAAA,EAAsC,SAAA,EAAU,eAAA,EAC/C,QAAA,EAAA;AAAA,oBAAAE,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iBAAA,EAAkB,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,IAClC;AAAA,GAAA,EAAA,EAFQ,GAAG,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,EAAI,IAAI,EAGnC,CACD,CAAA;AACH;AAWA,SAAS,UAAA,CAAW;AAAA,EAClB,MAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA,EAOG;AACD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIE,cAAA,CAAA,CAAU,aAAa,EAAA,EAAI,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAC,CAAA;AAC3E,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC1C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,eAA+C,IAAI,CAAA;AAC/E,EAAA,MAAM,MAAA,GAASC,aAA0B,IAAI,CAAA;AAC7C,EAAA,MAAM,OAAA,GAAUA,aAAyB,IAAI,CAAA;AAK7C,EAAA,MAAM,UAAA,GAAA,CAAc,OAAA,IAAW,EAAC,EAAG,MAAA;AAAA,IACjC,CAAC,MAAA,KACC,OAAO,OAAO,GAAA,KAAQ,QAAA,IAAY,OAAO,GAAA,KAAQ;AAAA,GACrD;AACA,EAAA,MAAM,MAAA,GACJ,cAAA,IAAkB,UAAA,CAAW,MAAA,GAAS,CAAA,GAAI,EAAE,IAAA,EAAM,UAAA,EAAY,MAAA,EAAQ,cAAA,EAAe,GAAI,IAAA;AAG3F,EAAAF,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAAS,CAAC,KAAA,KAAiC;AAC/C,MAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,MAAA,IAAI,CAAC,MAAA,CAAO,OAAA,EAAS,QAAA,CAAS,MAAM,CAAA,IAAK,CAAC,OAAA,CAAQ,OAAA,EAAS,QAAA,CAAS,MAAM,CAAA,EAAG;AAC3E,QAAA,WAAA,CAAY,KAAK,CAAA;AAAA,MACnB;AAAA,IACF,CAAA;AACA,IAAA,MAAM,KAAA,GAAQ,CAAC,KAAA,KAAoC;AACjD,MAAA,IAAI,KAAA,CAAM,QAAQ,QAAA,EAAU;AAC1B,QAAA,KAAA,CAAM,eAAA,EAAgB;AACtB,QAAA,WAAA,CAAY,KAAK,CAAA;AAAA,MACnB;AAAA,IACF,CAAA;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,MAAM,CAAA;AAC7C,IAAA,QAAA,CAAS,gBAAA,CAAiB,SAAA,EAAW,KAAA,EAAO,IAAI,CAAA;AAChD,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,mBAAA,CAAoB,aAAa,MAAM,CAAA;AAChD,MAAA,QAAA,CAAS,mBAAA,CAAoB,SAAA,EAAW,KAAA,EAAO,IAAI,CAAA;AAAA,IACrD,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAMb,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,OAAO,OAAA,CAAQ,OAAA;AACrB,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA;AAAA,IACF;AACA,IAAA,MAAM,OAAO,MAAM;AACjB,MAAA,MAAM,OAAO,IAAA,CAAK,aAAA,CAAc,oBAAoB,CAAA,EAAG,aAAa,IAAA,EAAK;AACzE,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,UAAA,CAAW,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAC,CAAA;AAAA,MACpC;AACA,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,aAAA,CAAc,qBAAqB,CAAA;AACrD,MAAA,UAAA,CAAW,IAAA,EAAM,YAAA,CAAa,UAAU,CAAA,IAAK,KAAK,CAAA;AAAA,IACpD,CAAA;AACA,IAAA,IAAA,EAAK;AACL,IAAA,MAAM,QAAA,GAAW,IAAI,gBAAA,CAAiB,IAAI,CAAA;AAC1C,IAAA,QAAA,CAAS,QAAQ,IAAA,EAAM;AAAA,MACrB,OAAA,EAAS,IAAA;AAAA,MACT,SAAA,EAAW,IAAA;AAAA,MACX,aAAA,EAAe,IAAA;AAAA,MACf,UAAA,EAAY,IAAA;AAAA,MACZ,eAAA,EAAiB,CAAC,UAAU;AAAA,KAC7B,CAAA;AACD,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,UAAA,EAAW;AAAA,IACtB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,MAAM,WAAA,GAAc,CAAC,QAAA,KAAqB;AACxC,IAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,OAAA,EAAS,aAAA,CAA2B,QAAQ,CAAA;AAC/D,IAAA,EAAA,EAAI,KAAA,EAAM;AAAA,EACZ,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU,GAAG,OAAO,CAAA,CAAA,EAAI,KAAK,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAC,CAAA,CAAA;AACtD,EAAA,MAAM,UAAU,MAAM;AACpB,IAAA,MAAM,QAAQ,MAAM;AAClB,MAAA,SAAA,CAAU,IAAI,CAAA;AACd,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,SAAA,CAAU,KAAK,CAAA;AAAA,MACjB,GAAG,IAAI,CAAA;AAAA,IACT,CAAA;AACA,IAAA,KAAK,eAAA,CAAgB,OAAO,CAAA,CAAE,IAAA,CAAK,CAAC,EAAA,KAAO;AACzC,MAAA,IAAI,EAAA,EAAI;AACN,QAAA,KAAA,EAAM;AAAA,MACR;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,uBACEH,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACb,QAAA,EAAA;AAAA,sBAAAE,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAsB,aAAA,EAAa,OAAO,WAAA,EAAY,EACnE,QAAA,EAAA,MAAA,CAAO,WAAA,EAAY,EACtB,CAAA;AAAA,sBACAF,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,eAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,GAAA,EAAK,MAAA;AAAA,cACL,SAAA,EAAU,eAAA;AAAA,cACV,YAAA,EAAW,eAAA;AAAA,cACX,eAAA,EAAe,SAAS,SAAA,GAAY,QAAA;AAAA,cACpC,eAAA,EAAe,SAAS,QAAA,GAAW,MAAA;AAAA,cACnC,SAAS,MAAM;AACb,gBAAA,IAAI,MAAA,EAAQ;AACV,kBAAA,MAAM,IAAA,GAAO,MAAA,CAAO,OAAA,EAAS,qBAAA,EAAsB;AACnD,kBAAA,IAAI,IAAA,EAAM;AACR,oBAAA,SAAA,CAAU,EAAE,KAAK,IAAA,CAAK,MAAA,GAAS,GAAG,IAAA,EAAM,IAAA,CAAK,IAAA,GAAO,CAAA,EAAG,CAAA;AAAA,kBACzD;AACA,kBAAA,WAAA,CAAY,CAAC,IAAA,KAAS,CAAC,IAAI,CAAA;AAAA,gBAC7B,CAAA,MAAO;AACL,kBAAA,WAAA,CAAY,eAAe,CAAA;AAAA,gBAC7B;AAAA,cACF,CAAA;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAAE,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mBAAA,EAAqB,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,gBAC5C,iBAAA;AAAkB;AAAA;AAAA,WACrB;AAAA,UACC,MAAA,IAAU,YAAY,MAAA,GACnBI,qBAAA;AAAA,4BACEJ,cAAAA;AAAA,cAAC,IAAA;AAAA,cAAA;AAAA,gBACC,GAAA,EAAK,OAAA;AAAA,gBACL,SAAA,EAAU,mBAAA;AAAA,gBACV,IAAA,EAAK,SAAA;AAAA,gBACL,YAAA,EAAW,YAAA;AAAA,gBACX,OAAO,EAAE,GAAA,EAAK,OAAO,GAAA,EAAK,IAAA,EAAM,OAAO,IAAA,EAAK;AAAA,gBAE3C,QAAA,EAAA,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAC,MAAA,KAAW;AAC3B,kBAAA,MAAM,SAAS,MAAA,CAAO,GAAA,CAAI,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,KAAM,OAAA;AACjD,kBAAA,uBACEA,cAAAA,CAAC,IAAA,EAAA,EACC,QAAA,kBAAAF,eAAAA;AAAA,oBAAC,QAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,QAAA;AAAA,sBACL,IAAA,EAAK,QAAA;AAAA,sBACL,eAAA,EAAe,MAAA;AAAA,sBACf,SAAA,EAAU,mBAAA;AAAA,sBACV,aAAA,EAAa,SAAS,EAAA,GAAK,MAAA;AAAA,sBAC3B,SAAS,MAAM;AACb,wBAAA,MAAA,CAAO,MAAA,CAAO,OAAO,GAAG,CAAA;AACxB,wBAAA,WAAA,CAAY,KAAK,CAAA;AAAA,sBACnB,CAAA;AAAA,sBAEA,QAAA,EAAA;AAAA,wCAAAE,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sBACb,QAAA,EAAA,MAAA,GAAS,SAAA,KAAc,IAAA,EAC1B,CAAA;AAAA,wCACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAA,EAAoB,iBAAO,GAAA,EAAI;AAAA;AAAA;AAAA,mBACjD,EAAA,EAhBO,OAAO,GAiBhB,CAAA;AAAA,gBAEJ,CAAC;AAAA;AAAA,aACH;AAAA,YACA,QAAA,CAAS;AAAA,WACX,GACA;AAAA,SAAA,EACN,CAAA;AAAA,wBACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,mBAAA,EAAqB,QAAA,EAAA,YAAA,CAAa,IAAI,CAAA,EAAE;AAAA,OAAA,EAC1D,CAAA;AAAA,sBACAA,cAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAU,gBAAA;AAAA,UACV,YAAA,EAAY,SAAS,QAAA,GAAW,UAAA;AAAA,UAChC,aAAA,EAAa,SAAS,EAAA,GAAK,MAAA;AAAA,UAC3B,OAAA,EAAS,OAAA;AAAA,UAER,QAAA,EAAA,MAAA,GAAS,SAAA,EAAU,GAAI,QAAA;AAAS;AAAA;AACnC,KAAA,EACF,CAAA;AAAA,oBACAF,eAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAU,gBAAA;AAAA,QACV,cAAA,EAAc,UAAU,EAAA,GAAK,MAAA;AAAA,QAC7B,QAAA,EAAU,OAAA;AAAA,QACV,SAAS,MAAM;AACb,UAAA,WAAA,CAAY,qBAAqB,CAAA;AAAA,QACnC,CAAA;AAAA,QAEC,QAAA,EAAA;AAAA,UAAA,OAAA,GAAU,SAAA,GAAY,MAAA;AAAA,UACtB,OAAA,GAAU,WAAA,EAAY,GAAI,QAAA;AAAS;AAAA;AAAA;AACtC,GAAA,EACF,CAAA;AAEJ;AAQO,SAAS,QAAA,CAAS;AAAA,EACvB,MAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAAkB;AAChB,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAII,eAAS,KAAK,CAAA;AACtC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,OAAA,GAAUC,aAAuB,IAAI,CAAA;AAG3C,EAAA,YAAA,EAAa;AAEb,EAAAF,eAAA,CAAU,MAAM;AACd,IAAA,UAAA,CAAW,IAAI,CAAA;AAAA,EACjB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA;AAAA,IACF;AACA,IAAA,MAAM,KAAA,GAAQ,CAAC,KAAA,KAAyB;AACtC,MAAA,IAAI,KAAA,CAAM,QAAQ,QAAA,EAAU;AAC1B,QAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,MACf;AAAA,IACF,CAAA;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,KAAK,CAAA;AAC1C,IAAA,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,GAAW,QAAA;AAI/B,IAAA,QAAA,CAAS,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,gBAAgB,CAAA;AAC5C,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,mBAAA,CAAoB,WAAW,KAAK,CAAA;AAC7C,MAAA,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,GAAW,EAAA;AAC/B,MAAA,QAAA,CAAS,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,gBAAgB,CAAA;AAAA,IACjD,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,MAAM,IAAA,GAAO,SAAA,GAAY,SAAA,CAAU,OAAA,CAAQ,cAAA,EAAgB,EAAE,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,GAAI,IAAA;AAEpF,EAAA,MAAM,UAAA,GAAa,CAAC,KAAA,KAAsC;AACxD,IAAA,IAAI,KAAA,CAAM,MAAA,KAAW,KAAA,CAAM,aAAA,EAAe;AACxC,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf;AAAA,EACF,CAAA;AAEA,EAAA,uBACEH,eAAAA,CAAAC,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAD,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,sBAAAE,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAA,EAAmB,aAAA,EAAa,OAAO,WAAA,EAAY,EAChE,QAAA,EAAA,MAAA,CAAO,WAAA,EAAY,EACtB,CAAA;AAAA,sBACAF,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAA,EACb,QAAA,EAAA;AAAA,QAAA,IAAA,mBAAOE,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gBAAA,EAAkB,gBAAK,CAAA,GAAU,IAAA;AAAA,wBACzDA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAkB,QAAA,EAAA,IAAA,EAAK;AAAA,OAAA,EACzC,CAAA;AAAA,sBACAF,eAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAU,eAAA;AAAA,UACV,SAAS,MAAM;AACb,YAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,UACd,CAAA;AAAA,UACD,QAAA,EAAA;AAAA,YAAA,QAAA;AAAA,YAEE,UAAA,CAAW,SAAA,EAAW,EAAE,IAAA,EAAM,IAAI;AAAA;AAAA;AAAA;AACrC,KAAA,EACF,CAAA;AAAA,IACC,WAAW,IAAA,GACRM,qBAAA;AAAA,sBACEJ,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mBAAA,EAAoB,OAAA,EAAS,YAC1C,QAAA,kBAAAF,eAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,iBAAA;AAAA,UACV,cAAA,EAAc,UAAU,GAAA,GAAM,GAAA;AAAA,UAC9B,IAAA,EAAK,QAAA;AAAA,UACL,YAAA,EAAW,gBAAA;AAAA,UAIX,QAAA,EAAA;AAAA,4BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EAAiB,KAAK,OAAA,EACnC,QAAA,EAAA;AAAA,8BAAAE,cAAAA;AAAA,gBAAC,UAAA;AAAA,gBAAA;AAAA,kBACC,MAAA;AAAA,kBACA,IAAA;AAAA,kBACA,SAAA;AAAA,kBACA,OAAA;AAAA,kBACA,cAAA;AAAA,kBACA;AAAA;AAAA,eACF;AAAA,8BACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAoB,QAAA,EAAS;AAAA,aAAA,EAC9C,CAAA;AAAA,YACC,0BAAUA,cAAAA,CAAC,SAAI,SAAA,EAAU,mBAAA,EAAqB,mBAAQ,CAAA,GAAS;AAAA;AAAA;AAAA,OAClE,EACF,CAAA;AAAA,MACA,QAAA,CAAS;AAAA,KACX,GACA;AAAA,GAAA,EACN,CAAA;AAEJ;AAIA,QAAA,CAAS,cAAA,GAAiB,IAAA;AAe1B,SAAS,aAAa,MAAA,EAA6B;AACjD,EAAA,MAAM,OAAA,GACJ,kGAAA;AACF,EAAA,MAAM,SAAsB,EAAC;AAC7B,EAAA,IAAI,IAAA,GAAO,CAAA;AACX,EAAA,IAAI,KAAA;AAEJ,EAAA,OAAA,CAAQ,KAAA,GAAQ,OAAA,CAAQ,IAAA,CAAK,MAAM,OAAO,IAAA,EAAM;AAC9C,IAAA,IAAI,KAAA,CAAM,QAAQ,IAAA,EAAM;AACtB,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,CAAO,MAAM,IAAA,EAAM,KAAA,CAAM,KAAK,CAAA,EAAG,CAAA;AAAA,IACvD;AACA,IAAA,IAAI,KAAA,CAAM,CAAC,CAAA,KAAM,MAAA,EAAW;AAC1B,MAAA,IAAI,KAAA,CAAM,CAAC,CAAA,KAAM,MAAA,EAAW;AAC1B,QAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,CAAM,CAAC,CAAA,EAAG,IAAA,EAAM,OAAO,CAAA;AAC3C,QAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,CAAM,CAAC,CAAA,EAAG,IAAA,EAAM,eAAe,CAAA;AAAA,MACrD,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,CAAM,CAAC,CAAA,EAAG,IAAA,EAAM,UAAU,CAAA;AAAA,MAChD;AAAA,IACF,CAAA,MAAA,IAAW,KAAA,CAAM,CAAC,CAAA,KAAM,MAAA,EAAW;AACjC,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,CAAM,CAAC,CAAA,EAAG,IAAA,EAAM,UAAU,CAAA;AAAA,IAChD,CAAA,MAAA,IAAW,KAAA,CAAM,CAAC,CAAA,KAAM,MAAA,EAAW;AACjC,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,CAAM,CAAC,CAAA,EAAG,IAAA,EAAM,WAAW,CAAA;AAAA,IACjD,CAAA,MAAA,IAAW,KAAA,CAAM,CAAC,CAAA,KAAM,MAAA,EAAW;AACjC,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,CAAM,CAAC,CAAA,EAAG,IAAA,EAAM,eAAe,CAAA;AAAA,IACrD;AACA,IAAA,IAAA,GAAO,OAAA,CAAQ,SAAA;AAAA,EACjB;AACA,EAAA,IAAI,IAAA,GAAO,OAAO,MAAA,EAAQ;AACxB,IAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,OAAO,KAAA,CAAM,IAAI,GAAG,CAAA;AAAA,EAC1C;AACA,EAAA,OAAO,MAAA;AACT;AAOA,SAAS,qBAAA,CAAsB,IAAyB,IAAA,EAAoB;AAC1E,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,wBAAA,CAAyB,mBAAA,CAAoB,WAAW,OAAO,CAAA;AAEzF,EAAA,MAAM,SAAS,UAAA,EAAY,GAAA;AAC3B,EAAA,MAAA,EAAQ,IAAA,CAAK,IAAI,IAAI,CAAA;AACrB,EAAA,EAAA,CAAG,aAAA,CAAc,IAAI,KAAA,CAAM,OAAA,EAAS,EAAE,OAAA,EAAS,IAAA,EAAM,CAAC,CAAA;AACxD;AAaA,SAAS,cAAA,CAAe,EAAE,UAAA,EAAW,EAA2D;AAC9F,EAAA,MAAM,SAAA,GAAYG,aAAmC,IAAI,CAAA;AACzD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAID,eAAwB,IAAI,CAAA;AACtD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAwB,IAAI,CAAA;AACtD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,eAAS,KAAK,CAAA;AAI1C,EAAAD,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,OAAO,UAAA,CAAW,OAAA;AACxB,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA;AAAA,IACF;AACA,IAAA,MAAM,OAAO,MAAM;AACjB,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,aAAA,CAAmC,+BAA+B,CAAA;AAClF,MAAA,SAAA,CAAU,OAAA,GAAU,EAAA;AACpB,MAAA,QAAA,CAAS,EAAA,GAAK,EAAA,CAAG,KAAA,GAAQ,IAAI,CAAA;AAAA,IAC/B,CAAA;AACA,IAAA,IAAA,EAAK;AACL,IAAA,MAAM,QAAA,GAAW,IAAI,gBAAA,CAAiB,IAAI,CAAA;AAC1C,IAAA,QAAA,CAAS,QAAQ,IAAA,EAAM,EAAE,SAAS,IAAA,EAAM,SAAA,EAAW,MAAM,CAAA;AACzD,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,UAAA,EAAW;AAAA,IACtB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,IAAI,UAAU,IAAA,EAAM;AAClB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,IAAA,GAAO,CAAC,IAAA,KAAiB;AAC7B,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,MAAM,IAAI,CAAA;AACf,MAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACf,SAAS,KAAA,EAAO;AACd,MAAA,QAAA,CAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,eAAe,CAAA;AAAA,IACnE;AACA,IAAA,IAAI,UAAU,OAAA,EAAS;AACrB,MAAA,qBAAA,CAAsB,SAAA,CAAU,SAAS,IAAI,CAAA;AAAA,IAC/C;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,SAAS,MAAM;AACnB,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,IAAA,CAAK,UAAU,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,IACjD,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,OAAO,MAAM;AACjB,IAAA,MAAM,QAAQ,MAAM;AAClB,MAAA,SAAA,CAAU,IAAI,CAAA;AACd,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,SAAA,CAAU,KAAK,CAAA;AAAA,MACjB,GAAG,IAAI,CAAA;AAAA,IACT,CAAA;AACA,IAAA,KAAK,eAAA,CAAgB,KAAK,CAAA,CAAE,IAAA,CAAK,CAAC,EAAA,KAAO;AACvC,MAAA,IAAI,EAAA,EAAI;AACN,QAAA,KAAA,EAAM;AAAA,MACR;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA;AAGA,EAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KAAmD;AACpE,IAAA,IAAI,KAAA,CAAM,QAAQ,KAAA,EAAO;AACvB,MAAA;AAAA,IACF;AACA,IAAA,KAAA,CAAM,cAAA,EAAe;AACrB,IAAA,MAAM,KAAK,KAAA,CAAM,aAAA;AACjB,IAAA,MAAM,EAAE,cAAA,EAAgB,KAAA,EAAO,YAAA,EAAc,KAAI,GAAI,EAAA;AACrD,IAAA,MAAM,IAAA,GAAO,CAAA,EAAG,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,KAAK,CAAC,CAAA,EAAA,EAAK,KAAA,CAAM,KAAA,CAAM,GAAG,CAAC,CAAA,CAAA;AAC1D,IAAA,IAAA,CAAK,IAAI,CAAA;AACT,IAAA,qBAAA,CAAsB,MAAM;AAC1B,MAAA,EAAA,CAAG,cAAA,GAAiB,EAAA,CAAG,YAAA,GAAe,KAAA,GAAQ,CAAA;AAAA,IAChD,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,uBACEH,gBAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAW,cAAA,EAAc,KAAA,GAAQ,KAAK,MAAA,EACnD,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACb,QAAA,EAAA;AAAA,sBAAAE,cAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAU,iBAAA;AAAA,UACV,OAAA,EAAS,MAAA;AAAA,UACT,UAAU,KAAA,KAAU,IAAA;AAAA,UACrB,QAAA,EAAA;AAAA;AAAA,OAED;AAAA,sBACAA,cAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAU,iBAAA,EAAkB,OAAA,EAAS,IAAA,EACxD,QAAA,EAAA,MAAA,GAAS,QAAA,GAAW,MAAA,EACvB;AAAA,KAAA,EACF,CAAA;AAAA,oBACAF,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EAEb,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EAAkB,eAAY,MAAA,EAC1C,QAAA,EAAA;AAAA,QAAA,YAAA,CAAa,KAAK,EAAE,GAAA,CAAI,CAAC,OAAO,KAAA,qBAC/BE,cAAAA,CAAC,MAAA,EAAA,EAAuD,YAAA,EAAY,KAAA,CAAM,MACvE,QAAA,EAAA,KAAA,CAAM,IAAA,EAAA,EADE,CAAA,EAAG,MAAA,CAAO,KAAK,CAAC,IAAI,KAAA,CAAM,IAAA,IAAQ,OAAO,CAAA,CAEpD,CACD,CAAA;AAAA,QACA;AAAA,OAAA,EACH,CAAA;AAAA,sBACAA,cAAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,gBAAA;AAAA,UACV,KAAA;AAAA,UACA,UAAA,EAAY,KAAA;AAAA,UACZ,YAAA,EAAW,mBAAA;AAAA,UACX,QAAA,EAAU,CAAC,KAAA,KAAU;AACnB,YAAA,IAAA,CAAK,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,UACzB,CAAA;AAAA,UACA;AAAA;AAAA;AACF,KAAA,EACF,CAAA;AAAA,IACC,KAAA,mBACCA,cAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,gBAAA,EAAiB,IAAA,EAAK,OAAA,EAChC,QAAA,EAAA,KAAA,EACH,CAAA,GACE;AAAA,GAAA,EACN,CAAA;AAEJ;AAUO,SAAS,oBAAA,CAAqB;AAAA,EACnC,KAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,EAUG;AACD,EAAA,MAAM,UAAA,GAAaG,aAAoB,IAAI,CAAA;AAC3C,EAAA,uBACEL,gBAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,qBAAoB,WAAA,EAAW,IAAA,EAAM,KAAK,UAAA,EAC1D,QAAA,EAAA;AAAA,IAAA,KAAA,mBAAQE,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,yBAAA,EAA2B,iBAAM,CAAA,GAAQ,IAAA;AAAA,IAC/D,QAAA;AAAA,IAEA,SAAS,MAAA,mBAASA,cAAAA,CAAC,cAAA,EAAA,EAAe,YAAwB,CAAA,GAAK;AAAA,GAAA,EAClE,CAAA;AAEJ","file":"api-try-it.cjs","sourcesContent":["/**\n * Clipboard copying for the framework's client components — internal.\n *\n * The Clipboard API is the right way to copy, and it is not always available:\n * an insecure origin, an embedded frame with no permission, or an older browser\n * leaves `navigator.clipboard` missing or its promise rejected. Every copy\n * control in the framework therefore needs the same two-step attempt, so the\n * attempt lives here once instead of in each control.\n *\n * @packageDocumentation\n */\n\n/**\n * Copy through a hidden textarea and `document.execCommand`. The fallback, for\n * the contexts the Clipboard API refuses.\n */\nfunction legacyCopy(text: string): boolean {\n try {\n const area = document.createElement('textarea');\n area.value = text;\n area.style.position = 'fixed';\n area.style.opacity = '0';\n document.body.appendChild(area);\n area.select();\n // eslint-disable-next-line @typescript-eslint/no-deprecated -- clipboard fallback\n const ok = document.execCommand('copy');\n document.body.removeChild(area);\n return ok;\n } catch {\n return false;\n }\n}\n\n/**\n * Copy text to the clipboard.\n *\n * Tries the Clipboard API, then the hidden-textarea fallback. It never throws:\n * a caller flashes \"Copied\" on `true` and leaves its label alone on `false`.\n *\n * @param text - the text to copy\n * @returns whether the text reached the clipboard\n */\nexport async function copyToClipboard(text: string): Promise<boolean> {\n // TypeScript types `navigator.clipboard` as always present; a browser on an\n // insecure origin disagrees, so treat it as optional.\n const clip = navigator.clipboard as Clipboard | undefined;\n if (typeof clip?.writeText === 'function') {\n try {\n await clip.writeText(text);\n return true;\n } catch {\n // Denied or unavailable; fall through to the legacy path.\n }\n }\n return legacyCopy(text);\n}\n","import type { ReactNode } from 'react';\n\n/**\n * The framework's inline-SVG glyph set — internal.\n *\n * Five UI modules drew their own icons, and four glyphs were drawn twice: the\n * house on the error screen and in the sidebar icon map, the padlock on the\n * sign-in and the `403` screen, the info circle on both of those, the key in\n * both places again, and the check mark in the copy-page button and the\n * playground. One drawing per glyph now lives here.\n *\n * Nothing is exported from the package: the modules below compose these paths,\n * and `docsIcon` remains the only public icon surface. Zero dependencies — the\n * paths are Lucide-shaped, on the same 24×24 grid, so any glyph works at any\n * size.\n *\n * @packageDocumentation\n */\n\n/**\n * The glyph paths, keyed by name. Each value is the *inside* of an `<svg>`, so\n * a caller decides the size, the stroke, and the class.\n */\nconst GLYPHS = {\n house: (\n <>\n <path d=\"m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\" />\n <path d=\"M9 22V12h6v10\" />\n </>\n ),\n book: <path d=\"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1 0-5H20\" />,\n code: (\n <>\n <path d=\"m16 18 6-6-6-6\" />\n <path d=\"m8 6-6 6 6 6\" />\n </>\n ),\n rocket: (\n <>\n <path d=\"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91 0z\" />\n <path d=\"m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z\" />\n <path d=\"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0\" />\n <path d=\"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5\" />\n </>\n ),\n terminal: (\n <>\n <path d=\"m4 17 6-6-6-6\" />\n <path d=\"M12 19h8\" />\n </>\n ),\n wallet: (\n <>\n <path d=\"M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1\" />\n <path d=\"M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4\" />\n </>\n ),\n key: (\n <>\n <path d=\"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4\" />\n <path d=\"m21 2-9.6 9.6\" />\n <circle cx=\"7.5\" cy=\"15.5\" r=\"5.5\" />\n </>\n ),\n webhook: (\n <>\n <path d=\"M18 16.98h-5.99c-1.1 0-1.95.94-2.48 1.9A4 4 0 0 1 2 17c.01-.7.2-1.4.57-2\" />\n <path d=\"m6 17 3.13-5.78c.53-.97.1-2.18-.5-3.1a4 4 0 1 1 6.89-4.06\" />\n <path d=\"m12 6 3.13 5.73C15.66 12.7 16.9 13 18 13a4 4 0 0 1 0 8\" />\n </>\n ),\n globe: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\" />\n <path d=\"M2 12h20\" />\n </>\n ),\n mail: (\n <>\n <rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\" />\n <path d=\"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7\" />\n </>\n ),\n user: (\n <>\n <circle cx=\"12\" cy=\"8\" r=\"4\" />\n <path d=\"M4 21a8 8 0 0 1 16 0\" />\n </>\n ),\n lock: (\n <>\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" />\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\n </>\n ),\n users: (\n <>\n <circle cx=\"9\" cy=\"7\" r=\"4\" />\n <path d=\"M2 21a7 7 0 0 1 14 0\" />\n <path d=\"M16 3.5a4 4 0 0 1 0 7\" />\n <path d=\"M17.5 14.5a7 7 0 0 1 4.5 6.5\" />\n </>\n ),\n building: (\n <>\n <rect x=\"4\" y=\"2\" width=\"16\" height=\"20\" rx=\"2\" />\n <path d=\"M9 22v-4h6v4\" />\n <path d=\"M8 6h.01M12 6h.01M16 6h.01M8 10h.01M12 10h.01M16 10h.01M8 14h.01M12 14h.01M16 14h.01\" />\n </>\n ),\n clock: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"M12 7v5l3 2\" />\n </>\n ),\n /** A clock with a counter-clockwise arrow — a changelog, a history. */\n history: (\n <>\n <path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\" />\n <path d=\"M3 3v5h5\" />\n <path d=\"M12 7v5l4 2\" />\n </>\n ),\n bell: (\n <>\n <path d=\"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9\" />\n <path d=\"M10.3 21a1.94 1.94 0 0 0 3.4 0\" />\n </>\n ),\n /** A paper plane — send, deliver. */\n send: (\n <>\n <path d=\"m22 2-7 20-4-9-9-4Z\" />\n <path d=\"M22 2 11 13\" />\n </>\n ),\n idCard: (\n <>\n <rect x=\"2\" y=\"5\" width=\"20\" height=\"14\" rx=\"2\" />\n <circle cx=\"9\" cy=\"11\" r=\"2\" />\n <path d=\"M6.17 15a3 3 0 0 1 5.66 0\" />\n <path d=\"M16 10h2M16 14h2\" />\n </>\n ),\n coins: (\n <>\n <circle cx=\"8\" cy=\"8\" r=\"6\" />\n <path d=\"M18.09 10.37A6 6 0 1 1 10.34 18\" />\n <path d=\"M7 6h1v4\" />\n <path d=\"m16.71 13.88.7.71-2.82 2.82\" />\n </>\n ),\n handshake: (\n <>\n <path d=\"m11 17 2 2a1 1 0 1 0 3-3\" />\n <path d=\"m14 14 2.5 2.5a1 1 0 1 0 3-3l-3.88-3.88a3 3 0 0 0-4.24 0l-.88.88a1 1 0 1 1-3-3l2.81-2.81a5.79 5.79 0 0 1 7.06-.87l.47.28a2 2 0 0 0 1.42.25L21 4\" />\n <path d=\"m21 3 1 11h-2\" />\n <path d=\"M3 3 2 14l6.5 6.5a1 1 0 1 0 3-3\" />\n <path d=\"M3 4h8\" />\n </>\n ),\n shieldCheck: (\n <>\n <path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1 1 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\" />\n <path d=\"m9 12 2 2 4-4\" />\n </>\n ),\n banknote: (\n <>\n <rect x=\"2\" y=\"6\" width=\"20\" height=\"12\" rx=\"2\" />\n <circle cx=\"12\" cy=\"12\" r=\"2\" />\n <path d=\"M6 12h.01M18 12h.01\" />\n </>\n ),\n circlePlay: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"m10 8 6 4-6 4z\" />\n </>\n ),\n /** A circled `i` — an informational note, and the generic error state. */\n info: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 8v4M12 16h.01\" strokeLinecap=\"round\" />\n </>\n ),\n /** A warning triangle — a caution, and the `500` screen. */\n alert: (\n <>\n <path d=\"M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <path d=\"M12 9v4M12 17h.01\" strokeLinecap=\"round\" />\n </>\n ),\n /** A light bulb — a tip. */\n bulb: (\n <path d=\"M9 18h6M10 22h4M12 2a7 7 0 0 0-4 12.7c.6.5 1 1.3 1 2.1V17h6v-.2c0-.8.4-1.6 1-2.1A7 7 0 0 0 12 2Z\" />\n ),\n /** A circle with a cross — the `404` screen. */\n crossCircle: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"m14.31 8-1.31 2.4M9.69 8l4.62 8M14.31 16 9.69 8\" strokeLinecap=\"round\" />\n </>\n ),\n /** Struck-through signal bars — the offline screen. */\n offline: (\n <>\n <path d=\"M5 12.55a11 11 0 0 1 14 0M8.5 16.11a6 6 0 0 1 7 0M12 20h.01\" strokeLinecap=\"round\" />\n <path d=\"m2 2 20 20\" strokeLinecap=\"round\" />\n </>\n ),\n copy: (\n <path d=\"M9 9h9a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2v-9a2 2 0 0 1 2-2ZM5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n ),\n check: <path d=\"M20 6 9 17l-5-5\" />,\n chevronDown: <path d=\"m6 9 6 6 6-6\" />,\n /** Stacked chevrons — a value this control switches between. */\n chevronUpDown: <path d=\"m7 15 5 5 5-5M7 9l5-5 5 5\" />,\n /** An open arc — one turn of a loading spinner. */\n spinner: <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" strokeLinecap=\"round\" />,\n markdown: (\n <>\n <rect x=\"2\" y=\"5\" width=\"20\" height=\"14\" rx=\"2\" />\n <path d=\"M6 15V9l3 3 3-3v6M17 9v4m0 0 2-2m-2 2-2-2\" />\n </>\n ),\n} satisfies Record<string, ReactNode>;\n\n/** A glyph in {@link GLYPHS}. */\nexport type GlyphName = keyof typeof GLYPHS;\n\n/**\n * How one icon is drawn. Every field is optional, and the defaults match the\n * house style: 24×24 grid, current colour, hidden from assistive technology.\n */\nexport interface IconOptions {\n /**\n * React key for the `<svg>`. Set it when a host may place the icon in an\n * array of children — fumadocs renders a sidebar link as `[icon, text]`, and\n * an unkeyed element there raises React's \"unique key\" warning in the\n * consuming site's console.\n */\n readonly key?: string;\n /** Pixel size for `width` and `height`. Omit to let CSS size the icon. */\n readonly size?: number;\n /** Stroke width. Default 2. */\n readonly strokeWidth?: number;\n /** Round the stroke's ends and joins. Default `false`. */\n readonly rounded?: boolean;\n /** Class for the `<svg>`, e.g. a spin animation. */\n readonly className?: string;\n}\n\n/**\n * Draw a stroked glyph.\n *\n * @param name - the glyph\n * @param options - size, stroke, and class\n * @returns the `<svg>` element\n */\nexport function strokeIcon(name: GlyphName, options: IconOptions = {}): ReactNode {\n return (\n <svg\n key={options.key}\n {...(options.className === undefined ? {} : { className: options.className })}\n {...(options.size === undefined ? {} : { width: options.size, height: options.size })}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={options.strokeWidth ?? 2}\n {...(options.rounded ? { strokeLinecap: 'round', strokeLinejoin: 'round' } : {})}\n aria-hidden=\"true\"\n >\n {GLYPHS[name]}\n </svg>\n );\n}\n\n/**\n * Draw a filled glyph. Used by the solid play triangle, where a stroke would\n * read as an outline.\n *\n * @param path - the path data\n * @param options - size and class\n * @returns the `<svg>` element\n */\nexport function filledIcon(path: string, options: IconOptions = {}): ReactNode {\n return (\n <svg\n key={options.key}\n {...(options.className === undefined ? {} : { className: options.className })}\n {...(options.size === undefined ? {} : { width: options.size, height: options.size })}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d={path} />\n </svg>\n );\n}\n\n/** A solid right-pointing triangle: run this request. */\nexport const PLAY_PATH = 'M8 5v14l11-7z';\n","'use client';\n\nimport {\n useEffect,\n useRef,\n useState,\n type KeyboardEvent as ReactKeyboardEvent,\n type MouseEvent,\n type ReactNode,\n type RefObject,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { copyToClipboard } from './clipboard.js';\nimport { PLAY_PATH, filledIcon, strokeIcon } from './icons.js';\n\n/**\n * The Mintlify-style try-it surface: a compact endpoint bar with a \"Try it\"\n * button, opening the API playground in a two-column modal — the form on the\n * left, the live code sample and response on the right. The form is passed as\n * `children` (the site renders fumadocs' PlaygroundClient) and the right column\n * arrives as `example`, injected by `apiOperationLayout`, so this module needs\n * no fumadocs dependency. Styled by `styles/api-reference.css`.\n *\n * @packageDocumentation\n */\n\n/**\n * One selectable API server. `url` is optional so fumadocs' own server list\n * (whose OpenAPI type declares `url` optional) passes straight through; an\n * entry without a URL is not selectable and is skipped.\n *\n * @public\n */\nexport interface ApiServerOption {\n readonly url?: string;\n readonly description?: string;\n}\n\n/**\n * Props for {@link ApiTryIt}.\n *\n * @public\n */\nexport interface ApiTryItProps {\n /** HTTP method, e.g. `post`. */\n readonly method: string;\n /** Operation route, e.g. `/api/user/login`. */\n readonly path: string;\n /** First server URL, shown muted before the path. */\n readonly serverUrl?: string;\n /**\n * The selectable servers. With two or more — and {@link onSelectServer} —\n * the request bar's URL opens a small inline menu instead of the playground's\n * server dialog.\n */\n readonly servers?: readonly ApiServerOption[];\n /** Switch the active server. Receives the chosen server's URL. */\n readonly onSelectServer?: (url: string) => void;\n /** The playground form (fumadocs' PlaygroundClient), shown in the modal. */\n readonly children: ReactNode;\n /** Code sample + response column, injected by the operation layout. */\n readonly example?: ReactNode;\n}\n\nfunction chevronUpDownIcon(): ReactNode {\n return strokeIcon('chevronUpDown', { rounded: true });\n}\n\nfunction playIcon(): ReactNode {\n return filledIcon(PLAY_PATH);\n}\n\nfunction spinnerIcon(): ReactNode {\n return strokeIcon('spinner', { strokeWidth: 2.5, className: 'api-tryit-spin' });\n}\n\nfunction copyIcon(): ReactNode {\n return strokeIcon('copy');\n}\n\nfunction checkIcon(): ReactNode {\n return strokeIcon('check', { strokeWidth: 2.5, rounded: true });\n}\n\n/* --- Enum value menus --------------------------------------------------- */\n\n/**\n * The enum (\"Value in\") chips on the schema are rendered by fumadocs, so their\n * open state cannot live in React. One delegated listener per document drives\n * them all: clicking a chip toggles it, clicking among its values leaves it\n * open so they can be selected and copied, and clicking away or pressing\n * Escape closes.\n */\nconst ENUM_CARD =\n 'div[class*=\"prose-no-margin\"] > div[class*=\"mt-2\"][class*=\"flex-row\"] >' +\n ' div[class*=\"flex-col\"][class*=\"bg-fd-secondary\"]';\n\nlet enumMenuUsers = 0;\nlet detachEnumMenus: (() => void) | null = null;\n\nfunction installEnumMenus(): void {\n const closeAll = (except?: Element | null) => {\n document.querySelectorAll(`${ENUM_CARD}[data-open]`).forEach((card) => {\n if (card !== except) {\n card.removeAttribute('data-open');\n }\n });\n };\n\n const onClick = (event: globalThis.MouseEvent) => {\n const target = event.target as Element | null;\n const card = target?.closest<HTMLElement>(ENUM_CARD) ?? null;\n // A click among the values must not close the menu — that is how a reader\n // selects and copies them.\n if (card && target?.closest('ul') && card.hasAttribute('data-open')) {\n return;\n }\n closeAll(card);\n card?.toggleAttribute('data-open');\n };\n\n const onKey = (event: globalThis.KeyboardEvent) => {\n if (event.key === 'Escape') {\n closeAll();\n }\n };\n\n document.addEventListener('click', onClick);\n document.addEventListener('keydown', onKey);\n detachEnumMenus = () => {\n document.removeEventListener('click', onClick);\n document.removeEventListener('keydown', onKey);\n closeAll();\n };\n}\n\n/** Drive the schema's enum menus while an operation is on the page. */\nfunction useEnumMenus(): void {\n useEffect(() => {\n enumMenuUsers += 1;\n if (enumMenuUsers === 1) {\n installEnumMenus();\n }\n return () => {\n enumMenuUsers -= 1;\n if (enumMenuUsers === 0) {\n detachEnumMenus?.();\n detachEnumMenus = null;\n }\n };\n }, []);\n}\n\n/** Render a path as bold segments separated by muted slashes. */\nfunction pathSegments(path: string): ReactNode {\n const parts = path.split('/').filter(Boolean);\n return parts.map((part, index) => (\n <span key={`${String(index)}-${part}`} className=\"api-tryit-seg\">\n <span className=\"api-tryit-slash\">/</span>\n {part}\n </span>\n ));\n}\n\n/**\n * The one-line request bar: a method badge, the live base URL with an\n * environment-selector chevron, and the endpoint path — reading as one URL —\n * with a Send button outside the bar.\n *\n * The base URL, the environment selector, and Send are owned by fumadocs'\n * hidden form (so the URL stays live and Send runs the real request); this bar\n * mirrors the URL via an observer and forwards clicks to those controls.\n */\nfunction RequestBar({\n method,\n path,\n serverUrl,\n servers,\n onSelectServer,\n formRef,\n}: {\n readonly method: string;\n readonly path: string;\n readonly serverUrl: string | undefined;\n readonly servers: readonly ApiServerOption[] | undefined;\n readonly onSelectServer: ((url: string) => void) | undefined;\n readonly formRef: RefObject<HTMLDivElement | null>;\n}) {\n const [baseUrl, setBaseUrl] = useState((serverUrl ?? '').replace(/\\/$/, ''));\n const [copied, setCopied] = useState(false);\n const [loading, setLoading] = useState(false);\n const [menuOpen, setMenuOpen] = useState(false);\n const [menuAt, setMenuAt] = useState<{ top: number; left: number } | null>(null);\n const envRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLUListElement>(null);\n\n // The site can hand over the server list and a setter; without them the bar\n // falls back to the playground's own server dialog. An entry without a URL\n // cannot be selected, so it does not make a menu.\n const selectable = (servers ?? []).filter(\n (option): option is ApiServerOption & { readonly url: string } =>\n typeof option.url === 'string' && option.url !== '',\n );\n const inline =\n onSelectServer && selectable.length > 1 ? { list: selectable, select: onSelectServer } : null;\n\n // Dismiss the menu on an outside click or Escape.\n useEffect(() => {\n if (!menuOpen) {\n return;\n }\n const onDown = (event: globalThis.MouseEvent) => {\n const target = event.target as Node;\n if (!envRef.current?.contains(target) && !menuRef.current?.contains(target)) {\n setMenuOpen(false);\n }\n };\n const onKey = (event: globalThis.KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.stopPropagation();\n setMenuOpen(false);\n }\n };\n document.addEventListener('mousedown', onDown);\n document.addEventListener('keydown', onKey, true);\n return () => {\n document.removeEventListener('mousedown', onDown);\n document.removeEventListener('keydown', onKey, true);\n };\n }, [menuOpen]);\n\n // Mirror fumadocs' hidden controls into the bar: the live server URL (it\n // changes when the environment is switched, and lives in the trigger's\n // <code>), and Send's loading state (fumadocs disables its Send button while\n // the request is in flight).\n useEffect(() => {\n const root = formRef.current;\n if (!root) {\n return;\n }\n const read = () => {\n const text = root.querySelector('form > button code')?.textContent?.trim();\n if (text) {\n setBaseUrl(text.replace(/\\/$/, ''));\n }\n const send = root.querySelector('form > div > button');\n setLoading(send?.hasAttribute('disabled') ?? false);\n };\n read();\n const observer = new MutationObserver(read);\n observer.observe(root, {\n subtree: true,\n childList: true,\n characterData: true,\n attributes: true,\n attributeFilter: ['disabled'],\n });\n return () => {\n observer.disconnect();\n };\n }, [formRef]);\n\n const clickHidden = (selector: string) => {\n const el = formRef.current?.querySelector<HTMLElement>(selector);\n el?.click();\n };\n\n const fullUrl = `${baseUrl}/${path.replace(/^\\/+/, '')}`;\n const copyUrl = () => {\n const flash = () => {\n setCopied(true);\n setTimeout(() => {\n setCopied(false);\n }, 1600);\n };\n void copyToClipboard(fullUrl).then((ok) => {\n if (ok) {\n flash();\n }\n });\n };\n\n return (\n <div className=\"api-tryit-reqline not-prose\">\n <div className=\"api-tryit-reqbar\">\n <span className=\"api-tryit-reqmethod\" data-method={method.toLowerCase()}>\n {method.toUpperCase()}\n </span>\n <div className=\"api-tryit-reqscroll\">\n <div className=\"api-tryit-envwrap\">\n <button\n type=\"button\"\n ref={envRef}\n className=\"api-tryit-env\"\n aria-label=\"Change server\"\n aria-haspopup={inline ? 'listbox' : 'dialog'}\n aria-expanded={inline ? menuOpen : undefined}\n onClick={() => {\n if (inline) {\n const rect = envRef.current?.getBoundingClientRect();\n if (rect) {\n setMenuAt({ top: rect.bottom + 7, left: rect.left - 8 });\n }\n setMenuOpen((prev) => !prev);\n } else {\n clickHidden('form > button');\n }\n }}\n >\n <span className=\"api-tryit-baseurl\">{baseUrl}</span>\n {chevronUpDownIcon()}\n </button>\n {inline && menuOpen && menuAt\n ? createPortal(\n <ul\n ref={menuRef}\n className=\"api-tryit-envmenu\"\n role=\"listbox\"\n aria-label=\"API server\"\n style={{ top: menuAt.top, left: menuAt.left }}\n >\n {inline.list.map((option) => {\n const active = option.url.replace(/\\/$/, '') === baseUrl;\n return (\n <li key={option.url}>\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={active}\n className=\"api-tryit-envitem\"\n data-active={active ? '' : undefined}\n onClick={() => {\n inline.select(option.url);\n setMenuOpen(false);\n }}\n >\n <span className=\"api-tryit-envcheck\">\n {active ? checkIcon() : null}\n </span>\n <span className=\"api-tryit-envurl\">{option.url}</span>\n </button>\n </li>\n );\n })}\n </ul>,\n document.body,\n )\n : null}\n </div>\n <span className=\"api-tryit-reqpath\">{pathSegments(path)}</span>\n </div>\n <button\n type=\"button\"\n className=\"api-tryit-copy\"\n aria-label={copied ? 'Copied' : 'Copy URL'}\n data-copied={copied ? '' : undefined}\n onClick={copyUrl}\n >\n {copied ? checkIcon() : copyIcon()}\n </button>\n </div>\n <button\n type=\"button\"\n className=\"api-tryit-send\"\n data-loading={loading ? '' : undefined}\n disabled={loading}\n onClick={() => {\n clickHidden('form > div > button');\n }}\n >\n {loading ? 'Sending' : 'Send'}\n {loading ? spinnerIcon() : playIcon()}\n </button>\n </div>\n );\n}\n\n/**\n * Compact endpoint bar + two-column modal playground.\n *\n * @param props - method, path, optional server URL, the form, and the example column\n * @public\n */\nexport function ApiTryIt({\n method,\n path,\n serverUrl,\n servers,\n onSelectServer,\n children,\n example,\n}: ApiTryItProps) {\n const [open, setOpen] = useState(false);\n const [mounted, setMounted] = useState(false);\n const formRef = useRef<HTMLDivElement>(null);\n\n // Click-to-open menus for the schema's enum chips on this page.\n useEnumMenus();\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n useEffect(() => {\n if (!open) {\n return;\n }\n const onKey = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n setOpen(false);\n }\n };\n document.addEventListener('keydown', onKey);\n document.body.style.overflow = 'hidden';\n // Marks the modal open so the stylesheet can lift fumadocs' Base UI popups\n // (select, dialog, popover) above the modal — they portal to <body> at a low\n // z-index and would otherwise open behind it.\n document.body.classList.add('api-tryit-open');\n return () => {\n document.removeEventListener('keydown', onKey);\n document.body.style.overflow = '';\n document.body.classList.remove('api-tryit-open');\n };\n }, [open]);\n\n const host = serverUrl ? serverUrl.replace(/^https?:\\/\\//, '').replace(/\\/$/, '') : null;\n\n const onBackdrop = (event: MouseEvent<HTMLDivElement>) => {\n if (event.target === event.currentTarget) {\n setOpen(false);\n }\n };\n\n return (\n <>\n <div className=\"api-tryit-bar not-prose\">\n <span className=\"api-tryit-method\" data-method={method.toLowerCase()}>\n {method.toUpperCase()}\n </span>\n <span className=\"api-tryit-url\">\n {host ? <span className=\"api-tryit-host\">{host}</span> : null}\n <span className=\"api-tryit-path\">{path}</span>\n </span>\n <button\n type=\"button\"\n className=\"api-tryit-btn\"\n onClick={() => {\n setOpen(true);\n }}\n >\n Try it\n {filledIcon(PLAY_PATH, { size: 11 })}\n </button>\n </div>\n {mounted && open\n ? createPortal(\n <div className=\"api-tryit-overlay\" onClick={onBackdrop}>\n <div\n className=\"api-tryit-modal\"\n data-columns={example ? '2' : '1'}\n role=\"dialog\"\n aria-label=\"API playground\"\n >\n {/* No close button: clicking the backdrop or pressing Escape\n closes the playground. */}\n <div className=\"api-tryit-form\" ref={formRef}>\n <RequestBar\n method={method}\n path={path}\n serverUrl={serverUrl}\n servers={servers}\n onSelectServer={onSelectServer}\n formRef={formRef}\n />\n <div className=\"api-tryit-scroll\">{children}</div>\n </div>\n {example ? <div className=\"api-tryit-example\">{example}</div> : null}\n </div>\n </div>,\n document.body,\n )\n : null}\n </>\n );\n}\n\n// Marker the operation layout checks before injecting the `example` prop, so it\n// never leaks onto a plain <form> element when a site uses its own playground.\nApiTryIt.acceptsExample = true;\n\n/* --- The JSON body editor ------------------------------------------------ */\n\n/** One highlighted run of the source. */\ninterface JsonToken {\n readonly text: string;\n readonly kind?: 'key' | 'string' | 'number' | 'literal' | 'punctuation';\n}\n\n/**\n * Split JSON into highlight runs. Strings are matched first, so a `true` or a\n * brace inside a string is never mistaken for a literal or punctuation; a string\n * followed by a colon is a key.\n */\nfunction tokenizeJson(source: string): JsonToken[] {\n const pattern =\n /(\"(?:\\\\.|[^\"\\\\])*\")(\\s*:)?|(-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)|\\b(true|false|null)\\b|([{}[\\],:])/g;\n const tokens: JsonToken[] = [];\n let last = 0;\n let match: RegExpExecArray | null;\n\n while ((match = pattern.exec(source)) !== null) {\n if (match.index > last) {\n tokens.push({ text: source.slice(last, match.index) });\n }\n if (match[1] !== undefined) {\n if (match[2] !== undefined) {\n tokens.push({ text: match[1], kind: 'key' });\n tokens.push({ text: match[2], kind: 'punctuation' });\n } else {\n tokens.push({ text: match[1], kind: 'string' });\n }\n } else if (match[3] !== undefined) {\n tokens.push({ text: match[3], kind: 'number' });\n } else if (match[4] !== undefined) {\n tokens.push({ text: match[4], kind: 'literal' });\n } else if (match[5] !== undefined) {\n tokens.push({ text: match[5], kind: 'punctuation' });\n }\n last = pattern.lastIndex;\n }\n if (last < source.length) {\n tokens.push({ text: source.slice(last) });\n }\n return tokens;\n}\n\n/**\n * Write to a React-controlled textarea so its onChange still fires. Assigning\n * `.value` directly is swallowed by React's synthetic-event layer, so the write\n * goes through the native setter and is announced with an `input` event.\n */\nfunction setReactTextareaValue(el: HTMLTextAreaElement, next: string): void {\n const descriptor = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value');\n // eslint-disable-next-line @typescript-eslint/unbound-method -- bound via .call below\n const setter = descriptor?.set;\n setter?.call(el, next);\n el.dispatchEvent(new Event('input', { bubbles: true }));\n}\n\n/**\n * The JSON body editor.\n *\n * Fumadocs renders the raw-JSON body as a plain textarea: no highlighting, no\n * formatting, and a validation error shown only as a bare line of text. This\n * replaces the *presentation* while leaving fumadocs' own textarea mounted and\n * authoritative — every edit is written back to it, so its parser and the form\n * engine stay in charge of the request. Highlighting is a mirror element behind\n * a transparent-text textarea; the mirror also sizes the editor, so it grows\n * with its content instead of holding a fixed empty box.\n */\nfunction JsonBodyEditor({ sectionRef }: { readonly sectionRef: RefObject<HTMLElement | null> }) {\n const sourceRef = useRef<HTMLTextAreaElement | null>(null);\n const [value, setValue] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [copied, setCopied] = useState(false);\n\n // Track fumadocs' textarea: it mounts when JSON mode opens and unmounts when\n // the reader switches back to the field inputs.\n useEffect(() => {\n const root = sectionRef.current;\n if (!root) {\n return;\n }\n const read = () => {\n const el = root.querySelector<HTMLTextAreaElement>('textarea:not(.api-json-input)');\n sourceRef.current = el;\n setValue(el ? el.value : null);\n };\n read();\n const observer = new MutationObserver(read);\n observer.observe(root, { subtree: true, childList: true });\n return () => {\n observer.disconnect();\n };\n }, [sectionRef]);\n\n if (value === null) {\n return null;\n }\n\n const push = (next: string) => {\n setValue(next);\n try {\n JSON.parse(next);\n setError(null);\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : 'Invalid JSON.');\n }\n if (sourceRef.current) {\n setReactTextareaValue(sourceRef.current, next);\n }\n };\n\n const format = () => {\n try {\n push(JSON.stringify(JSON.parse(value), null, 2));\n } catch {\n /* Leave invalid JSON as typed; the error bar already explains why. */\n }\n };\n\n const copy = () => {\n const flash = () => {\n setCopied(true);\n setTimeout(() => {\n setCopied(false);\n }, 1600);\n };\n void copyToClipboard(value).then((ok) => {\n if (ok) {\n flash();\n }\n });\n };\n\n // Tab indents instead of leaving the field, as in any code editor.\n const onKeyDown = (event: ReactKeyboardEvent<HTMLTextAreaElement>) => {\n if (event.key !== 'Tab') {\n return;\n }\n event.preventDefault();\n const el = event.currentTarget;\n const { selectionStart: start, selectionEnd: end } = el;\n const next = `${value.slice(0, start)} ${value.slice(end)}`;\n push(next);\n requestAnimationFrame(() => {\n el.selectionStart = el.selectionEnd = start + 2;\n });\n };\n\n return (\n <div className=\"api-json\" data-invalid={error ? '' : undefined}>\n <div className=\"api-json-toolbar\">\n <button\n type=\"button\"\n className=\"api-json-action\"\n onClick={format}\n disabled={error !== null}\n >\n Format\n </button>\n <button type=\"button\" className=\"api-json-action\" onClick={copy}>\n {copied ? 'Copied' : 'Copy'}\n </button>\n </div>\n <div className=\"api-json-editor\">\n {/* The mirror paints the highlighting and sets the editor's height. */}\n <pre className=\"api-json-mirror\" aria-hidden=\"true\">\n {tokenizeJson(value).map((token, index) => (\n <span key={`${String(index)}-${token.kind ?? 'plain'}`} data-token={token.kind}>\n {token.text}\n </span>\n ))}\n {'\\n'}\n </pre>\n <textarea\n className=\"api-json-input\"\n value={value}\n spellCheck={false}\n aria-label=\"Request body JSON\"\n onChange={(event) => {\n push(event.target.value);\n }}\n onKeyDown={onKeyDown}\n />\n </div>\n {error ? (\n <p className=\"api-json-error\" role=\"alert\">\n {error}\n </p>\n ) : null}\n </div>\n );\n}\n\n/**\n * An always-open playground section — pass it as the playground's\n * `CollapsiblePanel` so Authorization and Body render as visible cards, as\n * Mintlify does, instead of collapsed rows.\n *\n * @param props - the section title and its fields\n * @public\n */\nexport function ApiPlaygroundSection({\n title,\n type,\n children,\n}: {\n readonly title?: ReactNode;\n /**\n * Which panel this is (`body`, `authorization`, `query`, …) — fumadocs passes\n * it to the playground's `CollapsiblePanel` as `data-type`. Rendered onto the\n * section so styling can target one panel precisely instead of guessing from\n * the utility classes its buttons happen to share.\n */\n readonly type?: string;\n readonly children?: ReactNode;\n}) {\n const sectionRef = useRef<HTMLElement>(null);\n return (\n <section className=\"api-tryit-section\" data-type={type} ref={sectionRef}>\n {title ? <h4 className=\"api-tryit-section-title\">{title}</h4> : null}\n {children}\n {/* Renders only while the body panel's raw-JSON editor is open. */}\n {type === 'body' ? <JsonBodyEditor sectionRef={sectionRef} /> : null}\n </section>\n );\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
  import { copyToClipboard } from '../chunk-JCYR6RPE.js';
3
- import { filledIcon, PLAY_PATH, strokeIcon } from '../chunk-6H6OB7YP.js';
3
+ import { filledIcon, PLAY_PATH, strokeIcon } from '../chunk-FSB3DLMU.js';
4
4
  import { useState, useRef, useEffect } from 'react';
5
5
  import { createPortal } from 'react-dom';
6
6
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';