sourcey 3.6.1 → 3.6.3

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.
Files changed (33) hide show
  1. package/dist/client/tabs.js +62 -36
  2. package/dist/components/layout/Head.d.ts.map +1 -1
  3. package/dist/components/layout/Head.js +7 -6
  4. package/dist/components/openapi/CodeSamples.d.ts.map +1 -1
  5. package/dist/components/openapi/CodeSamples.js +4 -4
  6. package/dist/components/openapi/RequestBody.d.ts.map +1 -1
  7. package/dist/components/openapi/RequestBody.js +5 -7
  8. package/dist/components/openapi/Responses.d.ts.map +1 -1
  9. package/dist/components/openapi/Responses.js +14 -24
  10. package/dist/components/schema/ExampleView.d.ts +24 -1
  11. package/dist/components/schema/ExampleView.d.ts.map +1 -1
  12. package/dist/components/schema/ExampleView.js +29 -8
  13. package/dist/config.d.ts +7 -0
  14. package/dist/config.d.ts.map +1 -1
  15. package/dist/config.js +2 -0
  16. package/dist/core/doxygen-loader.d.ts +1 -1
  17. package/dist/core/doxygen-loader.d.ts.map +1 -1
  18. package/dist/core/doxygen-loader.js +2 -1
  19. package/dist/core/rustdoc-loader.d.ts.map +1 -1
  20. package/dist/core/rustdoc-loader.js +10 -7
  21. package/dist/core/rustdoc-render.d.ts +6 -0
  22. package/dist/core/rustdoc-render.d.ts.map +1 -1
  23. package/dist/core/rustdoc-render.js +28 -5
  24. package/dist/dev-server.js +1 -1
  25. package/dist/renderer/context.d.ts +1 -0
  26. package/dist/renderer/context.d.ts.map +1 -1
  27. package/dist/site-assembly.d.ts.map +1 -1
  28. package/dist/site-assembly.js +2 -1
  29. package/dist/themes/default/sourcey.css +13 -1
  30. package/dist/utils/example-variants.d.ts +31 -0
  31. package/dist/utils/example-variants.d.ts.map +1 -0
  32. package/dist/utils/example-variants.js +99 -0
  33. package/package.json +2 -2
@@ -34,13 +34,13 @@
34
34
  trigger.setAttribute('aria-expanded', isOpen ? 'false' : 'true');
35
35
  });
36
36
 
37
- // Select a language from the dropdown
37
+ // Select a language / example variant from the dropdown
38
38
  document.addEventListener('click', function (e) {
39
39
  var option = e.target.closest('.code-lang-option');
40
40
  if (!option) return;
41
41
 
42
- var container = option.closest('.code-group');
43
- var index = option.getAttribute('data-lang-index');
42
+ var dropdown = option.closest('.code-lang-dropdown');
43
+ var canSync = !!(dropdown && dropdown.hasAttribute('data-lang-sync'));
44
44
  var lang = option.textContent.trim();
45
45
 
46
46
  // Close the menu
@@ -52,17 +52,16 @@
52
52
  }
53
53
 
54
54
  var scrollY = window.scrollY;
55
- activateLang(container, index);
55
+ activateLang(option);
56
56
 
57
- // Sync language across all code-sample groups
58
- if (lang !== selectedLang) {
57
+ // Sync language across code-sample groups only (not example variants).
58
+ if (canSync && lang !== selectedLang) {
59
59
  selectedLang = lang;
60
+ var ownGroup = option.closest('.code-group');
60
61
  document.querySelectorAll('.code-group').forEach(function (group) {
61
- if (group === container || !group.querySelector('.code-lang-dropdown')) return;
62
+ if (group === ownGroup || !group.querySelector('.code-lang-dropdown[data-lang-sync]')) return;
62
63
  group.querySelectorAll('.code-lang-option').forEach(function (opt) {
63
- if (opt.textContent.trim() === lang) {
64
- activateLang(group, opt.getAttribute('data-lang-index'));
65
- }
64
+ if (opt.textContent.trim() === lang) activateLang(opt);
66
65
  });
67
66
  });
68
67
  }
@@ -70,32 +69,51 @@
70
69
  window.scrollTo(0, scrollY);
71
70
  });
72
71
 
73
- function activateLang(container, index) {
74
- // Update dropdown label
75
- var options = container.querySelectorAll('.code-lang-option');
76
- var label = container.querySelector('.code-lang-label');
77
- options.forEach(function (opt) {
78
- var isActive = opt.getAttribute('data-lang-index') === index;
79
- opt.setAttribute('aria-selected', isActive ? 'true' : 'false');
80
- opt.className = opt.className.replace(/(dark:)?text-\[rgb\([^\]]+\)\]/g, '').trim();
81
- if (isActive) {
82
- opt.classList.add('text-[rgb(var(--color-primary))]', 'dark:text-[rgb(var(--color-primary-light))]');
83
- if (label) label.textContent = opt.textContent.trim();
84
- // Update trigger icon to match selected language
85
- var triggerIcon = container.querySelector('.code-lang-trigger .code-lang-icon');
86
- var optIcon = opt.querySelector('.lang-icon');
87
- if (triggerIcon && optIcon) {
88
- triggerIcon.innerHTML = optIcon.outerHTML;
72
+ // The panels a dropdown controls. A header variant dropdown (in the shared
73
+ // card header) drives the matching response status panel; otherwise panels
74
+ // live in the dropdown's own `.code-lang-scope` or `.code-group`.
75
+ function panelScopeForOption(option) {
76
+ var headerWrap = option.closest('[data-response-dropdown]');
77
+ if (headerWrap) {
78
+ var idx = headerWrap.getAttribute('data-response-dropdown');
79
+ var group = headerWrap.closest('.code-group');
80
+ var panel = group && group.querySelector('.response-panel[data-response-panel="' + idx + '"]');
81
+ if (panel) return panel;
82
+ }
83
+ return option.closest('.code-lang-scope') || option.closest('.code-group');
84
+ }
85
+
86
+ function activateLang(option) {
87
+ var dropdown = option.closest('.code-lang-dropdown');
88
+ var scope = panelScopeForOption(option);
89
+ var index = option.getAttribute('data-lang-index');
90
+
91
+ // Update the dropdown label + options (label/trigger live in the dropdown,
92
+ // which for a header variant switcher is separate from the panel scope).
93
+ if (dropdown) {
94
+ var label = dropdown.querySelector('.code-lang-label');
95
+ dropdown.querySelectorAll('.code-lang-option').forEach(function (opt) {
96
+ var isActive = opt.getAttribute('data-lang-index') === index;
97
+ opt.setAttribute('aria-selected', isActive ? 'true' : 'false');
98
+ opt.className = opt.className.replace(/(dark:)?text-\[rgb\([^\]]+\)\]/g, '').trim();
99
+ if (isActive) {
100
+ opt.classList.add('text-[rgb(var(--color-primary))]', 'dark:text-[rgb(var(--color-primary-light))]');
101
+ if (label) label.textContent = opt.textContent.trim();
102
+ var triggerIcon = dropdown.querySelector('.code-lang-trigger .code-lang-icon');
103
+ var optIcon = opt.querySelector('.lang-icon');
104
+ if (triggerIcon && optIcon) triggerIcon.innerHTML = optIcon.outerHTML;
105
+ } else {
106
+ opt.classList.add('text-[rgb(var(--color-stone-600))]', 'dark:text-[rgb(var(--color-stone-400))]');
89
107
  }
90
- } else {
91
- opt.classList.add('text-[rgb(var(--color-stone-600))]', 'dark:text-[rgb(var(--color-stone-400))]');
92
- }
93
- });
108
+ });
109
+ }
94
110
 
95
- // Update panels
96
- container.querySelectorAll('.code-lang-panel').forEach(function (p) {
97
- p.classList.toggle('active', p.getAttribute('data-lang-panel') === index);
98
- });
111
+ // Update panels within the controlled scope.
112
+ if (scope) {
113
+ scope.querySelectorAll('.code-lang-panel').forEach(function (p) {
114
+ p.classList.toggle('active', p.getAttribute('data-lang-panel') === index);
115
+ });
116
+ }
99
117
  }
100
118
 
101
119
  // ── Response Tabs ──────────────────────────────────────────────────
@@ -120,6 +138,11 @@
120
138
  p.classList.toggle('active', p.getAttribute('data-response-panel') === index);
121
139
  });
122
140
 
141
+ // Show only the active status's variant switcher in the header.
142
+ container.querySelectorAll('[data-response-dropdown]').forEach(function (d) {
143
+ d.classList.toggle('hidden', d.getAttribute('data-response-dropdown') !== index);
144
+ });
145
+
123
146
  window.scrollTo(0, scrollY);
124
147
  });
125
148
 
@@ -132,8 +155,11 @@
132
155
  var container = btn.closest('.code-group') || btn.closest('.prose-code-block');
133
156
  if (!container) return;
134
157
 
