fumadocs-openapi
Version:
Generate MDX docs for your OpenAPI spec
67 lines (65 loc) • 2.37 kB
JavaScript
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