sourcey 3.3.10 → 3.4.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.
Files changed (58) hide show
  1. package/README.md +19 -3
  2. package/dist/client/scroll-tracker.js +8 -1
  3. package/dist/client/search.js +26 -7
  4. package/dist/components/layout/Head.d.ts.map +1 -1
  5. package/dist/components/layout/Head.js +1 -1
  6. package/dist/components/layout/Header.d.ts.map +1 -1
  7. package/dist/components/layout/Header.js +2 -2
  8. package/dist/components/layout/Page.d.ts.map +1 -1
  9. package/dist/components/layout/Page.js +6 -5
  10. package/dist/components/layout/Sidebar.d.ts.map +1 -1
  11. package/dist/components/layout/Sidebar.js +11 -2
  12. package/dist/components/layout/TableOfContents.d.ts.map +1 -1
  13. package/dist/components/layout/TableOfContents.js +3 -2
  14. package/dist/components/mcp/AnnotationBadges.d.ts +15 -0
  15. package/dist/components/mcp/AnnotationBadges.d.ts.map +1 -0
  16. package/dist/components/mcp/AnnotationBadges.js +10 -0
  17. package/dist/components/mcp/McpConnection.d.ts +10 -0
  18. package/dist/components/mcp/McpConnection.d.ts.map +1 -0
  19. package/dist/components/mcp/McpConnection.js +32 -0
  20. package/dist/components/mcp/McpEndpointBar.d.ts +8 -0
  21. package/dist/components/mcp/McpEndpointBar.d.ts.map +1 -0
  22. package/dist/components/mcp/McpEndpointBar.js +16 -0
  23. package/dist/components/mcp/McpReturns.d.ts +18 -0
  24. package/dist/components/mcp/McpReturns.d.ts.map +1 -0
  25. package/dist/components/mcp/McpReturns.js +33 -0
  26. package/dist/components/openapi/Operation.d.ts.map +1 -1
  27. package/dist/components/openapi/Operation.js +5 -1
  28. package/dist/config.d.ts +11 -0
  29. package/dist/config.d.ts.map +1 -1
  30. package/dist/config.js +12 -3
  31. package/dist/core/markdown-loader.d.ts.map +1 -1
  32. package/dist/core/markdown-loader.js +7 -2
  33. package/dist/core/mcp-normalizer.d.ts +11 -0
  34. package/dist/core/mcp-normalizer.d.ts.map +1 -0
  35. package/dist/core/mcp-normalizer.js +382 -0
  36. package/dist/core/search-indexer.d.ts +3 -1
  37. package/dist/core/search-indexer.d.ts.map +1 -1
  38. package/dist/core/search-indexer.js +7 -3
  39. package/dist/core/types.d.ts +26 -2
  40. package/dist/core/types.d.ts.map +1 -1
  41. package/dist/dev-server.d.ts.map +1 -1
  42. package/dist/dev-server.js +47 -9
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +22 -10
  45. package/dist/renderer/html-builder.d.ts +2 -0
  46. package/dist/renderer/html-builder.d.ts.map +1 -1
  47. package/dist/renderer/html-builder.js +15 -0
  48. package/dist/renderer/llms.d.ts +6 -0
  49. package/dist/renderer/llms.d.ts.map +1 -0
  50. package/dist/renderer/llms.js +247 -0
  51. package/dist/themes/default/main.css +3 -0
  52. package/dist/themes/default/sourcey.css +101 -23
  53. package/dist/utils/icons.d.ts +4 -0
  54. package/dist/utils/icons.d.ts.map +1 -1
  55. package/dist/utils/icons.js +6 -0
  56. package/dist/utils/markdown.d.ts.map +1 -1
  57. package/dist/utils/markdown.js +97 -1
  58. package/package.json +6 -2
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  Sourcey is an open source documentation platform. Point it at an OpenAPI spec, add markdown guides, get a complete docs site. Static HTML you own; no dashboard, no monthly bill, no API calls to render your own documentation. Deploy anywhere.
6
6
 