135
- // Find the active panel's code, or the nearest code element
136
- var activePanel = container.querySelector('.code-lang-panel.active, .response-panel.active');
158
+ // Find the active panel's code, or the nearest code element. With nested
159
+ // panels (a variant switcher inside a response tab), prefer the deepest
160
+ // active panel, which is last in document order.
161
+ var activePanels = container.querySelectorAll('.code-lang-panel.active, .response-panel.active');
162
+ var activePanel = activePanels.length ? activePanels[activePanels.length - 1] : null;
137
163
  var codeEl = activePanel
138
164
  ? activePanel.querySelector('code, .code-block, .font-mono')
139
165
  : container.querySelector('code, .code-block, .font-mono');
@@ -1 +1 @@
1
- {"version":3,"file":"Head.d.ts","sourceRoot":"","sources":["../../../src/components/layout/Head.tsx"],"names":[],"mappings":"AAKA,wBAAgB,IAAI,iCA8FnB"}
1
+ {"version":3,"file":"Head.d.ts","sourceRoot":"","sources":["../../../src/components/layout/Head.tsx"],"names":[],"mappings":"AAKA,wBAAgB,IAAI,iCA+FnB"}
@@ -12,16 +12,17 @@ export function Head() {
12
12
  ? page.changelog.changelog.versions.find((version) => version.id === page.changelog.permalinkVersionId)
13
13
  : undefined;
14
14
  const siteName = site.name || spec.info.title || "";
15
+ const separator = site.titleSeparator;
15
16
  const pageTitle = page.kind === "markdown"
16
- ? composePageTitle(page.markdown.title, siteName)
17
+ ? composePageTitle(page.markdown.title, siteName, separator)
17
18
  : page.kind === "changelog"
18
19
  ? (() => {
19
20
  const baseTitle = changelogVersion
20
- ? `${changelogVersion.version ?? "Unreleased"} - ${page.changelog.title}`
21
+ ? `${changelogVersion.version ?? "Unreleased"}${separator}${page.changelog.title}`
21
22
  : page.changelog.title;
22
- return composePageTitle(baseTitle, siteName);
23
+ return composePageTitle(baseTitle, siteName, separator);
23
24
  })()
24
- : composePageTitle(siteName, "API Reference");
25
+ : composePageTitle(siteName, "API Reference", separator);
25
26
  const pageDescription = page.kind === "markdown"
26
27
  ? page.markdown.description || pageTitle
27
28
  : page.kind === "changelog"
@@ -58,12 +59,12 @@ export function Head() {
58
59
  `;
59
60
  return (_jsxs("head", { children: [_jsx("meta", { charset: "utf-8" }), _jsx("meta", { name: "viewport", content: "width=device-width, initial-scale=1" }), _jsx("title", { children: pageTitle }), _jsx("meta", { name: "description", content: pageDescription }), _jsx("meta", { name: "generator", content: `Sourcey ${pkg.version}` }), options.pageUrl && _jsx("link", { rel: "canonical", href: options.pageUrl }), _jsx("meta", { property: "og:title", content: pageTitle }), _jsx("meta", { property: "og:description", content: pageDescription }), _jsx("meta", { property: "og:type", content: "website" }), siteName && _jsx("meta", { property: "og:site_name", content: siteName }), options.pageUrl && _jsx("meta", { property: "og:url", content: options.pageUrl }), options.ogImageUrl && _jsx("meta", { property: "og:image", content: options.ogImageUrl }), options.ogImageUrl && _jsx("meta", { property: "og:image:width", content: "1200" }), options.ogImageUrl && _jsx("meta", { property: "og:image:height", content: "630" }), options.ogImageUrl && _jsx("meta", { property: "og:image:type", content: "image/png" }), _jsx("meta", { name: "twitter:card", content: options.ogImageUrl ? "summary_large_image" : "summary" }), _jsx("meta", { name: "twitter:title", content: pageTitle }), _jsx("meta", { name: "twitter:description", content: pageDescription }), options.ogImageUrl && _jsx("meta", { name: "twitter:image", content: options.ogImageUrl }), _jsx("meta", { name: "sourcey-search", content: `${options.assetBase}search-index.json` }), options.alternateLinks?.map((link) => (_jsx("link", { rel: "alternate", type: link.type, href: link.href, title: link.title }, `${link.type}-${link.href}`))), _jsx("link", { rel: "preconnect", href: "https://fonts.googleapis.com" }), _jsx("link", { rel: "preconnect", href: "https://fonts.gstatic.com", crossorigin: "anonymous" }), _jsx("link", { rel: "stylesheet", href: `https://fonts.googleapis.com/css2?family=${encodeURIComponent(fonts.googleFont)}:wght@100..900&display=swap` }), _jsx("style", { dangerouslySetInnerHTML: { __html: themeCSS } }), showLangIconCSS && _jsx("style", { dangerouslySetInnerHTML: { __html: langIconCSS() } }), site.customCSS && _jsx("style", { dangerouslySetInnerHTML: { __html: site.customCSS } }), _jsx("script", { dangerouslySetInnerHTML: { __html: `(function(){var t=localStorage.getItem('sourcey-theme');if(t==='dark')document.documentElement.classList.add('dark')})()` } }), _jsx("link", { rel: "stylesheet", href: `${options.assetBase}sourcey.css` }), site.favicon && _jsx("link", { rel: "icon", href: site.favicon })] }));
60
61
  }
61
- function composePageTitle(title, siteName) {
62
+ function composePageTitle(title, siteName, separator) {
62
63
  if (!siteName)
63
64
  return title;
64
65
  if (!title)
65
66
  return siteName;
66
- return sameTitle(title, siteName) ? title : `${title} - ${siteName}`;
67
+ return sameTitle(title, siteName) ? title : `${title}${separator}${siteName}`;
67
68
  }
68
69
  function sameTitle(left, right) {
69
70
  return normalizeTitle(left) === normalizeTitle(right);
@@ -1 +1 @@
1
- {"version":3,"file":"CodeSamples.d.ts","sourceRoot":"","sources":["../../../src/components/openapi/CodeSamples.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAM/D,UAAU,gBAAgB;IACxB,SAAS,EAAE,mBAAmB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,EAAE,gBAAgB,uCAuE9F"}
1
+ {"version":3,"file":"CodeSamples.d.ts","sourceRoot":"","sources":["../../../src/components/openapi/CodeSamples.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAM/D,UAAU,gBAAgB;IACxB,SAAS,EAAE,mBAAmB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,EAAE,gBAAgB,uCAyE9F"}
@@ -12,8 +12,8 @@ export function CodeSamplesExamples({ operation, serverUrl, codeSampleLangs }) {
12
12
  if (!samples.length)
13
13
  return null;
14
14
  const title = operation.summary ?? `${operation.method.toUpperCase()} ${operation.path}`;
15
- return (_jsxs("div", { class: "code-group not-prose", children: [_jsxs("div", { class: "relative flex items-center justify-between gap-2 px-3", children: [_jsx("div", { class: "flex min-w-0 items-center gap-1.5 font-medium text-xs leading-6 my-1 mb-1.5", children: _jsx("span", { class: "truncate text-[rgb(var(--color-stone-950))] dark:text-[rgb(var(--color-stone-50))]", children: title }) }), _jsxs("div", { class: "flex shrink-0 items-center justify-end gap-1.5", children: [_jsxs("div", { class: "code-lang-dropdown relative", children: [_jsx("button", { type: "button", class: "code-lang-trigger group relative my-1 mb-1.5 flex items-center whitespace-nowrap font-medium leading-6 outline-0 text-[rgb(var(--color-stone-500))] dark:text-[rgb(var(--color-stone-400))] cursor-pointer text-xs", "aria-expanded": "false", "aria-haspopup": "listbox", children: _jsxs("div", { class: "z-10 flex items-center gap-1 rounded-lg px-1.5 group-hover:bg-[rgb(var(--color-stone-200)/0.5)] group-hover:text-[rgb(var(--color-primary))] dark:group-hover:bg-[rgb(var(--color-stone-700)/0.7)] dark:group-hover:text-[rgb(var(--color-primary-light))]", children: [_jsx("span", { class: "code-lang-icon", dangerouslySetInnerHTML: { __html: langIcon(samples[0].lang) } }), _jsx("span", { class: "code-lang-label truncate", children: samples[0].label ?? samples[0].lang }), _jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", class: "size-3.5 shrink-0", children: [_jsx("path", { d: "m7 15 5 5 5-5" }), _jsx("path", { d: "m7 9 5-5 5 5" })] })] }) }), _jsx("div", { class: "code-lang-menu hidden absolute right-0 top-full mt-1 z-20 min-w-[120px] rounded-lg border border-[rgb(var(--color-stone-200))] dark:border-[rgb(255_255_255/0.1)] bg-[rgb(var(--color-background-light))] dark:bg-[rgb(var(--color-stone-900))] shadow-lg py-1", role: "listbox", children: samples.map((sample, i) => (_jsxs("button", { role: "option", "aria-selected": i === 0 ? "true" : "false", class: `code-lang-option w-full text-left px-3 py-1.5 text-xs font-medium flex items-center gap-1.5 hover:bg-[rgb(var(--color-stone-100))] dark:hover:bg-[rgb(255_255_255/0.05)] ${i === 0 ? "text-[rgb(var(--color-primary))] dark:text-[rgb(var(--color-primary-light))]" : "text-[rgb(var(--color-stone-600))] dark:text-[rgb(var(--color-stone-400))]"}`, "data-lang-index": String(i), children: [_jsx("span", { dangerouslySetInnerHTML: { __html: langIcon(sample.lang) } }), sample.label ?? sample.lang] }, i))) })] }), _jsx(CopyButton, {})] })] }), samples.map((sample, i) => {
16
- const html = highlightCode(sample.source, sample.lang);
17
- return (_jsx("div", { class: `code-lang-panel${i === 0 ? " active" : ""}`, "data-lang-panel": String(i), children: _jsx("div", { class: "relative w-full px-4 py-3.5 text-sm leading-6 bg-[rgb(var(--color-code-block-light))] dark:bg-[rgb(var(--color-code-block-dark))] overflow-x-auto", style: "font-variant-ligatures: none", children: _jsx("div", { class: "font-mono whitespace-pre text-xs leading-[1.35rem] code-block", dangerouslySetInnerHTML: { __html: html } }) }) }, i));
18
- })] }));
15
+ return (_jsxs("div", { class: "code-group not-prose", children: [_jsxs("div", { class: "relative flex items-center justify-between gap-2 px-3", children: [_jsx("div", { class: "flex min-w-0 items-center gap-1.5 font-medium text-xs leading-6 my-1 mb-1.5", children: _jsx("span", { class: "truncate text-[rgb(var(--color-stone-950))] dark:text-[rgb(var(--color-stone-50))]", children: title }) }), _jsxs("div", { class: "flex shrink-0 items-center justify-end gap-1.5", children: [_jsxs("div", { class: "code-lang-dropdown relative", "data-lang-sync": true, children: [_jsx("button", { type: "button", class: "code-lang-trigger group relative my-1 mb-1.5 flex items-center whitespace-nowrap font-medium leading-6 outline-0 text-[rgb(var(--color-stone-500))] dark:text-[rgb(var(--color-stone-400))] cursor-pointer text-xs", "aria-expanded": "false", "aria-haspopup": "listbox", children: _jsxs("div", { class: "z-10 flex items-center gap-1 rounded-lg px-1.5 group-hover:bg-[rgb(var(--color-stone-200)/0.5)] group-hover:text-[rgb(var(--color-primary))] dark:group-hover:bg-[rgb(var(--color-stone-700)/0.7)] dark:group-hover:text-[rgb(var(--color-primary-light))]", children: [_jsx("span", { class: "code-lang-icon", dangerouslySetInnerHTML: { __html: langIcon(samples[0].lang) } }), _jsx("span", { class: "code-lang-label truncate", children: samples[0].label ?? samples[0].lang }), _jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", class: "size-3.5 shrink-0", children: [_jsx("path", { d: "m7 15 5 5 5-5" }), _jsx("path", { d: "m7 9 5-5 5 5" })] })] }) }), _jsx("div", { class: "code-lang-menu hidden absolute right-0 top-full mt-1 z-20 min-w-[120px] rounded-lg border border-[rgb(var(--color-stone-200))] dark:border-[rgb(255_255_255/0.1)] bg-[rgb(var(--color-background-light))] dark:bg-[rgb(var(--color-stone-900))] shadow-lg py-1", role: "listbox", children: samples.map((sample, i) => (_jsxs("button", { role: "option", "aria-selected": i === 0 ? "true" : "false", class: `code-lang-option w-full text-left px-3 py-1.5 text-xs font-medium flex items-center gap-1.5 hover:bg-[rgb(var(--color-stone-100))] dark:hover:bg-[rgb(255_255_255/0.05)] ${i === 0 ? "text-[rgb(var(--color-primary))] dark:text-[rgb(var(--color-primary-light))]" : "text-[rgb(var(--color-stone-600))] dark:text-[rgb(var(--color-stone-400))]"}`, "data-lang-index": String(i), children: [_jsx("span", { dangerouslySetInnerHTML: { __html: langIcon(sample.lang) } }), sample.label ?? sample.lang] }, i))) })] }), _jsx(CopyButton, {})] })] }), _jsx("div", { class: "code-card-body", children: samples.map((sample, i) => {
16
+ const html = highlightCode(sample.source, sample.lang);
17
+ return (_jsx("div", { class: `code-lang-panel${i === 0 ? " active" : ""}`, "data-lang-panel": String(i), children: _jsx("div", { class: "relative w-full px-4 py-3.5 text-sm leading-6 bg-[rgb(var(--color-code-block-light))] dark:bg-[rgb(var(--color-code-block-dark))] overflow-x-auto", style: "font-variant-ligatures: none", children: _jsx("div", { class: "font-mono whitespace-pre text-xs leading-[1.35rem] code-block", dangerouslySetInnerHTML: { __html: html } }) }) }, i));
18
+ }) })] }));
19
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RequestBody.d.ts","sourceRoot":"","sources":["../../../src/components/openapi/RequestBody.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAMjE,UAAU,gBAAgB;IACxB,IAAI,EAAE,qBAAqB,CAAC;CAC7B;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,EAAE,gBAAgB,uCA4BrD;AAED,UAAU,uBAAuB;IAC/B,IAAI,EAAE,qBAAqB,CAAC;CAC7B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,IAAI,EAAE,EAAE,uBAAuB,uCAQnE"}
1
+ {"version":3,"file":"RequestBody.d.ts","sourceRoot":"","sources":["../../../src/components/openapi/RequestBody.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAOjE,UAAU,gBAAgB;IACxB,IAAI,EAAE,qBAAqB,CAAC;CAC7B;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,EAAE,gBAAgB,uCA4BrD;AAED,UAAU,uBAAuB;IAC/B,IAAI,EAAE,qBAAqB,CAAC;CAC7B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,IAAI,EAAE,EAAE,uBAAuB,uCAKnE"}
@@ -1,8 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "preact/jsx-runtime";
2
2
  import { SchemaView } from "../schema/SchemaView.js";
3
- import { ExampleView } from "../schema/ExampleView.js";
3
+ import { ExampleVariantsCard } from "../schema/ExampleView.js";
4
4
  import { Markdown } from "../ui/Markdown.js";
5
5
  import { MediaTypeDetails } from "./MediaTypeDetails.js";
6
+ import { buildExampleVariants } from "../../utils/example-variants.js";
6
7
  /**
7
8
  * Request body content (rendered in the main content column).
8
9
  */
@@ -19,11 +20,8 @@ export function RequestBody({ body }) {
19
20
  * Request body example (rendered in the sticky code panel).
20
21
  */
21
22
  export function RequestBodyExample({ body }) {
22
- const mediaTypes = Object.entries(body.content);
23
- if (!mediaTypes.length)
24
- return null;
25
- const [, content] = mediaTypes[0];
26
- if (!content.schema)
23
+ const variants = buildExampleVariants(body.content);
24
+ if (!variants.length)
27
25
  return null;
28
- return _jsx(ExampleView, { schema: content.schema, title: "Request Body" });
26
+ return _jsx(ExampleVariantsCard, { variants: variants, title: "Request Body" });
29
27
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Responses.d.ts","sourceRoot":"","sources":["../../../src/components/openapi/Responses.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAS9D,UAAU,cAAc;IACtB,SAAS,EAAE,kBAAkB,EAAE,CAAC;CACjC;AAUD;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,SAAS,EAAE,EAAE,cAAc,uCAoC1D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,EAAE,EAAE,cAAc,uCAiE9D"}
1
+ {"version":3,"file":"Responses.d.ts","sourceRoot":"","sources":["../../../src/components/openapi/Responses.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAQ9D,UAAU,cAAc;IACtB,SAAS,EAAE,kBAAkB,EAAE,CAAC;CACjC;AAUD;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,SAAS,EAAE,EAAE,cAAc,uCAoC1D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,EAAE,EAAE,cAAc,uCAkF9D"}
@@ -1,11 +1,10 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "preact/jsx-runtime";
2
2
  import { httpStatusText } from "../../utils/http.js";
3
3
  import { SchemaDatatype } from "../schema/SchemaDatatype.js";
4
- import { ExampleView } from "../schema/ExampleView.js";
4
+ import { ExampleVariantsCard, VariantBody, VariantDropdown } from "../schema/ExampleView.js";
5
5
  import { Markdown } from "../ui/Markdown.js";
6
6
  import { CopyButton } from "../ui/CopyButton.js";
7
- import { generateExample } from "../../utils/example-generator.js";
8
- import { highlightCode } from "../../utils/highlighter.js";
7
+ import { buildExampleVariants } from "../../utils/example-variants.js";
9
8
  function statusColorClass(code) {
10
9
  if (code.startsWith("2"))
11
10
  return "bg-green-100 text-green-800 dark:bg-green-400/20 dark:text-green-300";
@@ -32,29 +31,20 @@ export function ResponsesCopy({ responses }) {
32
31
  export function ResponsesExamples({ responses }) {
33
32
  if (!responses.length)
34
33
  return null;
35
- const examples = responses
36
- .map((r) => {
37
- const schema = getResponseSchema(r);
38
- if (!schema)
39
- return null;
40
- const example = schema.example ?? generateExample(schema);
41
- if (example === undefined)
42
- return null;
43
- const json = JSON.stringify(example, null, 2);
44
- const html = highlightCode(json, "json");
45
- return { statusCode: r.statusCode, html };
46
- })
47
- .filter(Boolean);
48
- if (!examples.length)
34
+ const groups = responses
35
+ .map((r) => ({ statusCode: r.statusCode, variants: buildExampleVariants(r.content) }))
36
+ .filter((g) => g.variants.length > 0);
37
+ if (!groups.length)
49
38
  return null;
50
- // Single response: use plain ExampleView
51
- if (examples.length === 1) {
52
- const r = responses.find((r) => r.statusCode === examples[0].statusCode);
53
- const schema = getResponseSchema(r);
54
- return _jsx(ExampleView, { schema: schema, title: `${examples[0].statusCode}` });
39
+ // Single status code: a standalone card, with a variant switcher when the
40
+ // response carries more than one example (named examples / content types).
41
+ if (groups.length === 1) {
42
+ return _jsx(ExampleVariantsCard, { variants: groups[0].variants, title: groups[0].statusCode });
55
43
  }
56
- // Multiple responses: tabbed code block with status code tabs in the header
57
- return (_jsxs("div", { class: "response-tabs code-group not-prose", children: [_jsxs("div", { class: "relative flex items-center justify-between gap-2 px-3", children: [_jsx("div", { class: "response-tab-list flex gap-1 overflow-x-auto text-xs leading-6", role: "tablist", children: examples.map((ex, i) => (_jsx("button", { type: "button", role: "tab", "aria-selected": i === 0 ? "true" : "false", class: `response-tab group relative my-1 mb-1.5 flex items-center gap-1.5 whitespace-nowrap font-medium outline-0${i === 0 ? " active" : ""}`, "data-response-index": String(i), children: _jsx("div", { class: "z-10 flex items-center gap-1.5 rounded-lg px-1.5 group-hover:bg-[rgb(var(--color-stone-200)/0.5)] group-hover:text-[rgb(var(--color-primary))] dark:group-hover:bg-[rgb(var(--color-stone-700)/0.7)] dark:group-hover:text-[rgb(var(--color-primary-light))]", children: ex.statusCode }) }, ex.statusCode))) }), _jsx("div", { class: "flex shrink-0 items-center justify-end gap-1.5", children: _jsx(CopyButton, {}) })] }), examples.map((ex, i) => (_jsx("div", { class: `response-panel${i === 0 ? " active" : ""}`, role: "tabpanel", "data-response-panel": String(i), children: _jsx("div", { class: "relative w-full px-4 py-3.5 text-sm leading-6 bg-[rgb(var(--color-code-block-light))] dark:bg-[rgb(var(--color-code-block-dark))] overflow-x-auto", style: "font-variant-ligatures: none", children: _jsx("div", { class: "font-mono whitespace-pre text-xs leading-[1.35rem]", dangerouslySetInnerHTML: { __html: ex.html } }) }) }, ex.statusCode)))] }));
44
+ // Multiple status codes: status tabs on the left of the header; on the right,
45
+ // a per-status variant switcher (shown for the active status) next to copy,
46
+ // matching the language select. Panels live in the clipped card body.
47
+ return (_jsxs("div", { class: "response-tabs code-group not-prose", children: [_jsxs("div", { class: "relative flex items-center justify-between gap-2 px-3", children: [_jsx("div", { class: "response-tab-list flex gap-1 overflow-x-auto text-xs leading-6", role: "tablist", children: groups.map((g, i) => (_jsx("button", { type: "button", role: "tab", "aria-selected": i === 0 ? "true" : "false", class: `response-tab group relative my-1 mb-1.5 flex items-center gap-1.5 whitespace-nowrap font-medium outline-0${i === 0 ? " active" : ""}`, "data-response-index": String(i), children: _jsx("div", { class: "z-10 flex items-center gap-1.5 rounded-lg px-1.5 group-hover:bg-[rgb(var(--color-stone-200)/0.5)] group-hover:text-[rgb(var(--color-primary))] dark:group-hover:bg-[rgb(var(--color-stone-700)/0.7)] dark:group-hover:text-[rgb(var(--color-primary-light))]", children: g.statusCode }) }, g.statusCode))) }), _jsxs("div", { class: "flex shrink-0 items-center justify-end gap-1.5", children: [groups.map((g, i) => g.variants.length > 1 ? (_jsx("div", { "data-response-dropdown": String(i), class: i === 0 ? undefined : "hidden", children: _jsx(VariantDropdown, { variants: g.variants }) }, g.statusCode)) : null), _jsx(CopyButton, {})] })] }), _jsx("div", { class: "code-card-body", children: groups.map((g, i) => (_jsx("div", { class: `response-panel${i === 0 ? " active" : ""}`, role: "tabpanel", "data-response-panel": String(i), children: g.variants.length > 1 ? (g.variants.map((v, j) => (_jsx("div", { class: `code-lang-panel${j === 0 ? " active" : ""}`, "data-lang-panel": String(j), children: _jsx(VariantBody, { variant: v }) }, j)))) : (_jsx(VariantBody, { variant: g.variants[0] })) }, g.statusCode))) })] }));
58
48
  }
59
49
  function renderResponseType(r) {
60
50
  const schema = getResponseSchema(r);
@@ -1,10 +1,33 @@
1
1
  import type { NormalizedSchema } from "../../core/types.js";
2
+ import type { ExampleVariant } from "../../utils/example-variants.js";
3
+ /** Render one example body (highlighted JSON or an external-example link). */
4
+ export declare function VariantBody({ variant, showCopy }: {
5
+ variant: ExampleVariant;
6
+ showCopy?: boolean;
7
+ }): import("preact").JSX.Element;
8
+ /**
9
+ * Variant switcher reusing the code-sample language dropdown markup/JS, minus
10
+ * the cross-group language sync (no `data-lang-sync`). Sits in the card header
11
+ * to the left of the copy button, identical to the language select.
12
+ */
13
+ export declare function VariantDropdown({ variants }: {
14
+ variants: ExampleVariant[];
15
+ }): import("preact").JSX.Element;
16
+ interface ExampleVariantsCardProps {
17
+ variants: ExampleVariant[];
18
+ title?: string;
19
+ }
20
+ /**
21
+ * Standalone example card: a `.code-group` with an optional title, a variant
22
+ * switcher when more than one example exists, and a copy button.
23
+ */
24
+ export declare function ExampleVariantsCard({ variants, title }: ExampleVariantsCardProps): import("preact").JSX.Element | null;
2
25
  interface ExampleViewProps {
3
26
  schema: NormalizedSchema;
4
27
  title?: string;
5
28
  }
6
29
  /**
7
- * Renders a JSON example in a stone-themed code card with copy button.
30
+ * Renders a schema-derived JSON example in a stone-themed code card.
8
31
  */
9
32
  export declare function ExampleView({ schema, title }: ExampleViewProps): import("preact").JSX.Element | null;
10
33
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"ExampleView.d.ts","sourceRoot":"","sources":["../../../src/components/schema/ExampleView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAK5D,UAAU,gBAAgB;IACxB,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,gBAAgB,uCA8B9D"}
1
+ {"version":3,"file":"ExampleView.d.ts","sourceRoot":"","sources":["../../../src/components/schema/ExampleView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAQtE,8EAA8E;AAC9E,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;IAAE,OAAO,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,gCA8BjG;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,cAAc,EAAE,CAAA;CAAE,gCAgC3E;AAED,UAAU,wBAAwB;IAChC,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,wBAAwB,uCAsChF;AAED,UAAU,gBAAgB;IACxB,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,gBAAgB,uCAI9D"}
@@ -1,15 +1,36 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "preact/jsx-runtime";
2
- import { generateExample } from "../../utils/example-generator.js";
3
- import { highlightCode } from "../../utils/highlighter.js";
2
+ import { variantFromSchema } from "../../utils/example-variants.js";
4
3
  import { CopyButton } from "../ui/CopyButton.js";
4
+ const BODY_WRAP = "relative w-full px-4 py-3.5 text-sm leading-6 bg-[rgb(var(--color-code-block-light))] dark:bg-[rgb(var(--color-code-block-dark))] overflow-x-auto";
5
+ const BODY_CODE = "font-mono whitespace-pre text-xs leading-[1.35rem]";
6
+ /** Render one example body (highlighted JSON or an external-example link). */
7
+ export function VariantBody({ variant, showCopy }) {
8
+ return (_jsxs("div", { class: BODY_WRAP, style: "font-variant-ligatures: none", children: [showCopy && (_jsx("div", { class: "absolute top-3 right-4 z-10", children: _jsx(CopyButton, {}) })), variant.summary && (_jsx("p", { class: "mb-2 text-xs text-[rgb(var(--color-gray-500))] dark:text-[rgb(var(--color-gray-400))]", children: variant.summary })), variant.externalValue ? (_jsxs("p", { class: "text-xs", children: [_jsx("span", { class: "text-[rgb(var(--color-gray-500))]", children: "External example: " }), _jsx("a", { href: variant.externalValue, target: "_blank", rel: "noopener noreferrer", class: "break-all text-[rgb(var(--color-primary))] hover:underline", children: variant.externalValue })] })) : (_jsx("div", { class: BODY_CODE, dangerouslySetInnerHTML: { __html: variant.html } }))] }));
9
+ }
10
+ /**
11
+ * Variant switcher reusing the code-sample language dropdown markup/JS, minus
12
+ * the cross-group language sync (no `data-lang-sync`). Sits in the card header
13
+ * to the left of the copy button, identical to the language select.
14
+ */
15
+ export function VariantDropdown({ variants }) {
16
+ return (_jsxs("div", { class: "code-lang-dropdown relative", children: [_jsx("button", { type: "button", class: "code-lang-trigger group relative my-1 mb-1.5 flex items-center whitespace-nowrap font-medium leading-6 outline-0 text-[rgb(var(--color-stone-500))] dark:text-[rgb(var(--color-stone-400))] cursor-pointer text-xs", "aria-expanded": "false", "aria-haspopup": "listbox", children: _jsxs("div", { class: "z-10 flex items-center gap-1 rounded-lg px-1.5 group-hover:bg-[rgb(var(--color-stone-200)/0.5)] group-hover:text-[rgb(var(--color-primary))] dark:group-hover:bg-[rgb(var(--color-stone-700)/0.7)] dark:group-hover:text-[rgb(var(--color-primary-light))]", children: [_jsx("span", { class: "code-lang-label truncate", children: variants[0].label }), _jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", class: "size-3.5 shrink-0", children: [_jsx("path", { d: "m7 15 5 5 5-5" }), _jsx("path", { d: "m7 9 5-5 5 5" })] })] }) }), _jsx("div", { class: "code-lang-menu hidden absolute right-0 top-full mt-1 z-20 min-w-[140px] rounded-lg border border-[rgb(var(--color-stone-200))] dark:border-[rgb(255_255_255/0.1)] bg-[rgb(var(--color-background-light))] dark:bg-[rgb(var(--color-stone-900))] shadow-lg py-1", role: "listbox", children: variants.map((v, i) => (_jsx("button", { role: "option", "aria-selected": i === 0 ? "true" : "false", class: `code-lang-option w-full text-left px-3 py-1.5 text-xs font-medium flex items-center gap-1.5 hover:bg-[rgb(var(--color-stone-100))] dark:hover:bg-[rgb(255_255_255/0.05)] ${i === 0 ? "text-[rgb(var(--color-primary))] dark:text-[rgb(var(--color-primary-light))]" : "text-[rgb(var(--color-stone-600))] dark:text-[rgb(var(--color-stone-400))]"}`, "data-lang-index": String(i), children: v.label }, i))) })] }));
17
+ }
18
+ /**
19
+ * Standalone example card: a `.code-group` with an optional title, a variant
20
+ * switcher when more than one example exists, and a copy button.
21
+ */
22
+ export function ExampleVariantsCard({ variants, title }) {
23
+ if (!variants.length)
24
+ return null;
25
+ const multi = variants.length > 1;
26
+ return (_jsxs("div", { class: "code-group not-prose", children: [(title || multi) && (_jsxs("div", { class: "relative flex items-center justify-between gap-2 px-3", children: [_jsx("div", { class: "flex min-w-0 items-center gap-1.5 font-medium text-xs leading-6 my-1 mb-1.5", children: title && (_jsx("span", { class: "truncate text-[rgb(var(--color-stone-950))] dark:text-[rgb(var(--color-stone-50))]", children: title })) }), _jsxs("div", { class: "flex shrink-0 items-center justify-end gap-1.5", children: [multi && _jsx(VariantDropdown, { variants: variants }), _jsx(CopyButton, {})] })] })), _jsx("div", { class: "code-card-body", children: multi ? (variants.map((v, i) => (_jsx("div", { class: `code-lang-panel${i === 0 ? " active" : ""}`, "data-lang-panel": String(i), children: _jsx(VariantBody, { variant: v }) }, i)))) : (_jsx(VariantBody, { variant: variants[0], showCopy: !title })) })] }));
27
+ }
5
28
  /**
6
- * Renders a JSON example in a stone-themed code card with copy button.
29
+ * Renders a schema-derived JSON example in a stone-themed code card.
7
30
  */
8
31
  export function ExampleView({ schema, title }) {
9
- const example = schema.example ?? generateExample(schema);
10
- if (example === undefined)
32
+ const variant = variantFromSchema(schema, title ?? "Example");
33
+ if (!variant)
11
34
  return null;
12
- const json = JSON.stringify(example, null, 2);
13
- const html = highlightCode(json, "json");
14
- return (_jsxs("div", { class: "code-group not-prose", children: [title && (_jsxs("div", { class: "relative flex items-center justify-between gap-2 px-3", children: [_jsx("div", { class: "flex min-w-0 items-center gap-1.5 font-medium text-xs leading-6 my-1 mb-1.5", children: _jsx("span", { class: "truncate text-[rgb(var(--color-stone-950))] dark:text-[rgb(var(--color-stone-50))]", children: title }) }), _jsx("div", { class: "flex shrink-0 items-center justify-end gap-1.5", children: _jsx(CopyButton, {}) })] })), _jsxs("div", { class: "relative w-full px-4 py-3.5 text-sm leading-6 bg-[rgb(var(--color-code-block-light))] dark:bg-[rgb(var(--color-code-block-dark))] overflow-x-auto", style: "font-variant-ligatures: none", children: [!title && (_jsx("div", { class: "absolute top-3 right-4 z-10", children: _jsx(CopyButton, {}) })), _jsx("div", { class: "font-mono whitespace-pre text-xs leading-[1.35rem]", dangerouslySetInnerHTML: { __html: html } })] })] }));
35
+ return _jsx(ExampleVariantsCard, { variants: [variant], title: title });
15
36
  }
package/dist/config.d.ts CHANGED
@@ -36,6 +36,12 @@ export interface ChangelogConfig {
36
36
  }
37
37
  export interface SourceyConfig {
38
38
  name?: string;
39
+ /**
40
+ * Separator inserted between the page title and the site name in `<title>`/OG
41
+ * metadata, and between fields in generated API search snippets.
42
+ * @default " - "
43
+ */
44
+ titleSeparator?: string;
39
45
  /** Public site origin for absolute feeds, OG metadata, and canonical URLs (e.g. "https://docs.example.com"). */
40
46
  siteUrl?: string;
41
47
  /** Public path prefix when the docs are served from a subpath (e.g. "/reference"). */
@@ -291,6 +297,7 @@ export interface ResolvedChangelogConfig {
291
297
  }
292
298
  export interface ResolvedConfig {
293
299
  name: string;
300
+ titleSeparator: string;
294
301
  siteUrl?: string;
295
302
  baseUrl: string;
296
303
  prettyUrls: PrettyUrls;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/config.js CHANGED
@@ -56,6 +56,7 @@ export function configFromSpec(specPath) {
56
56
  const absSpec = resolve(specPath);
57
57
  return {
58
58
  name: "API Reference",
59
+ titleSeparator: " - ",
59
60
  siteUrl: undefined,
60
61
  baseUrl: "",
61
62
  prettyUrls: false,
@@ -95,6 +96,7 @@ export async function resolveConfigFromRaw(raw, configDir) {
95
96
  const changelog = resolveChangelog(raw.changelog);
96
97
  return {
97
98
  name: raw.name ?? "",
99
+ titleSeparator: raw.titleSeparator ?? " - ",
98
100
  siteUrl: normalizeSiteUrl(raw.siteUrl),
99
101
  baseUrl: normalizeBaseUrl(raw.baseUrl),
100
102
  prettyUrls: resolvePrettyUrls(raw.prettyUrls),
@@ -10,5 +10,5 @@ export declare function rewriteGeneratedDoxygenIncludePath(includePath: string):
10
10
  export declare function rewriteGeneratedDoxygenMarkdown(markdown: string): string;
11
11
  export declare function rewriteGeneratedDoxygenHref(href: string): string;
12
12
  export declare function rewriteGeneratedDoxygenHtmlLinks(html: string): string;
13
- export declare function loadDoxygenTab(config: ResolvedDoxygenConfig, tabSlug: string, tabLabel: string): Promise<DoxygenResult>;
13
+ export declare function loadDoxygenTab(config: ResolvedDoxygenConfig, tabSlug: string, tabLabel: string, titleSeparator: string): Promise<DoxygenResult>;
14
14
  //# sourceMappingURL=doxygen-loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"doxygen-loader.d.ts","sourceRoot":"","sources":["../../src/core/doxygen-loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAqB,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAO7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAA6B,MAAM,iBAAiB,CAAC;AAM1E,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACjC,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMzF;AAED,wBAAgB,kCAAkC,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAoB9E;AAED,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOxE;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOhE;AAED,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAoBrE;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,qBAAqB,EAC7B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,CAAC,CA4GxB"}
1
+ {"version":3,"file":"doxygen-loader.d.ts","sourceRoot":"","sources":["../../src/core/doxygen-loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAqB,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAO7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAA6B,MAAM,iBAAiB,CAAC;AAM1E,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACjC,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMzF;AAED,wBAAgB,kCAAkC,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAoB9E;AAED,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOxE;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOhE;AAED,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAoBrE;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,qBAAqB,EAC7B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,aAAa,CAAC,CA6GxB"}
@@ -53,13 +53,14 @@ export function rewriteGeneratedDoxygenHtmlLinks(html) {
53
53
  return `<code>${label}</code>`;
54
54
  });
55
55
  }
56
- export async function loadDoxygenTab(config, tabSlug, tabLabel) {
56
+ export async function loadDoxygenTab(config, tabSlug, tabLabel, titleSeparator) {
57
57
  let generated;
58
58
  try {
59
59
  generated = await generate({
60
60
  directory: config.xml,
61
61
  language: config.language,
62
62
  sourceUrl: config.sourceUrl,
63
+ titleSeparator,
63
64
  quiet: true,
64
65
  });
65
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"rustdoc-loader.d.ts","sourceRoot":"","sources":["../../src/core/rustdoc-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAgC,MAAM,sBAAsB,CAAC;AACvF,OAAO,KAAK,EAAE,OAAO,EAA6B,MAAM,iBAAiB,CAAC;AAa1E,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,uBAAuB,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,mEAAmE;AACnE,wBAAsB,cAAc,CAClC,MAAM,EAAE,qBAAqB,EAC7B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,GAAE,wBAA6B,GACzC,OAAO,CAAC,mBAAmB,CAAC,CA0F9B;AA2ZD,eAAO,MAAM,sBAAsB,wYAuBzB,CAAC"}
1
+ {"version":3,"file":"rustdoc-loader.d.ts","sourceRoot":"","sources":["../../src/core/rustdoc-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAgC,MAAM,sBAAsB,CAAC;AACvF,OAAO,KAAK,EAAE,OAAO,EAA6B,MAAM,iBAAiB,CAAC;AAa1E,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,uBAAuB,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,mEAAmE;AACnE,wBAAsB,cAAc,CAClC,MAAM,EAAE,qBAAqB,EAC7B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,GAAE,wBAA6B,GACzC,OAAO,CAAC,mBAAmB,CAAC,CA0F9B;AA8ZD,eAAO,MAAM,sBAAsB,wYAuBzB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { runIntrospector, RustdocIntrospectorError } from "./rustdoc-introspector.js";
2
- import { itemAnchor, renderModulePage } from "./rustdoc-render.js";
2
+ import { itemAnchor, itemDisplayName, renderModulePage } from "./rustdoc-render.js";
3
3
  import { renderCodeBlock } from "../utils/markdown.js";
4
4
  /** Load a rustdoc tab from the configured manifest or snapshot. */
5
5
  export async function loadRustdocTab(config, tabSlug, tabLabel, sourceLinks = {}) {
@@ -247,6 +247,8 @@ function signatureForItem(item) {
247
247
  return `macro_rules! ${item.name ?? ""}`;
248
248
  case "proc_macro":
249
249
  return `#[${item.inner.macro_kind === "derive" ? "derive" : "proc_macro"}] ${item.name ?? ""}`;
250
+ case "use":
251
+ return item.inner.is_glob ? `pub use ${item.inner.source}::*;` : `pub use ${item.inner.source};`;
250
252
  default:
251
253
  return item.name ? item.path.join("::") : null;
252
254
  }
@@ -297,23 +299,24 @@ function itemKindLabel(item) {
297
299
  }
298
300
  function collectHeadings(items) {
299
301
  return items
300
- .filter((i) => i.name)
301
302
  .map((i) => ({
302
303
  id: itemAnchor(i),
303
- text: i.name ?? "",
304
+ text: itemDisplayName(i),
304
305
  level: 3,
305
- }));
306
+ }))
307
+ .filter((heading) => heading.text);
306
308
  }
307
309
  function collectSearchEntries(items, moduleTitle) {
308
310
  const out = [];
309
311
  for (const item of items) {
310
- if (!item.name)
312
+ const name = itemDisplayName(item);
313
+ if (!name)
311
314
  continue;
312
- const sig = signatureForItem(item) ?? item.name;
315
+ const sig = signatureForItem(item) ?? name;
313
316
  const docs = item.docs_markdown ?? "";
314
317
  const anchor = itemAnchor(item);
315
318
  out.push({
316
- title: `${itemKindLabel(item).replace("rust ", "")} ${item.name}`,
319
+ title: `${itemKindLabel(item).replace("rust ", "")} ${name}`,
317
320
  content: `${sig}\n${docs}`.slice(0, 500),
318
321
  anchor,
319
322
  category: itemKindLabel(item),
@@ -30,6 +30,12 @@ export declare function encodeImplAnchor(traitName: string, forType: string): st
30
30
  /** Encode a single segment for anchor-ID use: <,>,space and special chars escaped rustdoc-style. */
31
31
  export declare function encodeGenericSegment(value: string): string;
32
32
  export declare function itemAnchor(item: Item): string;
33
+ /**
34
+ * Heading/anchor display name for an item. Re-exports (`use`) carry their name
35
+ * on `inner`, not the top-level `item.name` which rustdoc leaves null, so we
36
+ * derive it from the imported name or the re-exported path (with `::*` for globs).
37
+ */
38
+ export declare function itemDisplayName(item: Item): string;
33
39
  /** Multi-line signature renderer with rustdoc break rules. */
34
40
  export declare function renderSignature(signature: Signature, ctx: RenderContext): string;
35
41
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"rustdoc-render.d.ts","sourceRoot":"","sources":["../../src/core/rustdoc-render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAYH,OAAO,KAAK,EACV,SAAS,EACT,gBAAgB,EAChB,IAAI,EACJ,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,SAAS,EAEV,MAAM,oBAAoB,CAAC;AAG5B,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE;QACX,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,kEAAkE;IAClE,WAAW,EAAE,iBAAiB,EAAE,CAAC;CAClC;AAMD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED,oGAAoG;AACpG,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CA2C7C;AAqBD,8DAA8D;AAC9D,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,GAAG,MAAM,CAMhF;AAuJD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACjC,GAAG,EAAE,aAAa,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAiCxC;AA2BD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAqC1D;AAmBD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,aAAa,GAAG,MAAM,CAIxE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAO9E;AAMD,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,aAAa,GAAG,MAAM,CA0BrE;AAuPD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,IAAI,EACZ,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,EAC5B,GAAG,EAAE,MAAM,GACV,MAAM,CAsCR;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM,CAWxE;AAuBD,iBAAS,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAO5C;AAMD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,cAAc,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,IAAI,EAAE,EACb,GAAG,EAAE,aAAa,GACjB,gBAAgB,CA4BlB;AAmED,eAAO,MAAM,WAAW;;;;;;CAMvB,CAAC"}
1
+ {"version":3,"file":"rustdoc-render.d.ts","sourceRoot":"","sources":["../../src/core/rustdoc-render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAYH,OAAO,KAAK,EACV,SAAS,EACT,gBAAgB,EAChB,IAAI,EACJ,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,SAAS,EAEV,MAAM,oBAAoB,CAAC;AAG5B,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE;QACX,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,kEAAkE;IAClE,WAAW,EAAE,iBAAiB,EAAE,CAAC;CAClC;AAMD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED,oGAAoG;AACpG,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CA2C7C;AAoBD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAMlD;AAQD,8DAA8D;AAC9D,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,GAAG,MAAM,CAMhF;AAuJD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACjC,GAAG,EAAE,aAAa,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAiCxC;AA2BD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAqC1D;AAmBD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,aAAa,GAAG,MAAM,CAIxE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAO9E;AAMD,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,aAAa,GAAG,MAAM,CA0BrE;AA6PD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,IAAI,EACZ,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,EAC5B,GAAG,EAAE,MAAM,GACV,MAAM,CAsCR;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM,CAWxE;AAuBD,iBAAS,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAO5C;AAMD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,cAAc,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,IAAI,EAAE,EACb,GAAG,EAAE,aAAa,GACjB,gBAAgB,CA4BlB;AAmED,eAAO,MAAM,WAAW;;;;;;CAMvB,CAAC"}
@@ -58,7 +58,7 @@ export function itemAnchor(item) {
58
58
  case "struct_field":
59
59
  return `structfield.${slug(item.name)}`;
60
60
  case "use":
61
- return `reexport.${slug(item.name)}`;
61
+ return `reexport.${slug(useBaseName(item.inner))}`;
62
62
  case "module":
63
63
  return `mod.${slug(item.name)}`;
64
64
  case "impl":
@@ -83,6 +83,22 @@ function slug(name) {
83
83
  return "";
84
84
  return name;
85
85
  }
86
+ /** Base name of a re-export: the imported name, or the last path segment. */
87
+ function useBaseName(inner) {
88
+ return inner.name || (inner.source.split("::").filter(Boolean).pop() ?? inner.source);
89
+ }
90
+ /**
91
+ * Heading/anchor display name for an item. Re-exports (`use`) carry their name
92
+ * on `inner`, not the top-level `item.name` which rustdoc leaves null, so we
93
+ * derive it from the imported name or the re-exported path (with `::*` for globs).
94
+ */
95
+ export function itemDisplayName(item) {
96
+ if (item.inner.kind === "use") {
97
+ const base = useBaseName(item.inner);
98
+ return item.inner.is_glob ? `${base}::*` : base;
99
+ }
100
+ return item.name ?? "";
101
+ }
86
102
  // ---------------------------------------------------------------------------
87
103
  // Signature formatter
88
104
  // ---------------------------------------------------------------------------
@@ -366,7 +382,7 @@ export function renderItemHtml(item, ctx) {
366
382
  apiSectionAnchor({
367
383
  level: 4,
368
384
  id: anchor,
369
- text: item.name ?? anchor,
385
+ text: itemDisplayName(item) || anchor,
370
386
  className: "code-header rust-item-header",
371
387
  }),
372
388
  signatureHtml,
@@ -604,6 +620,13 @@ function fallbackSignatureText(item) {
604
620
  return `macro_rules! ${item.name ?? ""}`;
605
621
  case "proc_macro":
606
622
  return `#[${item.inner.macro_kind === "derive" ? "derive" : "proc_macro"}] ${item.name ?? ""}`;
623
+ case "use": {
624
+ const { source, name, is_glob } = item.inner;
625
+ if (is_glob)
626
+ return `pub use ${source}::*;`;
627
+ const lastSegment = source.split("::").filter(Boolean).pop();
628
+ return name && name !== lastSegment ? `pub use ${source} as ${name};` : `pub use ${source};`;
629
+ }
607
630
  default:
608
631
  return null;
609
632
  }
@@ -703,9 +726,9 @@ export function renderModulePage(module, items, ctx) {
703
726
  sidebar.push({
704
727
  label: group,
705
728
  items: members
706
- .filter((m) => m.name)
707
- .sort((a, b) => (a.name ?? "").localeCompare(b.name ?? ""))
708
- .map((m) => ({ text: m.name ?? "", anchor: itemAnchor(m) })),
729
+ .map((m) => ({ text: itemDisplayName(m), anchor: itemAnchor(m) }))
730
+ .filter((entry) => entry.text)
731
+ .sort((a, b) => a.text.localeCompare(b.text)),
709
732
  });
710
733
  }
711
734
  return {
@@ -205,7 +205,7 @@ export async function startDevServer(options) {
205
205
  if (!tab || tab.source.kind !== "doxygen")
206
206
  return;
207
207
  log(`rebuilding doxygen tab "${tab.label}"`);
208
- const { pages, navTab } = await loadDoxygenTab(tab.source.config, tab.slug, tab.label);
208
+ const { pages, navTab } = await loadDoxygenTab(tab.source.config, tab.slug, tab.label, config.titleSeparator);
209
209
  if (cache !== snapshot)
210
210
  return;
211
211
  for (const [key, page] of data.pageMap) {
@@ -63,6 +63,7 @@ export declare const PageContext: import("preact").Context<CurrentPage>;
63
63
  */
64
64
  export interface SiteConfig {
65
65
  name: string;
66
+ titleSeparator: string;
66
67
  siteUrl?: string;
67
68
  baseUrl: string;
68
69
  prettyUrls: PrettyUrls;
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/renderer/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAEnG,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,mEAAmE;IACnE,UAAU,EAAE,OAAO,CAAC;IACpB,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,aAAa,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,aAAa,CAAA;CAAE,CAAC;AAEpD;;GAEG;AACH,eAAO,MAAM,WAAW,0CAA+C,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,cAAc,yCAGzB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB,0CAA+C,CAAC;AAE9E;;GAEG;AACH,eAAO,MAAM,WAAW,uCAA4C,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE;QAAE,KAAK,EAAE,UAAU,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE;YAAE,IAAI,EAAE,QAAQ,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;IAC3F,MAAM,EAAE;QAAE,KAAK,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,uBAAuB,CAAC;CACpC;AAED,eAAO,MAAM,WAAW,sCAA2C,CAAC"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/renderer/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAEnG,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,mEAAmE;IACnE,UAAU,EAAE,OAAO,CAAC;IACpB,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,aAAa,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,aAAa,CAAA;CAAE,CAAC;AAEpD;;GAEG;AACH,eAAO,MAAM,WAAW,0CAA+C,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,cAAc,yCAGzB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB,0CAA+C,CAAC;AAE9E;;GAEG;AACH,eAAO,MAAM,WAAW,uCAA4C,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE;QAAE,KAAK,EAAE,UAAU,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE;YAAE,IAAI,EAAE,QAAQ,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;IAC3F,MAAM,EAAE;QAAE,KAAK,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,uBAAuB,CAAC;CACpC;AAED,eAAO,MAAM,WAAW,sCAA2C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"site-assembly.d.ts","sourceRoot":"","sources":["../src/site-assembly.ts"],"names":[],"mappings":"AASA,OAAO,EAAgB,KAAK,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAkB,KAAK,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAIxF,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,KAAK,EAAiB,QAAQ,EAAgB,MAAM,2BAA2B,CAAC;AAEvF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EACV,mBAAmB,EAEnB,cAAc,EACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,WAAW,EAAE,cAAc,CAAC;IAC5B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACzC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC/B,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;IAC5C,gBAAgB,EAAE,qBAAqB,EAAE,CAAC;IAC1C,kBAAkB,EAAE,uBAAuB,EAAE,CAAC;IAC9C,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;CAC1C;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC,CAiKhF;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,CAKzE;AAED,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,qBAAqB,EAAE,GAAG,IAAI,CAGlF;AAED,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,uBAAuB,EAAE,GAAG,IAAI,CAGtF;AAUD,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,uBAAuB,GAAG,MAAM,CAMnF;AAUD,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,EAC9B,IAAI,EAAE,WAAW,EAAE,GAClB,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAoBzB;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,EAC9B,QAAQ,EAAE,OAAO,EAAE,EACnB,IAAI,EAAE,WAAW,EAAE,EACnB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,UAAU,GACrB,IAAI,CAsBN;AAaD,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,mBAAmB,EAAE,EAClC,eAAe,UAAQ,GACtB,IAAI,CAYN;AAED,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,mBAAmB,GAAG,MAAM,CAIjF;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,mBAAmB,GAAG,MAAM,CAI9E;AAED,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,mBAAmB,EAAE,GAAG,MAAM,EAAE,CAEvF;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CA4BjF;AAED,wBAAgB,iBAAiB,IAAI,cAAc,CAUlD;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CA6FpF"}
1
+ {"version":3,"file":"site-assembly.d.ts","sourceRoot":"","sources":["../src/site-assembly.ts"],"names":[],"mappings":"AASA,OAAO,EAAgB,KAAK,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAkB,KAAK,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAIxF,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,KAAK,EAAiB,QAAQ,EAAgB,MAAM,2BAA2B,CAAC;AAEvF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EACV,mBAAmB,EAEnB,cAAc,EACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,WAAW,EAAE,cAAc,CAAC;IAC5B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACzC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC/B,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;IAC5C,gBAAgB,EAAE,qBAAqB,EAAE,CAAC;IAC1C,kBAAkB,EAAE,uBAAuB,EAAE,CAAC;IAC9C,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;CAC1C;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC,CAiKhF;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,CAKzE;AAED,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,qBAAqB,EAAE,GAAG,IAAI,CAGlF;AAED,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,uBAAuB,EAAE,GAAG,IAAI,CAGtF;AAUD,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,uBAAuB,GAAG,MAAM,CAMnF;AAUD,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,EAC9B,IAAI,EAAE,WAAW,EAAE,GAClB,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAoBzB;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,EAC9B,QAAQ,EAAE,OAAO,EAAE,EACnB,IAAI,EAAE,WAAW,EAAE,EACnB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,UAAU,GACrB,IAAI,CAsBN;AAaD,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,mBAAmB,EAAE,EAClC,eAAe,UAAQ,GACtB,IAAI,CAYN;AAED,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,mBAAmB,GAAG,MAAM,CAIjF;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,mBAAmB,GAAG,MAAM,CAI9E;AAED,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,mBAAmB,EAAE,GAAG,MAAM,EAAE,CAEvF;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CA6BjF;AAED,wBAAgB,iBAAiB,IAAI,cAAc,CAUlD;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CA6FpF"}
@@ -38,7 +38,7 @@ export async function assembleSite(config) {
38
38
  continue;
39
39
  }
40
40
  if (tab.source.kind === "doxygen") {
41
- const { pages, navTab } = await loadDoxygenTab(tab.source.config, tab.slug, tab.label);
41
+ const { pages, navTab } = await loadDoxygenTab(tab.source.config, tab.slug, tab.label, config.titleSeparator);
42
42
  for (const [slug, page] of pages) {
43
43
  const outputPath = pageOutputPath(tab.slug, slug, config.prettyUrls);
44
44
  pageMap.set(outputPath, {
@@ -271,6 +271,7 @@ export async function buildSiteConfig(config) {
271
271
  const customCSS = await loadCustomCSS(config.theme.css);
272
272
  return {
273
273
  name: config.name,
274
+ titleSeparator: config.titleSeparator,
274
275
  siteUrl: config.siteUrl,
275
276
  baseUrl: config.baseUrl,
276
277
  prettyUrls: config.prettyUrls,
@@ -1425,7 +1425,9 @@ h1[id], h2[id], h3[id], h4[id], h5[id], h6[id] {
1425
1425
  position: relative;
1426
1426
  display: flex;
1427
1427
  flex-direction: column;
1428
- overflow: hidden;
1428
+ /* Visible so an open header dropdown menu is not clipped by the card; the
1429
+ code body's rounded corners are clipped by .code-card-body instead. */
1430
+ overflow: visible;
1429
1431
  border-radius: var(--radius);
1430
1432
  border: 1px solid rgb(var(--color-stone-950) / 0.1);
1431
1433
  }
@@ -1435,11 +1437,21 @@ h1[id], h2[id], h3[id], h4[id], h5[id], h6[id] {
1435
1437
 
1436
1438
  #sourcey .code-group > div:first-child {
1437
1439
  background: rgb(var(--color-stone-50));
1440
+ border-top-left-radius: var(--radius);
1441
+ border-top-right-radius: var(--radius);
1438
1442
  }
1439
1443
  .dark #sourcey .code-group > div:first-child {
1440
1444
  background: rgb(255 255 255 / 0.03);
1441
1445
  }
1442
1446
 
1447
+ /* Clips the code panels' rounded bottom corners now that the card itself does
1448
+ not clip. Horizontal code scrolling stays on the inner body element. */
1449
+ #sourcey .code-card-body {
1450
+ overflow: hidden;
1451
+ border-bottom-left-radius: var(--radius);
1452
+ border-bottom-right-radius: var(--radius);
1453
+ }
1454
+
1443
1455
  /* ── Selection ─────────────────────────────────────────────────────── */
1444
1456
 
1445
1457
  #sourcey ::selection { background: rgb(var(--color-primary) / 0.12); }
@@ -0,0 +1,31 @@
1
+ import type { MediaTypeContent, NormalizedSchema } from "../core/types.js";
2
+ /**
3
+ * A single, render-ready example. One media type can contribute several
4
+ * (named `examples`); each becomes its own variant so the UI can offer a
5
+ * switcher between them.
6
+ */
7
+ export interface ExampleVariant {
8
+ /** Label shown in the variant switcher (example name, media type, or "Example"). */
9
+ label: string;
10
+ /** Optional caption from a named example's `summary`/`description`. */
11
+ summary?: string;
12
+ /** Media type the example came from (e.g. `application/json`). */
13
+ mediaType: string;
14
+ /** Syntax-highlighted HTML body, empty when the example is external-only. */
15
+ html: string;
16
+ /** Raw text body (for copy + tests), or the URL for an external example. */
17
+ raw: string;
18
+ /** Set when the example is referenced via `externalValue` rather than inline. */
19
+ externalValue?: string;
20
+ }
21
+ /** Build a single variant from a schema, falling back to a generated example. */
22
+ export declare function variantFromSchema(schema: NormalizedSchema, label?: string, mediaType?: string): ExampleVariant | null;
23
+ /**
24
+ * Collect every render-ready example for a content map (a response, request
25
+ * body, or parameter). Provided examples win over the schema: named `examples`
26
+ * first, then a single `example`, and only then a schema-generated fallback.
27
+ * Every media type contributes, so multi-content-type responses surface them
28
+ * all rather than just the first.
29
+ */
30
+ export declare function buildExampleVariants(content?: Record<string, MediaTypeContent>): ExampleVariant[];
31
+ //# sourceMappingURL=example-variants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"example-variants.d.ts","sourceRoot":"","sources":["../../src/utils/example-variants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAI1F;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,oFAAoF;IACpF,KAAK,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,GAAG,EAAE,MAAM,CAAC;IACZ,iFAAiF;IACjF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AA2DD,iFAAiF;AACjF,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,gBAAgB,EACxB,KAAK,SAAY,EACjB,SAAS,SAAqB,GAC7B,cAAc,GAAG,IAAI,CAIvB;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GACzC,cAAc,EAAE,CAiClB"}
@@ -0,0 +1,99 @@
1
+ import { generateExample } from "./example-generator.js";
2
+ import { highlightCode } from "./highlighter.js";
3
+ /** Map a media type to a highlighter language, defaulting to JSON. */
4
+ function langForMediaType(mediaType) {
5
+ const m = mediaType.toLowerCase();
6
+ if (m.includes("xml"))
7
+ return "xml";
8
+ if (m.includes("yaml") || m.includes("yml"))
9
+ return "yaml";
10
+ if (m.includes("html"))
11
+ return "html";
12
+ if (m.includes("json"))
13
+ return "json";
14
+ if (m.startsWith("text/"))
15
+ return "text";
16
+ return "json";
17
+ }
18
+ /** Build a variant from a concrete example value. */
19
+ function variantFromValue(value, opts) {
20
+ const lang = langForMediaType(opts.mediaType);
21
+ // JSON media encodes any value (a bare string "hi" renders as "hi"); other
22
+ // media types keep a provided string body verbatim (pre-formatted XML/text).
23
+ const raw = typeof value === "string" && lang !== "json"
24
+ ? value
25
+ : JSON.stringify(value, null, 2);
26
+ return {
27
+ label: opts.label,
28
+ summary: opts.summary,
29
+ mediaType: opts.mediaType,
30
+ raw,
31
+ html: highlightCode(raw, lang),
32
+ };
33
+ }
34
+ /** Build a variant from a named OpenAPI example object. */
35
+ function variantFromExample(name, example, mediaType) {
36
+ if (example.value !== undefined) {
37
+ return variantFromValue(example.value, {
38
+ label: example.summary ?? name,
39
+ summary: example.description,
40
+ mediaType,
41
+ });
42
+ }
43
+ if (example.externalValue) {
44
+ return {
45
+ label: example.summary ?? name,
46
+ summary: example.description,
47
+ mediaType,
48
+ raw: example.externalValue,
49
+ html: "",
50
+ externalValue: example.externalValue,
51
+ };
52
+ }
53
+ return null;
54
+ }
55
+ /** Build a single variant from a schema, falling back to a generated example. */
56
+ export function variantFromSchema(schema, label = "Example", mediaType = "application/json") {
57
+ const value = schema.example ?? generateExample(schema);
58
+ if (value === undefined)
59
+ return null;
60
+ return variantFromValue(value, { label, mediaType });
61
+ }
62
+ /**
63
+ * Collect every render-ready example for a content map (a response, request
64
+ * body, or parameter). Provided examples win over the schema: named `examples`
65
+ * first, then a single `example`, and only then a schema-generated fallback.
66
+ * Every media type contributes, so multi-content-type responses surface them
67
+ * all rather than just the first.
68
+ */
69
+ export function buildExampleVariants(content) {
70
+ if (!content)
71
+ return [];
72
+ const entries = Object.entries(content);
73
+ const multiMedia = entries.length > 1;
74
+ const variants = [];
75
+ for (const [mediaType, media] of entries) {
76
+ const named = media.examples ? Object.entries(media.examples) : [];
77
+ if (named.length) {
78
+ for (const [name, example] of named) {
79
+ const variant = variantFromExample(name, example, mediaType);
80
+ if (variant)
81
+ variants.push(variant);
82
+ }
83
+ continue;
84
+ }
85
+ if (media.example !== undefined) {
86
+ variants.push(variantFromValue(media.example, {
87
+ label: multiMedia ? mediaType : "Example",
88
+ mediaType,
89
+ }));
90
+ continue;
91
+ }
92
+ if (media.schema) {
93
+ const variant = variantFromSchema(media.schema, multiMedia ? mediaType : "Example", mediaType);
94
+ if (variant)
95
+ variants.push(variant);
96
+ }
97
+ }
98
+ return variants;
99
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sourcey",
3
- "version": "3.6.1",
3
+ "version": "3.6.3",
4
4
  "description": "Precision documentation from OpenAPI, MCP, Doxygen, godoc, rustdoc, and Markdown. Static HTML you own.",
5
5
  "type": "module",
6
6
  "engines": {
@@ -46,7 +46,7 @@
46
46
  "js-yaml": "^4.1.0",
47
47
  "marked": "^15.0.0",
48
48
  "mcp-parser": "^0.4.0",
49
- "moxygen": "^2.1.8",
49
+ "moxygen": "^2.1.10",
50
50
  "preact": "^10.28.4",
51
51
  "preact-render-to-string": "^6.6.6",
52
52
  "sanitize-html": "^2.17.4",