UNPKG

fumadocs-openapi

Version:

Generate MDX docs for your OpenAPI spec

67 lines (65 loc) 2.37 kB
import { defaultSamples } from "../../../requests/generators/index.js"; import { UsageTabLazy, UsageTabsSelectorLazy } from "./lazy.js"; import { ResponseTabs } from "../response-tabs.js"; import { jsx, jsxs } from "react/jsx-runtime"; import { CodeBlockTab, CodeBlockTabs, CodeBlockTabsList, CodeBlockTabsTrigger } from "fumadocs-ui/components/codeblock"; //#region src/ui/operation/usage-tabs/index.tsx async function UsageTabs({ method, ctx }) { let { renderAPIExampleUsageTabs, renderAPIExampleLayout } = ctx.content ?? {}; renderAPIExampleLayout ??= (slots) => { return /* @__PURE__ */ jsxs("div", { className: "prose-no-margin", children: [ slots.selector, slots.usageTabs, slots.responseTabs ] }); }; renderAPIExampleUsageTabs ??= (generators$1) => { if (generators$1.length === 0) return null; return /* @__PURE__ */ jsxs(CodeBlockTabs, { groupId: "fumadocs_openapi_requests", defaultValue: generators$1[0].id, children: [/* @__PURE__ */ jsx(CodeBlockTabsList, { children: generators$1.map((item) => /* @__PURE__ */ jsx(CodeBlockTabsTrigger, { value: item.id, children: item.label ?? item.lang }, item.id)) }), generators$1.map((item) => /* @__PURE__ */ jsx(CodeBlockTab, { value: item.id, children: /* @__PURE__ */ jsx(UsageTabLazy, { ...item }) }, item.id))] }); }; let generators = [...defaultSamples]; if (ctx.generateCodeSamples) generators.push(...await ctx.generateCodeSamples(method)); if (method["x-codeSamples"]) for (const sample of method["x-codeSamples"]) generators.push("id" in sample && typeof sample.id === "string" ? sample : { id: sample.lang, ...sample }); generators = dedupe(generators); return renderAPIExampleLayout({ selector: method["x-exclusiveCodeSample"] ? null : /* @__PURE__ */ jsx(UsageTabsSelectorLazy, {}), usageTabs: await renderAPIExampleUsageTabs(generators, ctx), responseTabs: /* @__PURE__ */ jsx(ResponseTabs, { operation: method, ctx }) }, ctx); } /** * Remove duplicated ids */ function dedupe(samples) { const set = /* @__PURE__ */ new Set(); const out = []; for (let i = samples.length - 1; i >= 0; i--) { const item = samples[i]; if (set.has(item.id)) continue; set.add(item.id); if (item.source !== false) out.unshift(item); } return out; } //#endregion export { UsageTabs }; //# sourceMappingURL=index.js.map