7
7
  [![npm](https://img.shields.io/npm/v/sourcey)](https://www.npmjs.com/package/sourcey)
8
- [![build](https://img.shields.io/github/actions/workflow/status/nilstate/sourcey/ci.yml?branch=master)](https://github.com/nilstate/sourcey/actions)
8
+ [![build](https://img.shields.io/github/actions/workflow/status/sourcey/sourcey/ci.yml?branch=master)](https://github.com/sourcey/sourcey/actions)
9
9
  [![node](https://img.shields.io/node/v/sourcey)](https://nodejs.org)
10
10
 
11
11
  ```bash
@@ -14,7 +14,7 @@ npx sourcey init
14
14
 
15
15
  ![Sourcey](assets/screenshot.jpg)
16
16
 
17
- **[Live demo](https://cheesestore.github.io/)** · [Documentation](https://sourcey.com/docs) · [GitHub](https://github.com/nilstate/sourcey)
17
+ **[Live demo](https://cheesestore.github.io/)** · [Documentation](https://sourcey.com/docs) · [GitHub](https://github.com/sourcey/sourcey)
18
18
 
19
19
  ## Features
20
20
 
@@ -43,6 +43,22 @@ npx sourcey init
43
43
  | Self-hosted | Yes | No | No | No | Yes | Yes |
44
44
  | Pricing | Free / AGPL | $150+/mo | Free / paid | Paid | Free / paid | Free |
45
45
 
46
+ ## Install
47
+
48
+ ```bash
49
+ # npm (recommended)
50
+ npx sourcey init
51
+
52
+ # Homebrew
53
+ brew tap sourcey/sourcey && brew install sourcey
54
+
55
+ # Docker
56
+ docker run -v $(pwd):/docs sourcey/sourcey build
57
+
58
+ # Nix
59
+ nix run github:sourcey/sourcey
60
+ ```
61
+
46
62
  ## Quick start
47
63
 
48
64
  ```bash
@@ -159,7 +175,7 @@ sourcey validate api.yaml Validate a spec file
159
175
  ## Development
160
176
 
161
177
  ```bash
162
- git clone https://github.com/nilstate/sourcey.git
178
+ git clone https://github.com/sourcey/sourcey.git
163
179
  cd sourcey && npm install
164
180
  npm run build && npm test
165
181
 
@@ -74,10 +74,17 @@
74
74
  }
75
75
  }
76
76
 
77
- // Scroll to element with header offset
77
+ // Scroll to element with header offset.
78
+ // For the first traverse target, scroll to the very top of the page
79
+ // so the title and all top padding are visible.
78
80
  function scrollToId(id, behavior) {
79
81
  var el = document.getElementById(id);
80
82
  if (!el) return;
83
+ var firstTarget = targets.length ? targets[0].getAttribute('data-traverse-target') : null;
84
+ if (id === firstTarget) {
85
+ window.scrollTo({ top: 0, behavior: behavior });
86
+ return;
87
+ }
81
88
  var offset = (navbar ? navbar.offsetHeight : 0) - 1;
82
89
  window.scrollTo({ top: el.getBoundingClientRect().top + window.scrollY - offset, behavior: behavior });
83
90
  }
@@ -28,6 +28,7 @@
28
28
  tag: e.tab || '',
29
29
  content: e.content || '',
30
30
  category: e.category || '',
31
+ featured: !!e.featured,
31
32
  searchText: [e.method || '', e.path || '', e.title || '', e.content || '', e.tab || ''].join(' ').toLowerCase()
32
33
  };
33
34
  });
@@ -39,7 +40,23 @@
39
40
  });
40
41
  }
41
42
 
43
+ var dialogInner = dialog.querySelector('.search-dialog-inner');
44
+
45
+ function positionDialog() {
46
+ if (!openBtn || !dialogInner) return;
47
+ var rect = openBtn.getBoundingClientRect();
48
+ dialogInner.style.position = 'absolute';
49
+ dialogInner.style.top = (rect.top - 4) + 'px';
50
+ var extraWidth = Math.min(rect.width * 0.5, 200);
51
+ dialogInner.style.left = (rect.left - extraWidth / 2) + 'px';
52
+ dialogInner.style.width = (rect.width + extraWidth) + 'px';
53
+ dialogInner.style.maxWidth = 'none';
54
+ dialogInner.style.transform = 'none';
55
+ dialogInner.style.margin = '0';
56
+ }
57
+
42
58
  function open() {
59
+ positionDialog();
43
60
  dialog.classList.add('open');
44
61
  input.value = '';
45
62
  input.focus();
@@ -60,20 +77,22 @@
60
77
  function showResults(query) {
61
78
  var q = query.toLowerCase().trim();
62
79
  if (!q) {
63
- filtered = entries.slice(0, 20);
80
+ // Show featured pages first, then endpoints
81
+ var featured = entries.filter(function (e) { return e.featured; });
82
+ var rest = entries.filter(function (e) { return !e.featured && e.category !== 'Sections'; });
83
+ filtered = featured.concat(rest).slice(0, 30);
64
84
  } else {
65
85
  var terms = q.split(/\s+/);
66
86
  filtered = entries.filter(function (e) {
67
87
  return terms.every(function (t) { return e.searchText.indexOf(t) !== -1; });
68
88
  });
89
+ // Sort by category so groups stay together (only for search results)
90
+ var categoryOrder = { Pages: 0, Sections: 1, Endpoints: 2, Models: 3 };
91
+ filtered.sort(function (a, b) {
92
+ return (categoryOrder[a.category] || 9) - (categoryOrder[b.category] || 9);
93
+ });
69
94
  }
70
95
 
71
- // Sort by category so groups stay together
72
- var categoryOrder = { Pages: 0, Sections: 1, Endpoints: 2, Models: 3 };
73
- filtered.sort(function (a, b) {
74
- return (categoryOrder[a.category] || 9) - (categoryOrder[b.category] || 9);
75
- });
76
-
77
96
  activeIndex = filtered.length ? 0 : -1;
78
97
  render();
79
98
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Head.d.ts","sourceRoot":"","sources":["../../../src/components/layout/Head.tsx"],"names":[],"mappings":"AAKA,wBAAgB,IAAI,iCA8EnB"}
1
+ {"version":3,"file":"Head.d.ts","sourceRoot":"","sources":["../../../src/components/layout/Head.tsx"],"names":[],"mappings":"AAKA,wBAAgB,IAAI,iCAqFnB"}
@@ -52,5 +52,5 @@ export function Head() {
52
52
  body { margin: 0; background: rgb(var(--color-background-light)); }
53
53
  .dark body { background: rgb(var(--color-background-dark)); }
54
54
  `;
55
- 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}` }), _jsx("meta", { name: "sourcey-search", content: `${options.assetBase}search-index.json` }), _jsx("style", { dangerouslySetInnerHTML: { __html: themeCSS } }), _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')})()` } }), googleFontsUrl && (_jsxs(_Fragment, { children: [_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: googleFontsUrl })] })), _jsx("link", { rel: "stylesheet", href: `${options.assetBase}sourcey.css` }), site.favicon && _jsx("link", { rel: "icon", href: site.favicon })] }));
55
+ 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}` }), _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 }), _jsx("meta", { name: "twitter:card", content: "summary" }), _jsx("meta", { name: "twitter:title", content: pageTitle }), _jsx("meta", { name: "twitter:description", content: pageDescription }), _jsx("meta", { name: "sourcey-search", content: `${options.assetBase}search-index.json` }), _jsx("style", { dangerouslySetInnerHTML: { __html: themeCSS } }), _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')})()` } }), googleFontsUrl && (_jsxs(_Fragment, { children: [_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: googleFontsUrl })] })), _jsx("link", { rel: "stylesheet", href: `${options.assetBase}sourcey.css` }), site.favicon && _jsx("link", { rel: "icon", href: site.favicon })] }));
56
56
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../src/components/layout/Header.tsx"],"names":[],"mappings":"AA6EA;;;;;GAKG;AACH,wBAAgB,MAAM,iCAoIrB"}
1
+ {"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../src/components/layout/Header.tsx"],"names":[],"mappings":"AA6EA;;;;;GAKG;AACH,wBAAgB,MAAM,iCAiIrB"}
@@ -37,9 +37,9 @@ export function Header() {
37
37
  const site = useContext(SiteContext);
38
38
  const base = options.assetBase;
39
39
  const logoHref = site.logo?.href ?? `${base}${nav.tabs[0]?.href ?? ""}`;
40
- return (_jsxs("div", { id: "navbar", class: "z-30 fixed lg:sticky top-0 w-full", children: [_jsx("div", { class: "absolute w-full h-full flex-none border-b border-[rgb(var(--color-gray-200)/0.7)] dark:border-[rgb(var(--color-gray-300)/0.06)] bg-[rgb(var(--color-background-light))] dark:bg-[rgb(var(--color-background-dark))]" }), _jsxs("div", { class: "max-w-[92rem] mx-auto relative", children: [_jsx("div", { class: "relative", children: _jsx("div", { class: "flex items-center lg:px-12 h-16 min-w-0 mx-4 lg:mx-0", children: _jsxs("div", { class: "h-full relative flex-1 flex items-center gap-x-4 min-w-0 border-b border-[rgb(var(--color-gray-500)/0.08)] dark:border-[rgb(var(--color-gray-300)/0.08)]", children: [_jsx("div", { class: "flex-1 flex items-center gap-x-4", children: _jsx(Logo, { href: logoHref, logo: site.logo, name: site.name }) }), _jsx("div", { class: "relative hidden lg:flex items-center flex-1 z-20 gap-2.5", children: _jsxs("button", { id: "search-open", type: "button", "aria-label": "Search", class: "group flex pointer-events-auto rounded-lg w-full items-center text-sm leading-6 h-9 pl-3.5 pr-3 text-[rgb(var(--color-gray-500))] dark:text-[rgb(var(--color-gray-400))] ring-1 ring-[rgb(var(--color-gray-400)/0.3)] hover:ring-[rgb(var(--color-gray-600)/0.3)] dark:ring-[rgb(var(--color-gray-600)/0.3)] dark:hover:ring-[rgb(var(--color-gray-500)/0.3)] justify-between truncate gap-2 min-w-[43px] cursor-pointer bg-[rgb(var(--color-background-light))] dark:bg-[rgb(var(--color-background-dark))] dark:brightness-110 dark:hover:brightness-125", children: [_jsxs("div", { class: "flex items-center gap-2 min-w-[42px]", children: [_jsx(SearchIcon, {}), _jsx("div", { class: "truncate min-w-0", children: "Search docs..." })] }), _jsx("kbd", { class: "flex-none ml-auto size-5 flex items-center justify-center text-xs font-semibold text-[rgb(var(--color-gray-400))] bg-[rgb(var(--color-gray-100)/0.5)] dark:bg-[rgb(var(--color-surface-dark-tint)/0.1)] border border-[rgb(var(--color-gray-200))] dark:border-[rgb(var(--color-border-dark-subtle)/0.1)] rounded-sm", children: "/" })] }) }), _jsxs("div", { class: "flex-1 relative hidden lg:flex items-center ml-auto justify-end space-x-4", children: [_jsx("nav", { class: "text-sm", children: _jsxs("ul", { class: "flex space-x-6 items-center", children: [site.navbar.links.map((link) => (_jsx("li", { children: _jsx("a", { href: link.href, target: "_blank", rel: "noopener noreferrer", class: "text-[rgb(var(--color-gray-400))] hover:text-[rgb(var(--color-gray-600))] dark:hover:text-[rgb(var(--color-gray-300))]", children: link.type === "link"
40
+ return (_jsxs("div", { id: "navbar", class: "z-30 fixed lg:sticky top-0 w-full", children: [_jsx("div", { class: "absolute w-full h-full flex-none border-b border-[rgb(var(--color-gray-200)/0.7)] dark:border-[rgb(var(--color-gray-300)/0.06)] bg-[rgb(var(--color-background-light))] dark:bg-[rgb(var(--color-background-dark))]" }), _jsxs("div", { class: "max-w-[92rem] mx-auto relative", children: [_jsx("div", { class: "relative", children: _jsx("div", { class: "flex items-center lg:px-12 h-16 min-w-0 mx-4 lg:mx-0", children: _jsxs("div", { class: "h-full relative flex-1 flex items-center gap-x-4 min-w-0 border-b border-[rgb(var(--color-gray-500)/0.08)] dark:border-[rgb(var(--color-gray-300)/0.08)]", children: [_jsx("div", { class: "flex-1 flex items-center gap-x-4", children: _jsx(Logo, { href: logoHref, logo: site.logo, name: site.name }) }), _jsx("div", { class: "relative hidden lg:flex items-center flex-1 z-20 gap-2", children: _jsx("button", { id: "search-open", type: "button", "aria-label": "Search", class: "group flex pointer-events-auto rounded-lg w-full items-center text-sm leading-6 h-9 pl-3.5 pr-3 text-[rgb(var(--color-gray-500))] dark:text-[rgb(var(--color-gray-400))] ring-1 ring-[rgb(var(--color-gray-400)/0.3)] hover:ring-[rgb(var(--color-gray-600)/0.3)] dark:ring-[rgb(var(--color-gray-600)/0.3)] dark:hover:ring-[rgb(var(--color-gray-500)/0.3)] justify-between truncate gap-2 min-w-[43px] cursor-pointer bg-[rgb(var(--color-background-light))] dark:bg-[rgb(var(--color-background-dark))] dark:brightness-110 dark:hover:brightness-125", children: _jsxs("div", { class: "flex items-center gap-2 min-w-[42px]", children: [_jsx(SearchIcon, {}), _jsxs("div", { class: "truncate min-w-0", children: ["Type ", _jsx("kbd", { children: "/" }), " to search"] })] }) }) }), _jsxs("div", { class: "flex-1 relative hidden lg:flex items-center ml-auto justify-end space-x-4", children: [_jsx("nav", { class: "text-sm", children: _jsxs("ul", { class: "flex space-x-6 items-center", children: [site.navbar.links.map((link) => (_jsx("li", { children: _jsx("a", { href: link.href, target: "_blank", rel: "noopener noreferrer", class: "text-[rgb(var(--color-gray-400))] hover:text-[rgb(var(--color-gray-600))] dark:hover:text-[rgb(var(--color-gray-300))]", children: link.type === "link"
41
41
  ? (link.label ?? link.href)
42
- : (_jsxs(_Fragment, { children: [_jsx(SocialIcon, { type: link.type }), link.label && _jsx("span", { class: "ml-1", children: link.label })] })) }) }, link.href))), site.navbar.primary && (_jsx("li", { children: _jsxs("a", { href: site.navbar.primary.href, target: "_blank", class: "group px-4 py-1.5 relative inline-flex items-center text-sm font-medium", children: [_jsx("span", { class: "absolute inset-0 bg-[rgb(var(--color-primary-dark))] rounded-lg group-hover:opacity-90" }), _jsx("span", { class: "z-10 text-white", children: site.navbar.primary.label })] }) }))] }) }), _jsx("div", { class: "flex items-center", children: _jsxs("button", { id: "theme-toggle", type: "button", "aria-label": "Toggle theme", class: "group p-2 flex items-center justify-center cursor-pointer text-[rgb(var(--color-gray-400))] hover:text-[rgb(var(--color-gray-600))] dark:text-[rgb(var(--color-gray-500))] dark:hover:text-[rgb(var(--color-gray-300))]", children: [_jsx(SunIcon, {}), _jsx(MoonIcon, {})] }) })] }), _jsxs("div", { class: "flex lg:hidden items-center gap-3", children: [_jsx("button", { id: "search-open-mobile", type: "button", "aria-label": "Search", class: "text-[rgb(var(--color-gray-500))] w-8 h-8 flex items-center justify-center", children: _jsx(SearchIcon, {}) }), _jsx("button", { type: "button", "data-drawer-slide": "right", "aria-label": "Open menu", class: "text-[rgb(var(--color-gray-500))] w-8 h-8 flex items-center justify-center hover:text-[rgb(var(--color-gray-600))]", children: _jsx("svg", { class: "h-4", fill: "currentColor", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 448 512", children: _jsx("path", { d: "M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z" }) }) })] })] }) }) }), _jsx(MobileBreadcrumbs, { nav: nav }), nav.tabs.length > 1 && (_jsx("div", { class: "hidden lg:flex px-12 h-12", children: _jsx("div", { class: "h-full flex text-sm gap-x-6", children: nav.tabs.map((tab) => {
42
+ : (_jsxs(_Fragment, { children: [_jsx(SocialIcon, { type: link.type }), link.label && _jsx("span", { class: "ml-1", children: link.label })] })) }) }, link.href))), site.navbar.primary && (_jsx("li", { children: _jsxs("a", { href: site.navbar.primary.href, target: "_blank", class: "group px-4 py-1.5 relative inline-flex items-center text-sm font-medium", children: [_jsx("span", { class: "absolute inset-0 bg-[rgb(var(--color-primary-dark))] rounded-lg group-hover:opacity-90" }), _jsx("span", { class: "z-10 text-white", children: site.navbar.primary.label })] }) }))] }) }), _jsxs("button", { id: "theme-toggle", type: "button", "aria-label": "Toggle theme", class: "p-2 flex items-center justify-center cursor-pointer text-[rgb(var(--color-gray-400))] hover:text-[rgb(var(--color-gray-600))] dark:text-[rgb(var(--color-gray-500))] dark:hover:text-[rgb(var(--color-gray-300))]", children: [_jsx(SunIcon, {}), _jsx(MoonIcon, {})] })] }), _jsxs("div", { class: "flex lg:hidden items-center gap-3", children: [_jsx("button", { id: "search-open-mobile", type: "button", "aria-label": "Search", class: "text-[rgb(var(--color-gray-500))] w-8 h-8 flex items-center justify-center", children: _jsx(SearchIcon, {}) }), _jsx("button", { type: "button", "data-drawer-slide": "right", "aria-label": "Open menu", class: "text-[rgb(var(--color-gray-500))] w-8 h-8 flex items-center justify-center hover:text-[rgb(var(--color-gray-600))]", children: _jsx("svg", { class: "h-4", fill: "currentColor", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 448 512", children: _jsx("path", { d: "M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z" }) }) })] })] }) }) }), _jsx(MobileBreadcrumbs, { nav: nav }), nav.tabs.length > 1 && (_jsx("div", { class: "hidden lg:flex px-12 h-12", children: _jsx("div", { class: "h-full flex text-sm gap-x-6", children: nav.tabs.map((tab) => {
43
43
  const isActive = tab.slug === nav.activeTabSlug;
44
44
  return (_jsxs("a", { href: `${base}${tab.href}`, class: `group relative h-full gap-2 flex items-center font-medium cursor-pointer transition-colors ${isActive
45
45
  ? "text-[rgb(var(--color-gray-800))] dark:text-[rgb(var(--color-gray-200))]"
@@ -1 +1 @@
1
- {"version":3,"file":"Page.d.ts","sourceRoot":"","sources":["../../../src/components/layout/Page.tsx"],"names":[],"mappings":"AA8OA,wBAAgB,IAAI,iCAqCnB"}
1
+ {"version":3,"file":"Page.d.ts","sourceRoot":"","sources":["../../../src/components/layout/Page.tsx"],"names":[],"mappings":"AAgPA,wBAAgB,IAAI,iCAqCnB"}
@@ -10,6 +10,7 @@ import { SecurityDefinitions } from "../openapi/Security.js";
10
10
  import { Tags } from "../openapi/Tags.js";
11
11
  import { Definition } from "../openapi/Definition.js";
12
12
  import { SocialIcon } from "../ui/SocialIcon.js";
13
+ import { McpConnection } from "../mcp/McpConnection.js";
13
14
  /**
14
15
  * Markdown page content with prose typography.
15
16
  */
@@ -19,7 +20,7 @@ function MarkdownPageContent({ page, className = "" }) {
19
20
  const activeTab = nav.tabs.find((t) => t.slug === nav.activeTabSlug);
20
21
  const activeGroup = activeTab?.groups.find((g) => g.items.some((item) => item.id === nav.activePageSlug));
21
22
  const eyebrow = activeGroup?.label;
22
- return (_jsxs("div", { class: `relative grow box-border flex-col w-full mx-auto px-1 min-w-0 ${className}`, id: "content-area", children: [_jsxs("header", { class: "relative leading-none", children: [_jsxs("div", { class: "mt-0.5 space-y-2.5", children: [eyebrow && (_jsx("div", { class: "h-5 text-[rgb(var(--color-primary))] dark:text-[rgb(var(--color-primary-light))] text-sm font-semibold", children: eyebrow })), _jsx("div", { class: "flex flex-col sm:flex-row items-start sm:items-center relative gap-2 min-w-0", children: _jsx("h1", { class: "text-2xl sm:text-3xl text-[rgb(var(--color-gray-900))] tracking-tight dark:text-[rgb(var(--color-gray-200))] font-bold", style: "overflow-wrap: anywhere", children: page.title }) })] }), page.description && (_jsx("div", { class: "mt-2 text-lg prose prose-gray dark:prose-invert", style: "overflow-wrap: anywhere", children: _jsx(Markdown, { content: page.description, inline: true }) }))] }), _jsx("div", { class: "prose prose-gray dark:prose-invert relative mt-8 mb-14 max-w-none", dangerouslySetInnerHTML: { __html: page.html } }), _jsx(PageNavigation, {}), _jsx(ContentFooter, {})] }));
23
+ return (_jsxs("div", { class: `relative grow box-border flex-col w-full mx-auto px-1 min-w-0 ${className}`, id: "content-area", children: [_jsxs("header", { class: "relative leading-none", children: [_jsxs("div", { class: "mt-0.5 space-y-2.5", children: [eyebrow && (_jsx("div", { class: "h-5 text-[rgb(var(--color-primary))] dark:text-[rgb(var(--color-primary-light))] text-sm font-semibold", children: eyebrow })), _jsx("div", { class: "flex flex-col sm:flex-row items-start sm:items-center relative gap-2 min-w-0", children: _jsx("h1", { class: "text-2xl sm:text-3xl text-[rgb(var(--color-gray-900))] tracking-tight dark:text-[rgb(var(--color-gray-200))] font-bold", style: "overflow-wrap: anywhere", children: page.title }) })] }), page.description && (_jsx("div", { class: "page-description mt-2 text-lg prose prose-gray dark:prose-invert", style: "overflow-wrap: anywhere", children: _jsx(Markdown, { content: page.description, inline: true }) }))] }), _jsx("div", { class: "prose prose-gray dark:prose-invert relative mt-8 mb-14 max-w-none", dangerouslySetInnerHTML: { __html: page.html } }), _jsx(PageNavigation, {}), _jsx(ContentFooter, {})] }));
23
24
  }
24
25
  /**
25
26
  * OpenAPI spec page content.
@@ -27,7 +28,7 @@ function MarkdownPageContent({ page, className = "" }) {
27
28
  function SpecPageContent({ className = "" }) {
28
29
  const spec = useContext(SpecContext);
29
30
  const serverUrl = spec.servers[0]?.url ?? "/";
30
- return (_jsxs("div", { class: `relative grow box-border flex-col w-full mx-auto px-1 min-w-0 ${className}`, id: "content-area", children: [_jsxs("article", { children: [_jsx("header", { class: "mb-8", children: _jsxs("div", { class: "flex items-baseline gap-3", children: [_jsx("h1", { class: "text-2xl sm:text-3xl font-bold text-[rgb(var(--color-gray-900))] dark:text-[rgb(var(--color-gray-200))] tracking-tight", children: spec.info.title }), _jsxs("span", { class: "text-sm text-[rgb(var(--color-gray-400))]", children: ["v", spec.info.version] })] }) }), _jsx(Introduction, {}), _jsx(SecurityDefinitions, {}), _jsx(Tags, { tags: spec.tags, serverUrl: serverUrl }), Object.keys(spec.schemas).length > 0 && (_jsxs("div", { class: "mt-12", children: [_jsx("div", { class: "mb-6", children: _jsx("h1", { class: "text-xl font-bold text-[rgb(var(--color-gray-900))] dark:text-[rgb(var(--color-gray-200))]", children: "Models" }) }), Object.entries(spec.schemas).map(([name, schema]) => (_jsx(Definition, { name: name, schema: schema }, name)))] }))] }), _jsx(ContentFooter, {})] }));
31
+ return (_jsxs("div", { class: `relative grow box-border flex-col w-full mx-auto px-1 min-w-0 ${className}`, id: "content-area", children: [_jsxs("article", { children: [_jsx("header", { class: "mb-8", children: _jsxs("div", { class: "flex items-baseline gap-3", children: [_jsx("h1", { class: "text-2xl sm:text-3xl font-bold text-[rgb(var(--color-gray-900))] dark:text-[rgb(var(--color-gray-200))] tracking-tight", children: spec.info.title }), _jsxs("span", { class: "text-sm text-[rgb(var(--color-gray-400))]", children: ["v", spec.info.version] })] }) }), _jsx(Introduction, {}), spec.operations[0]?.mcpExtras?.connection && (_jsx(McpConnection, { connection: spec.operations[0].mcpExtras.connection })), _jsx(SecurityDefinitions, {}), _jsx(Tags, { tags: spec.tags, serverUrl: serverUrl }), Object.keys(spec.schemas).length > 0 && (_jsxs("div", { class: "mt-12", children: [_jsx("div", { class: "mb-6", children: _jsx("h1", { class: "text-xl font-bold text-[rgb(var(--color-gray-900))] dark:text-[rgb(var(--color-gray-200))]", children: "Models" }) }), Object.entries(spec.schemas).map(([name, schema]) => (_jsx(Definition, { name: name, schema: schema }, name)))] }))] }), _jsx(ContentFooter, {})] }));
31
32
  }
32
33
  function PageNavigation() {
33
34
  const nav = useContext(NavigationContext);
@@ -60,7 +61,7 @@ function ContentFooter() {
60
61
  editUrl = `${repoBase}/edit/${site.editBranch}/${basePath}${page.markdown.sourcePath}`;
61
62
  }
62
63
  const linkStyle = "hover:text-[rgb(var(--color-gray-600))] dark:hover:text-[rgb(var(--color-gray-300))] transition-colors";
63
- return (_jsxs("div", { class: "mt-16 mb-8 flex items-center justify-between border-t border-[rgb(var(--color-gray-200)/0.7)] dark:border-[rgb(var(--color-gray-800)/0.5)] pt-6 text-xs text-[rgb(var(--color-gray-400))]", children: [_jsxs("span", { children: ["Built with", " ", _jsx("a", { href: "https://sourcey.com", target: "_blank", rel: "noopener noreferrer", class: linkStyle, children: "Sourcey" })] }), _jsxs("div", { class: "flex items-center gap-4", children: [editUrl && (_jsxs("a", { href: editUrl, target: "_blank", rel: "noopener noreferrer", class: `${linkStyle} flex items-center gap-1`, children: [_jsx("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", "stroke-width": "1.5", stroke: "currentColor", class: "w-3 h-3 mr-0.5", children: _jsx("path", { "stroke-linecap": "round", "stroke-linejoin": "round", d: "m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 0 1 1.13-1.897L16.863 4.487Zm0 0L19.5 7.125" }) }), "Edit this page"] })), links.map((link) => (_jsx("a", { href: link.href, target: "_blank", rel: "noopener noreferrer", class: linkStyle, children: link.type === "link"
64
+ return (_jsxs("div", { class: "mt-16 mb-8 flex items-center justify-between border-t border-[rgb(var(--color-gray-200)/0.7)] dark:border-[rgb(var(--color-gray-800)/0.5)] pt-6 text-xs text-[rgb(var(--color-gray-400))]", children: [_jsxs("a", { href: "https://sourcey.com", target: "_blank", rel: "noopener noreferrer", class: `flex items-center gap-1.5 ${linkStyle}`, children: ["Built with", _jsx("img", { src: "https://sourcey.com/sourcey-logo.png", alt: "Sourcey", class: "h-4 w-4" })] }), _jsxs("div", { class: "flex items-center gap-4", children: [editUrl && (_jsxs("a", { href: editUrl, target: "_blank", rel: "noopener noreferrer", class: `${linkStyle} flex items-center gap-1`, children: [_jsx("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", "stroke-width": "1.5", stroke: "currentColor", class: "w-3 h-3 mr-0.5", children: _jsx("path", { "stroke-linecap": "round", "stroke-linejoin": "round", d: "m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 0 1 1.13-1.897L16.863 4.487Zm0 0L19.5 7.125" }) }), "Edit this page"] })), links.map((link) => (_jsx("a", { href: link.href, target: "_blank", rel: "noopener noreferrer", class: linkStyle, children: link.type === "link"
64
65
  ? (link.label ?? link.href)
65
66
  : (_jsxs(_Fragment, { children: [_jsx(SocialIcon, { type: link.type }), link.label && _jsx("span", { class: "ml-1", children: link.label })] })) }, link.href)))] })] }));
66
67
  }
@@ -69,7 +70,7 @@ function ContentFooter() {
69
70
  // ---------------------------------------------------------------------------
70
71
  function DefaultLayout() {
71
72
  const page = useContext(PageContext);
72
- return (_jsxs("div", { class: "max-w-[92rem] mx-auto relative px-4 lg:px-8", children: [_jsx(Sidebar, {}), _jsx("div", { id: "docs", class: "pt-[8.5rem] lg:pt-10", children: page.kind === "markdown" ? (_jsxs("div", { class: "flex flex-row-reverse gap-12 box-border w-full", children: [_jsx(TableOfContents, { headings: page.markdown.headings }), _jsx(MarkdownPageContent, { page: page.markdown, className: "lg:pl-[23.7rem] lg:-ml-12 xl:w-[calc(100%-28rem)]" })] })) : (_jsx(SpecPageContent, { className: "lg:pl-[23.7rem] lg:-ml-12" })) })] }));
73
+ return (_jsxs("div", { class: "max-w-[92rem] mx-auto relative px-4 lg:px-12", children: [_jsx(Sidebar, {}), _jsx("div", { id: "docs", class: "pt-[8.5rem] lg:pt-10", children: page.kind === "markdown" ? (_jsxs("div", { class: "flex flex-row-reverse gap-12 box-border w-full", children: [_jsx(TableOfContents, { headings: page.markdown.headings }), _jsx(MarkdownPageContent, { page: page.markdown, className: "lg:pl-[23.7rem] lg:-ml-12 xl:w-[calc(100%-28rem)]" })] })) : (_jsx(SpecPageContent, { className: "lg:pl-[23.7rem] lg:-ml-12" })) })] }));
73
74
  }
74
75
  function MinimalLayout() {
75
76
  const page = useContext(PageContext);
@@ -77,7 +78,7 @@ function MinimalLayout() {
77
78
  }
78
79
  function ApiFirstLayout() {
79
80
  const page = useContext(PageContext);
80
- return (_jsxs("div", { class: "max-w-[92rem] mx-auto relative px-4 lg:px-8", children: [_jsx(Sidebar, {}), _jsx("div", { id: "docs", class: "pt-[8.5rem] lg:pt-10", children: page.kind === "markdown" ? (_jsxs("div", { class: "flex flex-row-reverse gap-12 box-border w-full", children: [_jsx(TableOfContents, { headings: page.markdown.headings }), _jsx(MarkdownPageContent, { page: page.markdown, className: "lg:pl-[23.7rem] lg:-ml-12 xl:w-[calc(100%-28rem)]" })] })) : (_jsx(SpecPageContent, { className: "lg:pl-[23.7rem] lg:-ml-12" })) })] }));
81
+ return (_jsxs("div", { class: "max-w-[92rem] mx-auto relative px-4 lg:px-12", children: [_jsx(Sidebar, {}), _jsx("div", { id: "docs", class: "pt-[8.5rem] lg:pt-10", children: page.kind === "markdown" ? (_jsxs("div", { class: "flex flex-row-reverse gap-12 box-border w-full", children: [_jsx(TableOfContents, { headings: page.markdown.headings }), _jsx(MarkdownPageContent, { page: page.markdown, className: "lg:pl-[23.7rem] lg:-ml-12 xl:w-[calc(100%-28rem)]" })] })) : (_jsx(SpecPageContent, { className: "lg:pl-[23.7rem] lg:-ml-12" })) })] }));
81
82
  }
82
83
  // ---------------------------------------------------------------------------
83
84
  // Page shell
@@ -1 +1 @@
1
- {"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../../src/components/layout/Sidebar.tsx"],"names":[],"mappings":"AA+EA;;GAEG;AACH,wBAAgB,OAAO,wCAuGtB"}
1
+ {"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../../src/components/layout/Sidebar.tsx"],"names":[],"mappings":"AA+FA;;GAEG;AACH,wBAAgB,OAAO,wCAuGtB"}
@@ -4,10 +4,19 @@ import { NavigationContext, OptionsContext, SiteContext } from "../../renderer/c
4
4
  import { SocialIcon, socialLabels } from "../ui/SocialIcon.js";
5
5
  import { Logo } from "../ui/Logo.js";
6
6
  /**
7
- * Colored method badges for API sidebar items.
7
+ * Colored method indicator for API sidebar items.
8
+ * HTTP methods render as text pills. MCP methods render as coloured dots.
8
9
  */
9
10
  function MethodPill({ method }) {
10
11
  const m = method.toUpperCase();
12
+ const dotColors = {
13
+ TOOL: "bg-purple-500 dark:bg-purple-400",
14
+ RESOURCE: "bg-green-500 dark:bg-green-400",
15
+ PROMPT: "bg-blue-500 dark:bg-blue-400",
16
+ };
17
+ if (dotColors[m]) {
18
+ return (_jsx("span", { class: "flex items-center w-4 h-[1lh] shrink-0 justify-center", children: _jsx("span", { class: `w-1.5 h-1.5 rounded-full ${dotColors[m]}` }) }));
19
+ }
11
20
  const label = m === "DELETE" ? "DEL" : m;
12
21
  const colors = {
13
22
  GET: "bg-green-400/20 dark:bg-green-400/20 text-green-700 dark:text-green-400",
@@ -23,7 +32,7 @@ function MethodPill({ method }) {
23
32
  * Shared nav group rendering used by both desktop sidebar and mobile drawer.
24
33
  */
25
34
  function NavGroups({ groups, activePageSlug, base }) {
26
- return (_jsx(_Fragment, { children: groups.map((group, gi) => (_jsxs("div", { class: gi > 0 ? "mt-5" : "", children: [group.label && (_jsx("h5", { class: "nav-group-label", children: group.label })), _jsx("ul", { children: group.items.map((item) => {
35
+ return (_jsx(_Fragment, { children: groups.map((group, gi) => (_jsxs("div", { class: gi > 0 ? "mt-5" : "", children: [group.label && (_jsx("h5", { class: "nav-group-label", children: group.label })), _jsx("ul", { class: "space-y-0.5", children: group.items.map((item) => {
27
36
  const isActive = item.id === activePageSlug;
28
37
  return (_jsx("li", { children: _jsxs("a", { href: `${base}${item.href}`, class: `nav-link${isActive ? " active" : ""}`, children: [item.method && _jsx(MethodPill, { method: item.method }), _jsx("span", { class: "flex-1 break-words [word-break:break-word]", children: item.label })] }) }, item.id));
29
38
  }) })] }, group.label))) }));
@@ -1 +1 @@
1
- {"version":3,"file":"TableOfContents.d.ts","sourceRoot":"","sources":["../../../src/components/layout/TableOfContents.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAwCjE,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;CAAE,uCAoBxE"}
1
+ {"version":3,"file":"TableOfContents.d.ts","sourceRoot":"","sources":["../../../src/components/layout/TableOfContents.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAyCjE,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;CAAE,uCAuBxE"}
@@ -1,4 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "preact/jsx-runtime";
2
+ import { iconPath } from "../../utils/icons.js";
2
3
  /**
3
4
  * Right-sidebar table of contents for prose pages.
4
5
  * TOC layout: w-[19rem] outer, w-[16.5rem] inner,
@@ -16,10 +17,10 @@ function TocList({ headings }) {
16
17
  groups[groups.length - 1].children.push(h);
17
18
  }
18
19
  }
19
- return (_jsx("ul", { class: "space-y-0.5", children: groups.map((g) => (_jsxs("li", { children: [_jsx("a", { href: `#${g.root.id}`, class: `${tocLink} py-1`, children: g.root.text }), g.children.length > 0 && (_jsx("ul", { class: "mb-1.5", children: g.children.map((c) => (_jsx("li", { children: _jsx("a", { href: `#${c.id}`, class: `${tocLink} pl-3 text-[13px] py-0.5`, children: c.text }) }, c.id))) }))] }, g.root.id))) }));
20
+ return (_jsx("ul", { children: groups.map((g) => (_jsxs("li", { children: [_jsx("a", { href: `#${g.root.id}`, class: `${tocLink} py-1`, children: g.root.text }), g.children.length > 0 && (_jsx("ul", { children: g.children.map((c) => (_jsx("li", { children: _jsx("a", { href: `#${c.id}`, class: `${tocLink} pl-3 text-[13px] py-0.5`, children: c.text }) }, c.id))) }))] }, g.root.id))) }));
20
21
  }
21
22
  export function TableOfContents({ headings }) {
22
23
  if (headings.length === 0)
23
24
  return null;
24
- return (_jsx("aside", { id: "toc", class: "hidden xl:flex self-start sticky xl:flex-col max-w-[28rem] z-[21]", style: "height: calc(100vh - var(--header-height) - 2.5rem); top: calc(var(--header-height) + 2.5rem)", children: _jsx("div", { class: "z-10 hidden xl:flex box-border max-h-full pl-10 w-[19rem]", children: _jsxs("div", { class: "text-[rgb(var(--color-gray-600))] text-sm leading-6 w-[16.5rem] overflow-y-auto space-y-2 pb-4 -mt-10 pt-10", children: [_jsx("h5", { class: "font-semibold text-[rgb(var(--color-gray-900))] dark:text-[rgb(var(--color-gray-200))]", children: "On this page" }), _jsx("nav", { children: _jsx(TocList, { headings: headings }) })] }) }) }));
25
+ return (_jsx("aside", { id: "toc", class: "hidden xl:flex self-start sticky xl:flex-col max-w-[28rem] z-[21]", style: "height: calc(100vh - var(--header-height) - 2.5rem); top: calc(var(--header-height) + 2.5rem)", children: _jsx("div", { class: "z-10 hidden xl:flex box-border max-h-full pl-10 w-[19rem]", children: _jsxs("div", { class: "text-[rgb(var(--color-gray-600))] text-sm leading-6 w-[16.5rem] overflow-y-auto space-y-2 pb-4 -mt-10 pt-10", children: [_jsxs("h5", { class: "font-semibold text-[rgb(var(--color-gray-900))] dark:text-[rgb(var(--color-gray-200))] flex items-center gap-1.5", children: [_jsx("svg", { class: "shrink-0", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "1.5", dangerouslySetInnerHTML: { __html: iconPath("book") ?? "" } }), "On this page"] }), _jsx("nav", { children: _jsx(TocList, { headings: headings }) })] }) }) }));
25
26
  }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Renders MCP tool annotation badges inline with the operation title.
3
+ * Same visual pattern as DeprecatedBadge / RequiredBadge / ReadOnlyBadge.
4
+ */
5
+ interface Annotations {
6
+ readOnlyHint?: boolean;
7
+ destructiveHint?: boolean;
8
+ idempotentHint?: boolean;
9
+ openWorldHint?: boolean;
10
+ }
11
+ export declare function AnnotationBadges({ annotations }: {
12
+ annotations: Annotations;
13
+ }): import("preact").JSX.Element;
14
+ export {};
15
+ //# sourceMappingURL=AnnotationBadges.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnnotationBadges.d.ts","sourceRoot":"","sources":["../../../src/components/mcp/AnnotationBadges.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,UAAU,WAAW;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AASD,wBAAgB,gBAAgB,CAAC,EAAE,WAAW,EAAE,EAAE;IAAE,WAAW,EAAE,WAAW,CAAA;CAAE,gCAa7E"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, Fragment as _Fragment } from "preact/jsx-runtime";
2
+ const badges = [
3
+ { key: "readOnlyHint", label: "read-only", className: "bg-green-100/50 text-green-600 dark:bg-green-400/10 dark:text-green-300" },
4
+ { key: "destructiveHint", label: "destructive", className: "bg-red-100/50 text-red-600 dark:bg-red-400/10 dark:text-red-300" },
5
+ { key: "idempotentHint", label: "idempotent", className: "bg-blue-100/50 text-blue-600 dark:bg-blue-400/10 dark:text-blue-300" },
6
+ { key: "openWorldHint", label: "open-world", className: "bg-amber-100/50 text-amber-600 dark:bg-amber-400/10 dark:text-amber-300" },
7
+ ];
8
+ export function AnnotationBadges({ annotations }) {
9
+ return (_jsx(_Fragment, { children: badges.map(({ key, label, className }) => annotations[key] && (_jsx("span", { class: `whitespace-nowrap rounded-md px-2 py-0.5 text-xs font-medium ${className}`, children: label }, key))) }));
10
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Connection config card for MCP docs.
3
+ * Rendered below Introduction in SpecPageContent.
4
+ * Uses the same bordered card pattern as Introduction's Base URLs table.
5
+ */
6
+ import type { McpConnectionInfo } from "../../core/types.js";
7
+ export declare function McpConnection({ connection }: {
8
+ connection: McpConnectionInfo;
9
+ }): import("preact").JSX.Element | null;
10
+ //# sourceMappingURL=McpConnection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"McpConnection.d.ts","sourceRoot":"","sources":["../../../src/components/mcp/McpConnection.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,wBAAgB,aAAa,CAAC,EAAE,UAAU,EAAE,EAAE;IAAE,UAAU,EAAE,iBAAiB,CAAA;CAAE,uCAwD9E"}
@@ -0,0 +1,32 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "preact/jsx-runtime";
2
+ export function McpConnection({ connection }) {
3
+ const transport = connection.transport;
4
+ if (!transport)
5
+ return null;
6
+ // Build the config JSON snippet
7
+ const serverEntry = {};
8
+ if (transport.type === "stdio") {
9
+ if (transport.command)
10
+ serverEntry.command = transport.command;
11
+ if (transport.args?.length)
12
+ serverEntry.args = transport.args;
13
+ }
14
+ else {
15
+ if (transport.url)
16
+ serverEntry.url = transport.url;
17
+ }
18
+ const configJson = JSON.stringify({ mcpServers: { [connection.serverName]: serverEntry } }, null, 2);
19
+ // Capabilities summary
20
+ const caps = [];
21
+ if (connection.capabilities) {
22
+ if (connection.capabilities.tools)
23
+ caps.push("tools");
24
+ if (connection.capabilities.resources)
25
+ caps.push("resources");
26
+ if (connection.capabilities.prompts)
27
+ caps.push("prompts");
28
+ if (connection.capabilities.logging)
29
+ caps.push("logging");
30
+ }
31
+ return (_jsxs("div", { class: "mb-8 rounded-[var(--radius)] border border-[rgb(var(--color-gray-200)/0.7)] dark:border-[rgb(var(--color-border-dark-subtle)/0.1)] overflow-hidden", children: [_jsx("div", { class: "px-4 py-2.5 text-xs font-semibold text-[rgb(var(--color-gray-600))] dark:text-[rgb(var(--color-gray-300))] border-b border-[rgb(var(--color-gray-200)/0.7)] dark:border-[rgb(var(--color-border-dark-subtle)/0.1)]", children: "Connect" }), _jsxs("div", { class: "px-4 py-3", children: [_jsx("p", { class: "text-sm text-[rgb(var(--color-gray-500))] mb-3", children: "Add to your MCP client configuration:" }), _jsx("div", { class: "code-group not-prose", 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 rounded-[var(--radius)]", style: "font-variant-ligatures: none", children: _jsx("div", { class: "font-mono whitespace-pre text-xs leading-[1.35rem] text-[rgb(var(--color-gray-800))] dark:text-[rgb(var(--color-gray-200))]", children: configJson }) }) }), _jsxs("div", { class: "mt-3 flex flex-wrap gap-x-6 gap-y-1 text-xs text-[rgb(var(--color-gray-500))]", children: [connection.mcpVersion && (_jsxs("span", { children: ["Protocol ", _jsxs("span", { class: "font-medium text-[rgb(var(--color-gray-700))] dark:text-[rgb(var(--color-gray-300))]", children: ["MCP ", connection.mcpVersion] })] })), _jsxs("span", { children: ["Transport ", _jsx("span", { class: "font-medium text-[rgb(var(--color-gray-700))] dark:text-[rgb(var(--color-gray-300))]", children: transport.type })] }), caps.length > 0 && (_jsxs("span", { children: ["Capabilities ", _jsx("span", { class: "font-medium text-[rgb(var(--color-gray-700))] dark:text-[rgb(var(--color-gray-300))]", children: caps.join(", ") })] }))] })] })] }));
32
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * MCP equivalent of EndpointBar. Shows method pill + tool name or resource URI.
3
+ */
4
+ export declare function McpEndpointBar({ method, path }: {
5
+ method: string;
6
+ path: string;
7
+ }): import("preact").JSX.Element;
8
+ //# sourceMappingURL=McpEndpointBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"McpEndpointBar.d.ts","sourceRoot":"","sources":["../../../src/components/mcp/McpEndpointBar.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAQH,wBAAgB,cAAc,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,gCAuBhF"}
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "preact/jsx-runtime";
2
+ /**
3
+ * MCP equivalent of EndpointBar. Shows method pill + tool name or resource URI.
4
+ */
5
+ const methodColors = {
6
+ tool: "bg-purple-400/20 dark:bg-purple-400/20 text-purple-700 dark:text-purple-400",
7
+ resource: "bg-green-400/20 dark:bg-green-400/20 text-green-700 dark:text-green-400",
8
+ prompt: "bg-blue-400/20 dark:bg-blue-400/20 text-blue-700 dark:text-blue-400",
9
+ };
10
+ export function McpEndpointBar({ method, path }) {
11
+ const colorClass = methodColors[method] ?? "bg-gray-400/20 text-gray-700";
12
+ const label = method.toUpperCase();
13
+ // Split path on {param} segments for dimmed rendering
14
+ const segments = path.split(/(\{[^}]+\})/);
15
+ return (_jsxs("div", { class: "flex items-center gap-2 rounded-[var(--radius)] border border-[rgb(var(--color-gray-200)/0.7)] dark:border-[rgb(var(--color-border-dark-subtle)/0.1)] px-3 py-2.5 mb-6 overflow-hidden", children: [_jsx("span", { class: `rounded-lg font-bold px-1.5 py-0.5 text-sm leading-5 shrink-0 ${colorClass}`, children: label }), _jsx("span", { class: "flex items-center overflow-x-auto flex-1 no-scrollbar font-mono text-sm text-[rgb(var(--color-gray-800))] dark:text-[rgb(var(--color-gray-200))]", children: segments.map((seg, i) => seg.startsWith("{") ? (_jsx("span", { class: "text-[rgb(var(--color-gray-400))] dark:text-[rgb(var(--color-gray-500))]", children: seg }, i)) : (_jsx("span", { children: seg }, i))) })] }));
16
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * MCP Returns section — replaces Responses for MCP operations.
3
+ * Renders output schema as a schema view instead of status code tables.
4
+ */
5
+ import type { NormalizedSchema } from "../../core/types.js";
6
+ /**
7
+ * Left column: "Returns" section label + schema view or fallback text.
8
+ */
9
+ export declare function McpReturnsCopy({ schema }: {
10
+ schema?: NormalizedSchema;
11
+ }): import("preact").JSX.Element;
12
+ /**
13
+ * Right column (sticky panel): example JSON for the output schema.
14
+ */
15
+ export declare function McpReturnsExample({ schema }: {
16
+ schema?: NormalizedSchema;
17
+ }): import("preact").JSX.Element;
18
+ //# sourceMappingURL=McpReturns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"McpReturns.d.ts","sourceRoot":"","sources":["../../../src/components/mcp/McpReturns.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAK5D;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,CAAC,EAAE,gBAAgB,CAAA;CAAE,gCAavE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,CAAC,EAAE,gBAAgB,CAAA;CAAE,gCAyB1E"}
@@ -0,0 +1,33 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "preact/jsx-runtime";
2
+ import { SchemaView } from "../schema/SchemaView.js";
3
+ import { ExampleView } from "../schema/ExampleView.js";
4
+ import { SectionLabel } from "../ui/SectionLabel.js";
5
+ /**
6
+ * Left column: "Returns" section label + schema view or fallback text.
7
+ */
8
+ export function McpReturnsCopy({ schema }) {
9
+ return (_jsxs("div", { class: "mt-6", children: [_jsx(SectionLabel, { children: "Returns" }), schema ? (_jsx(SchemaView, { schema: schema })) : (_jsx("p", { class: "text-sm text-[rgb(var(--color-gray-500))]", children: "Returns MCP content array (text, image, or embedded resource)." }))] }));
10
+ }
11
+ /**
12
+ * Right column (sticky panel): example JSON for the output schema.
13
+ */
14
+ export function McpReturnsExample({ schema }) {
15
+ if (!schema) {
16
+ return (_jsx(ExampleView, { schema: {
17
+ type: "object",
18
+ properties: {
19
+ content: {
20
+ type: "array",
21
+ items: {
22
+ type: "object",
23
+ properties: {
24
+ type: { type: "string", enum: ["text", "image", "resource"] },
25
+ text: { type: "string", example: "..." },
26
+ },
27
+ },
28
+ },
29
+ },
30
+ }, title: "Response" }));
31
+ }
32
+ return _jsx(ExampleView, { schema: schema, title: "Response" });
33
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"Operation.d.ts","sourceRoot":"","sources":["../../../src/components/openapi/Operation.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAyB,MAAM,qBAAqB,CAAC;AAatF,UAAU,cAAc;IACtB,SAAS,EAAE,mBAAmB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,cAAc,gCAsErE"}
1
+ {"version":3,"file":"Operation.d.ts","sourceRoot":"","sources":["../../../src/components/openapi/Operation.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAyB,MAAM,qBAAqB,CAAC;AAgBtF,UAAU,cAAc;IACtB,SAAS,EAAE,mBAAmB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,cAAc,gCA0FrE"}
@@ -11,6 +11,9 @@ import { ResponsesCopy, ResponsesExamples } from "./Responses.js";
11
11
  import { SecurityCopy } from "./Security.js";
12
12
  import { CodeSamplesExamples } from "./CodeSamples.js";
13
13
  import { EndpointBar } from "./EndpointBar.js";
14
+ import { McpEndpointBar } from "../mcp/McpEndpointBar.js";
15
+ import { AnnotationBadges } from "../mcp/AnnotationBadges.js";
16
+ import { McpReturnsCopy, McpReturnsExample } from "../mcp/McpReturns.js";
14
17
  /**
15
18
  * Single operation with sticky code panel:
16
19
  * - Endpoint bar at top
@@ -22,7 +25,8 @@ export function Operation({ operation: op, serverUrl }) {
22
25
  const id = `operation-${htmlId(op.path)}-${htmlId(op.method)}`;
23
26
  const hasParams = op.parameters.length > 0;
24
27
  const hasBody = !!op.requestBody;
25
- return (_jsxs("div", { id: id, class: "py-8 border-t border-[rgb(var(--color-gray-100))] dark:border-[rgb(var(--color-gray-800))]", "data-traverse-target": id, children: [_jsxs("header", { class: "mb-6", children: [op.summary && (_jsx("h2", { class: "text-2xl sm:text-3xl text-[rgb(var(--color-gray-900))] dark:text-[rgb(var(--color-gray-200))] tracking-tight font-bold mb-2", children: _jsx(Markdown, { content: op.summary, inline: true }) })), op.deprecated && _jsx(DeprecatedBadge, {})] }), _jsx(EndpointBar, { method: op.method, path: op.path, serverUrl: serverUrl }), _jsxs("div", { class: `flex flex-col ${apiFirst ? "lg:flex-row" : "xl:flex-row"} gap-8`, children: [_jsxs("div", { class: "flex-1 min-w-0", children: [op.description && (_jsx(Markdown, { content: op.description, class: "mb-6" })), hasBody && (_jsxs("div", { class: "mt-6", children: [_jsx(SectionLabel, { meta: bodyMediaType(op.requestBody), children: "Body" }), _jsx(RequestBody, { body: op.requestBody })] })), hasParams && (_jsxs("div", { class: "mt-6", children: [_jsx(SectionLabel, { children: "Parameters" }), _jsx(Parameters, { parameters: op.parameters })] })), op.responses.length > 0 && (_jsxs("div", { class: "mt-6", children: [_jsx(SectionLabel, { children: "Response" }), _jsx(ResponsesCopy, { responses: op.responses })] })), _jsx(SecurityCopy, { security: op.security })] }), _jsxs("aside", { class: `hidden ${apiFirst ? "lg:block" : "xl:block"} w-[28rem] shrink-0 sticky self-start overflow-y-auto space-y-4`, style: "top: calc(var(--header-height) + 2.5rem); max-height: calc(100vh - var(--header-height) - 5rem)", children: [_jsx(CodeSamplesExamples, { operation: op, serverUrl: serverUrl, codeSampleLangs: site.codeSamples }), hasBody && _jsx(RequestBodyExample, { body: op.requestBody }), _jsx(ResponsesExamples, { responses: op.responses })] })] }), _jsxs("div", { class: `${apiFirst ? "lg:hidden" : "xl:hidden"} mt-8 space-y-4`, children: [_jsx(CodeSamplesExamples, { operation: op, serverUrl: serverUrl, codeSampleLangs: site.codeSamples }), hasBody && _jsx(RequestBodyExample, { body: op.requestBody }), _jsx(ResponsesExamples, { responses: op.responses })] })] }));
28
+ const mcp = op.mcpExtras;
29
+ return (_jsxs("div", { id: id, class: "py-8 border-t border-[rgb(var(--color-gray-100))] dark:border-[rgb(var(--color-gray-800))]", "data-traverse-target": id, children: [_jsx("header", { class: "mb-6", children: op.summary && (_jsxs("div", { class: "flex items-baseline gap-2 flex-wrap", children: [_jsx("h2", { class: "text-2xl sm:text-3xl text-[rgb(var(--color-gray-900))] dark:text-[rgb(var(--color-gray-200))] tracking-tight font-bold mb-2", children: _jsx(Markdown, { content: op.summary, inline: true }) }), op.deprecated && _jsx(DeprecatedBadge, {}), mcp?.annotations && _jsx(AnnotationBadges, { annotations: mcp.annotations })] })) }), mcp ? (_jsx(McpEndpointBar, { method: op.method, path: op.path })) : (_jsx(EndpointBar, { method: op.method, path: op.path, serverUrl: serverUrl })), _jsxs("div", { class: `flex flex-col ${apiFirst ? "lg:flex-row" : "xl:flex-row"} gap-8`, children: [_jsxs("div", { class: "flex-1 min-w-0", children: [op.description && (_jsx(Markdown, { content: op.description, class: "mb-6" })), hasBody && (_jsxs("div", { class: "mt-6", children: [_jsx(SectionLabel, { meta: bodyMediaType(op.requestBody), children: "Body" }), _jsx(RequestBody, { body: op.requestBody })] })), hasParams && (_jsxs("div", { class: "mt-6", children: [_jsx(SectionLabel, { children: "Parameters" }), _jsx(Parameters, { parameters: op.parameters })] })), mcp ? (_jsx(McpReturnsCopy, { schema: mcp.outputSchema })) : (op.responses.length > 0 && (_jsxs("div", { class: "mt-6", children: [_jsx(SectionLabel, { children: "Response" }), _jsx(ResponsesCopy, { responses: op.responses })] }))), !mcp && _jsx(SecurityCopy, { security: op.security })] }), _jsxs("aside", { class: `hidden ${apiFirst ? "lg:block" : "xl:block"} w-[28rem] shrink-0 sticky self-start overflow-y-auto space-y-4`, style: "top: calc(var(--header-height) + 2.5rem); max-height: calc(100vh - var(--header-height) - 5rem)", children: [_jsx(CodeSamplesExamples, { operation: op, serverUrl: serverUrl, codeSampleLangs: site.codeSamples }), hasBody && _jsx(RequestBodyExample, { body: op.requestBody }), mcp ? (_jsx(McpReturnsExample, { schema: mcp.outputSchema })) : (_jsx(ResponsesExamples, { responses: op.responses }))] })] }), _jsxs("div", { class: `${apiFirst ? "lg:hidden" : "xl:hidden"} mt-8 space-y-4`, children: [_jsx(CodeSamplesExamples, { operation: op, serverUrl: serverUrl, codeSampleLangs: site.codeSamples }), hasBody && _jsx(RequestBodyExample, { body: op.requestBody }), mcp ? (_jsx(McpReturnsExample, { schema: mcp.outputSchema })) : (_jsx(ResponsesExamples, { responses: op.responses }))] })] }));
26
30
  }
27
31
  function bodyMediaType(body) {
28
32
  const types = Object.keys(body.content);
package/dist/config.d.ts CHANGED
@@ -52,6 +52,11 @@ export interface SourceyConfig {
52
52
  footer?: {
53
53
  links?: NavbarLink[];
54
54
  };
55
+ /** Search configuration. */
56
+ search?: {
57
+ /** Page slugs to feature at the top of search results when no query is entered. */
58
+ featured?: string[];
59
+ };
55
60
  }
56
61
  export type DoxygenIndexStyle = "auto" | "rich" | "structured" | "flat" | "none";
57
62
  export interface DoxygenConfig {
@@ -78,6 +83,8 @@ export interface TabConfig {
78
83
  openapi?: string;
79
84
  groups?: GroupConfig[];
80
85
  doxygen?: DoxygenConfig;
86
+ /** Path to an mcp.json file (MCP server snapshot). */
87
+ mcp?: string;
81
88
  }
82
89
  export interface GroupConfig {
83
90
  group: string;
@@ -133,6 +140,9 @@ export interface ResolvedConfig {
133
140
  footer: {
134
141
  links: NavbarLink[];
135
142
  };
143
+ search: {
144
+ featured: string[];
145
+ };
136
146
  }
137
147
  export interface ResolvedDoxygenConfig {
138
148
  xml: string;
@@ -146,6 +156,7 @@ export interface ResolvedTab {
146
156
  openapi?: string;
147
157
  groups?: ResolvedGroup[];
148
158
  doxygen?: ResolvedDoxygenConfig;
159
+ mcp?: string;
149
160
  }
150
161
  export interface ResolvedPage {
151
162
  /** Original config slug (e.g. "run/index") */
@@ -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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"}