sourcey 3.5.9 → 3.6.0

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 (48) hide show
  1. package/README.md +28 -117
  2. package/dist/adapters/index.d.ts +11 -0
  3. package/dist/adapters/index.d.ts.map +1 -0
  4. package/dist/adapters/index.js +98 -0
  5. package/dist/adapters/mkdocs.d.ts +5 -0
  6. package/dist/adapters/mkdocs.d.ts.map +1 -0
  7. package/dist/adapters/mkdocs.js +367 -0
  8. package/dist/adapters/shared.d.ts +12 -0
  9. package/dist/adapters/shared.d.ts.map +1 -0
  10. package/dist/adapters/shared.js +134 -0
  11. package/dist/adapters/types.d.ts +68 -0
  12. package/dist/adapters/types.d.ts.map +1 -0
  13. package/dist/adapters/types.js +1 -0
  14. package/dist/client/search.js +77 -8
  15. package/dist/client/sidebar.js +169 -0
  16. package/dist/components/layout/Head.js +16 -3
  17. package/dist/components/layout/Sidebar.d.ts.map +1 -1
  18. package/dist/components/layout/Sidebar.js +1 -1
  19. package/dist/components/layout/TableOfContents.d.ts.map +1 -1
  20. package/dist/components/layout/TableOfContents.js +4 -2
  21. package/dist/config.d.ts +38 -0
  22. package/dist/config.d.ts.map +1 -1
  23. package/dist/config.js +79 -141
  24. package/dist/core/doxygen-loader.d.ts.map +1 -1
  25. package/dist/core/doxygen-loader.js +2 -0
  26. package/dist/core/markdown-loader.d.ts +14 -0
  27. package/dist/core/markdown-loader.d.ts.map +1 -1
  28. package/dist/core/markdown-loader.js +63 -22
  29. package/dist/core/navigation.d.ts.map +1 -1
  30. package/dist/core/navigation.js +8 -7
  31. package/dist/core/search-indexer.d.ts +10 -0
  32. package/dist/core/search-indexer.d.ts.map +1 -1
  33. package/dist/core/search-indexer.js +5 -0
  34. package/dist/dev-server.d.ts.map +1 -1
  35. package/dist/dev-server.js +60 -33
  36. package/dist/index.d.ts +2 -0
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +5 -2
  39. package/dist/init.d.ts.map +1 -1
  40. package/dist/init.js +19 -14
  41. package/dist/site-assembly.d.ts.map +1 -1
  42. package/dist/site-assembly.js +107 -25
  43. package/dist/utils/markdown.d.ts.map +1 -1
  44. package/dist/utils/markdown.js +15 -4
  45. package/dist/vite-plugin.d.ts +2 -0
  46. package/dist/vite-plugin.d.ts.map +1 -1
  47. package/dist/vite-plugin.js +71 -1
  48. package/package.json +4 -3
@@ -21,16 +21,41 @@
21
21
  var url = searchMeta.getAttribute('content');
22
22
  fetch(url).then(function (r) { return r.json(); }).then(function (data) {
23
23
  entries = data.map(function (e) {
24
+ var title = e.title || '';
25
+ var qualifiedName = e.qualifiedName || '';
26
+ var owner = e.owner || '';
27
+ var tab = e.tab || '';
24
28
  return {
25
29
  url: e.url,
26
30
  method: e.method || '',
27
31
  path: e.path || '',
28
- summary: e.title || '',
29
- tag: e.tab || '',
32
+ title: title,
33
+ summary: qualifiedName || title,
34
+ tag: owner ? owner : tab,
30
35
  content: e.content || '',
31
36
  category: e.category || '',
32
37
  featured: !!e.featured,
33
- searchText: [e.method || '', e.path || '', e.title || '', e.content || '', e.tab || ''].join(' ').toLowerCase()
38
+ symbolKind: e.symbolKind || '',
39
+ owner: owner,
40
+ ownerKind: e.ownerKind || '',
41
+ namespace: e.namespace || '',
42
+ qualifiedName: qualifiedName,
43
+ titleLower: title.toLowerCase(),
44
+ pathLower: (e.path || '').toLowerCase(),
45
+ qualifiedLower: qualifiedName.toLowerCase(),
46
+ ownerLower: owner.toLowerCase(),
47
+ searchText: [
48
+ e.method || '',
49
+ e.path || '',
50
+ title,
51
+ qualifiedName,
52
+ owner,
53
+ e.ownerKind || '',
54
+ e.namespace || '',
55
+ e.symbolKind || '',
56
+ e.content || '',
57
+ tab
58
+ ].join(' ').toLowerCase()
34
59
  };
35
60
  });
36
61
  indexLoaded = true;
@@ -84,20 +109,64 @@
84
109
  filtered = featured.concat(rest).slice(0, 30);
85
110
  } else {
86
111
  var terms = q.split(/\s+/);
87
- filtered = entries.filter(function (e) {
88
- return terms.every(function (t) { return e.searchText.indexOf(t) !== -1; });
112
+ filtered = entries.map(function (e) {
113
+ return { entry: e, score: scoreEntry(e, q, terms) };
114
+ }).filter(function (result) {
115
+ return result.score > 0;
89
116
  });
90
- // Sort by category so groups stay together (only for search results)
91
- var categoryOrder = { Pages: 0, Sections: 1, Endpoints: 2, Models: 3 };
117
+ var categoryOrder = {
118
+ Pages: 0,
119
+ Endpoints: 1,
120
+ Models: 2,
121
+ Functions: 3,
122
+ Types: 4,
123
+ Enums: 5,
124
+ 'Enum Values': 6,
125
+ Variables: 7,
126
+ Friends: 8,
127
+ Properties: 9,
128
+ Members: 10,
129
+ Sections: 20
130
+ };
92
131
  filtered.sort(function (a, b) {
93
- return (categoryOrder[a.category] || 9) - (categoryOrder[b.category] || 9);
132
+ if (b.score !== a.score) return b.score - a.score;
133
+ return (categoryOrder[a.entry.category] || 19) - (categoryOrder[b.entry.category] || 19);
94
134
  });
135
+ filtered = filtered.map(function (result) { return result.entry; }).slice(0, 50);
95
136
  }
96
137
 
97
138
  activeIndex = filtered.length ? 0 : -1;
98
139
  render();
99
140
  }
100
141
 
142
+ function scoreEntry(e, q, terms) {
143
+ if (!terms.every(function (t) { return e.searchText.indexOf(t) !== -1; })) return 0;
144
+
145
+ var compactQuery = q.replace(/\s+/g, '');
146
+ var qualified = e.qualifiedLower || '';
147
+ var title = e.titleLower || '';
148
+ var path = e.pathLower || '';
149
+ var owner = e.ownerLower || '';
150
+ var score = 1;
151
+
152
+ if (qualified && qualified === compactQuery) score += 1200;
153
+ if (title && title === q) score += 900;
154
+ if (path && path === q) score += 850;
155
+ if (qualified && qualified.endsWith('::' + compactQuery)) score += 780;
156
+ if (owner && compactQuery === owner + '::' + title) score += 760;
157
+ if (qualified && compactQuery.indexOf('::') !== -1 && qualified.indexOf(compactQuery) !== -1) score += 700;
158
+ if (title && title.indexOf(q) === 0) score += 500;
159
+ if (qualified && qualified.indexOf(compactQuery) !== -1) score += 420;
160
+ if (owner && owner.indexOf(compactQuery) !== -1) score += 240;
161
+ if (path && path.indexOf(q) !== -1) score += 180;
162
+ if (e.content.toLowerCase().indexOf(q) !== -1) score += 80;
163
+
164
+ if (e.category === 'Sections') score -= 70;
165
+ if (e.symbolKind) score += 35;
166
+ if (e.featured) score += 20;
167
+ return score;
168
+ }
169
+
101
170
  function render() {
102
171
  var html = '';
103
172
  var lastCategory = '';
@@ -4,7 +4,176 @@
4
4
  // backdrop click, nav link click, Escape (native dialog behavior).
5
5
  // Dropdown toggles list visibility for tab selection.
6
6
  (function () {
7
+ function storageGet(key) {
8
+ try {
9
+ return window.sessionStorage.getItem(key);
10
+ } catch {
11
+ return null;
12
+ }
13
+ }
14
+
15
+ function storageSet(key, value) {
16
+ try {
17
+ window.sessionStorage.setItem(key, value);
18
+ } catch {
19
+ // Ignore blocked storage. Sidebar navigation still works normally.
20
+ }
21
+ }
22
+
23
+ function storageRemove(key) {
24
+ try {
25
+ window.sessionStorage.removeItem(key);
26
+ } catch {
27
+ // Ignore blocked storage. Sidebar navigation still works normally.
28
+ }
29
+ }
30
+
31
+ function normalizePath(pathname) {
32
+ var clean = (pathname || '/').replace(/\/+$/, '') || '/';
33
+ clean = clean.replace(/\/index(?:\.html)?$/, '') || '/';
34
+ clean = clean.replace(/\.html$/, '');
35
+ return clean || '/';
36
+ }
37
+
38
+ function commonPath(paths) {
39
+ if (!paths.length) return null;
40
+ var parts = paths.map(function (path) {
41
+ return normalizePath(path).split('/').filter(Boolean);
42
+ });
43
+ var common = [];
44
+
45
+ for (var i = 0; i < parts[0].length; i++) {
46
+ var part = parts[0][i];
47
+ var allMatch = parts.every(function (segments) {
48
+ return segments[i] === part;
49
+ });
50
+ if (!allMatch) break;
51
+ common.push(part);
52
+ }
53
+
54
+ return '/' + common.join('/');
55
+ }
56
+
57
+ function navScope(nav) {
58
+ var paths = [];
59
+ nav.querySelectorAll('a.nav-link[href]').forEach(function (link) {
60
+ var href = link.getAttribute('href');
61
+ if (!href || href.startsWith('#')) return;
62
+
63
+ try {
64
+ var url = new URL(href, window.location.href);
65
+ if (url.origin === window.location.origin) {
66
+ paths.push(url.pathname);
67
+ }
68
+ } catch {
69
+ // Ignore malformed hrefs.
70
+ }
71
+ });
72
+
73
+ return commonPath(paths);
74
+ }
75
+
76
+ function searchIndexScope() {
77
+ var meta = document.querySelector('meta[name="sourcey-search"]');
78
+ var content = meta && meta.getAttribute('content');
79
+ if (!content) return null;
80
+
81
+ try {
82
+ var url = new URL(content, window.location.href);
83
+ if (url.origin === window.location.origin) {
84
+ return normalizePath(url.pathname.replace(/\/search-index\.json$/, ''));
85
+ }
86
+ } catch {
87
+ // Ignore malformed metadata.
88
+ }
89
+
90
+ return null;
91
+ }
92
+
93
+ function sidebarStorageKey(scroller, nav) {
94
+ var tab = scroller.getAttribute('data-sourcey-sidebar-tab') || 'default';
95
+ var scope = navScope(nav) || searchIndexScope() || normalizePath(window.location.pathname);
96
+ return 'sourcey:sidebar-scroll:v1:' + window.location.origin + scope + ':' + tab;
97
+ }
98
+
99
+ function clampSidebarScroll(scroller, top) {
100
+ var max = Math.max(0, scroller.scrollHeight - scroller.clientHeight);
101
+ return Math.max(0, Math.min(top, max));
102
+ }
103
+
104
+ function saveSidebarScroll(scroller, key) {
105
+ storageSet(key, String(Math.round(scroller.scrollTop || 0)));
106
+ }
107
+
108
+ function restoreSidebarScroll(scroller, key) {
109
+ var raw = storageGet(key);
110
+ if (raw === null) return false;
111
+ storageRemove(key);
112
+
113
+ var top = Number(raw);
114
+ if (!Number.isFinite(top) || top <= 0) return false;
115
+
116
+ function apply() {
117
+ scroller.scrollTop = clampSidebarScroll(scroller, top);
118
+ }
119
+
120
+ apply();
121
+ requestAnimationFrame(apply);
122
+ return true;
123
+ }
124
+
125
+ function revealActiveSidebarLink(nav) {
126
+ var active = nav.querySelector('.nav-link.active');
127
+ if (!active) return;
128
+ requestAnimationFrame(function () {
129
+ active.scrollIntoView({ block: 'nearest', behavior: 'auto' });
130
+ });
131
+ }
132
+
133
+ function shouldSaveForNavigation(e, link) {
134
+ if (!link || e.defaultPrevented) return false;
135
+ if (e.button !== undefined && e.button !== 0) return false;
136
+ if (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) return false;
137
+ if (link.hasAttribute('download')) return false;
138
+
139
+ var target = link.getAttribute('target');
140
+ if (target && target.toLowerCase() !== '_self') return false;
141
+
142
+ var href = link.getAttribute('href');
143
+ if (!href || href.startsWith('#')) return false;
144
+
145
+ try {
146
+ var url = new URL(href, window.location.href);
147
+ if (url.origin !== window.location.origin) return false;
148
+ if (url.pathname === window.location.pathname && url.search === window.location.search && url.hash) {
149
+ return false;
150
+ }
151
+ return url.protocol === 'http:' || url.protocol === 'https:';
152
+ } catch {
153
+ return false;
154
+ }
155
+ }
156
+
157
+ function initDesktopSidebarScroll() {
158
+ var scroller = document.querySelector('[data-sourcey-sidebar-scroll]');
159
+ var nav = document.getElementById('nav');
160
+ if (!scroller || !nav) return;
161
+
162
+ var key = sidebarStorageKey(scroller, nav);
163
+ var restored = restoreSidebarScroll(scroller, key);
164
+ if (!restored) revealActiveSidebarLink(nav);
165
+
166
+ nav.addEventListener('click', function (e) {
167
+ var link = e.target.closest('a[href]');
168
+ if (shouldSaveForNavigation(e, link)) {
169
+ saveSidebarScroll(scroller, key);
170
+ }
171
+ });
172
+ }
173
+
7
174
  function init() {
175
+ initDesktopSidebarScroll();
176
+
8
177
  var dialog = document.getElementById('mobile-nav');
9
178
  var openBtns = document.querySelectorAll('[data-drawer-slide]');
10
179
  if (!dialog) return;
@@ -13,15 +13,15 @@ export function Head() {
13
13
  : undefined;
14
14
  const siteName = site.name || spec.info.title || "";
15
15
  const pageTitle = page.kind === "markdown"
16
- ? (siteName ? `${page.markdown.title} — ${siteName}` : page.markdown.title)
16
+ ? composePageTitle(page.markdown.title, siteName)
17
17
  : page.kind === "changelog"
18
18
  ? (() => {
19
19
  const baseTitle = changelogVersion
20
20
  ? `${changelogVersion.version ?? "Unreleased"} — ${page.changelog.title}`
21
21
  : page.changelog.title;
22
- return siteName ? `${baseTitle} — ${siteName}` : baseTitle;
22
+ return composePageTitle(baseTitle, siteName);
23
23
  })()
24
- : `${siteName} API Reference`;
24
+ : composePageTitle(siteName, "API Reference");
25
25
  const pageDescription = page.kind === "markdown"
26
26
  ? page.markdown.description || pageTitle
27
27
  : page.kind === "changelog"
@@ -58,3 +58,16 @@ export function Head() {
58
58
  `;
59
59
  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
60
  }
61
+ function composePageTitle(title, siteName) {
62
+ if (!siteName)
63
+ return title;
64
+ if (!title)
65
+ return siteName;
66
+ return sameTitle(title, siteName) ? title : `${title} — ${siteName}`;
67
+ }
68
+ function sameTitle(left, right) {
69
+ return normalizeTitle(left) === normalizeTitle(right);
70
+ }
71
+ function normalizeTitle(value) {
72
+ return value.trim().replace(/\s+/g, " ").toLowerCase();
73
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../../src/components/layout/Sidebar.tsx"],"names":[],"mappings":"AA+FA;;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,wCA2GtB"}
@@ -58,7 +58,7 @@ export function Sidebar() {
58
58
  const primaryAction = site.navbar.primary;
59
59
  const groups = activeTab.groups;
60
60
  const logoHref = site.logo?.href ?? `${base}${nav.tabs[0]?.href ?? ""}`;
61
- return (_jsxs(_Fragment, { children: [_jsx("div", { id: "sidebar", class: "z-20 hidden lg:block fixed bottom-0 right-auto w-[18rem]", style: "top: var(--header-height)", children: _jsx("div", { class: "absolute inset-0 z-10 overflow-auto pr-8 pb-10", children: _jsxs("div", { class: "relative text-sm leading-6", children: [_jsx("div", { class: "sticky top-0 h-8 z-10 bg-gradient-to-b from-[rgb(var(--color-background-light))] dark:from-[rgb(var(--color-background-dark))]" }), _jsx("nav", { id: "nav", role: "navigation", children: _jsx(NavGroups, { groups: groups, activePageSlug: nav.activePageSlug, base: base }) })] }) }) }), _jsxs("dialog", { id: "mobile-nav", class: "mobile-nav-dialog", children: [site.logo?.light && (_jsx("div", { class: "px-4 py-4 border-b border-[rgb(var(--color-gray-200)/0.7)] dark:border-[rgb(var(--color-gray-800)/0.5)] shrink-0", children: _jsx(Logo, { href: logoHref, logo: site.logo, height: "h-6" }) })), nav.tabs.length > 1 && (_jsx("div", { class: "pt-5 px-4 shrink-0", children: _jsxs("div", { class: "drawer-dropdown", children: [_jsxs("button", { id: "drawer-group-toggle", type: "button", class: "drawer-dropdown-trigger", "aria-expanded": "false", children: [_jsx("span", { class: "drawer-dropdown-label", children: activeTab.label }), _jsx(DropdownChevron, {})] }), _jsx("ul", { id: "drawer-group-list", class: "drawer-dropdown-list", style: "display:none", children: nav.tabs.map((tab) => (_jsx("li", { children: _jsx("a", { href: `${base}${tab.href}`, class: `drawer-dropdown-item${tab.slug === nav.activeTabSlug ? " active" : ""}`, children: tab.label }) }, tab.slug))) })] }) })), _jsx("nav", { class: "pt-5 pb-3 px-4 flex-1 overflow-y-auto", children: _jsx(NavGroups, { groups: groups, activePageSlug: nav.activePageSlug, base: base }) }), (links.length > 0 || primaryAction) && (_jsx("div", { class: "px-4 py-3 border-t border-[rgb(var(--color-gray-200)/0.7)] dark:border-[rgb(var(--color-gray-800)/0.5)] shrink-0", children: _jsxs("ul", { class: "space-y-3", children: [links.map((link) => {
61
+ return (_jsxs(_Fragment, { children: [_jsx("div", { id: "sidebar", class: "z-20 hidden lg:block fixed bottom-0 right-auto w-[18rem]", style: "top: var(--header-height)", children: _jsx("div", { class: "absolute inset-0 z-10 overflow-auto pr-8 pb-10", "data-sourcey-sidebar-scroll": true, "data-sourcey-sidebar-tab": nav.activeTabSlug || "default", children: _jsxs("div", { class: "relative text-sm leading-6", children: [_jsx("div", { class: "sticky top-0 h-8 z-10 bg-gradient-to-b from-[rgb(var(--color-background-light))] dark:from-[rgb(var(--color-background-dark))]" }), _jsx("nav", { id: "nav", role: "navigation", children: _jsx(NavGroups, { groups: groups, activePageSlug: nav.activePageSlug, base: base }) })] }) }) }), _jsxs("dialog", { id: "mobile-nav", class: "mobile-nav-dialog", children: [site.logo?.light && (_jsx("div", { class: "px-4 py-4 border-b border-[rgb(var(--color-gray-200)/0.7)] dark:border-[rgb(var(--color-gray-800)/0.5)] shrink-0", children: _jsx(Logo, { href: logoHref, logo: site.logo, height: "h-6" }) })), nav.tabs.length > 1 && (_jsx("div", { class: "pt-5 px-4 shrink-0", children: _jsxs("div", { class: "drawer-dropdown", children: [_jsxs("button", { id: "drawer-group-toggle", type: "button", class: "drawer-dropdown-trigger", "aria-expanded": "false", children: [_jsx("span", { class: "drawer-dropdown-label", children: activeTab.label }), _jsx(DropdownChevron, {})] }), _jsx("ul", { id: "drawer-group-list", class: "drawer-dropdown-list", style: "display:none", children: nav.tabs.map((tab) => (_jsx("li", { children: _jsx("a", { href: `${base}${tab.href}`, class: `drawer-dropdown-item${tab.slug === nav.activeTabSlug ? " active" : ""}`, children: tab.label }) }, tab.slug))) })] }) })), _jsx("nav", { class: "pt-5 pb-3 px-4 flex-1 overflow-y-auto", children: _jsx(NavGroups, { groups: groups, activePageSlug: nav.activePageSlug, base: base }) }), (links.length > 0 || primaryAction) && (_jsx("div", { class: "px-4 py-3 border-t border-[rgb(var(--color-gray-200)/0.7)] dark:border-[rgb(var(--color-gray-800)/0.5)] shrink-0", children: _jsxs("ul", { class: "space-y-3", children: [links.map((link) => {
62
62
  const label = link.label ?? socialLabels[link.type] ?? link.href;
63
63
  return (_jsx("li", { children: _jsxs("a", { href: link.href, target: "_blank", rel: "noopener noreferrer", class: "flex items-center gap-2.5 text-[rgb(var(--color-gray-600))] hover:text-[rgb(var(--color-gray-900))] dark:text-[rgb(var(--color-gray-400))] dark:hover:text-[rgb(var(--color-gray-200))]", children: [link.type !== "link" && _jsx(SocialIcon, { type: link.type }), _jsx("span", { children: label })] }) }, link.href));
64
64
  }), primaryAction && (_jsx("li", { children: _jsxs("a", { href: primaryAction.href, target: "_blank", class: "group relative flex items-center justify-center px-4 py-2 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: primaryAction.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;AAyCjE,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;CAAE,uCAuBxE"}
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;AA2CjE,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;CAAE,uCAuBxE"}
@@ -7,10 +7,12 @@ import { iconPath } from "../../utils/icons.js";
7
7
  */
8
8
  const tocLink = "toc-item break-words block hover:text-[rgb(var(--color-gray-900))] dark:hover:text-[rgb(var(--color-gray-300))] dark:text-[rgb(var(--color-gray-400))] transition-colors";
9
9
  function TocList({ headings }) {
10
- // Group: each root heading (level 2) followed by its sub-headings (level 3+)
10
+ // Group by the shallowest heading present. Moxygen C++ pages often use
11
+ // h1 for the page title and h3 for sections, with no h2 in between.
12
+ const rootLevel = Math.min(...headings.map((h) => h.level));
11
13
  const groups = [];
12
14
  for (const h of headings) {
13
- if (h.level < 3) {
15
+ if (h.level <= rootLevel) {
14
16
  groups.push({ root: h, children: [] });
15
17
  }
16
18
  else if (groups.length) {
package/dist/config.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  import type { PrettyUrls } from "./site-url.js";
2
+ import type { MarkdownPreprocessor } from "./core/markdown-loader.js";
3
+ import type { ResolvedTabSource, SourceAdapter } from "./adapters/types.js";
2
4
  export type { PrettyUrls } from "./site-url.js";
3
5
  export type ThemePreset = "default" | "minimal" | "api-first";
4
6
  export interface ThemeConfig {
@@ -88,6 +90,21 @@ export interface SourceyConfig {
88
90
  };
89
91
  }
90
92
  export type DoxygenIndexStyle = "auto" | "rich" | "structured" | "flat" | "none";
93
+ export interface DoxygenSourceUrlInput {
94
+ path: string;
95
+ line?: string;
96
+ symbol?: string;
97
+ }
98
+ export interface DoxygenSourceUrlRoute {
99
+ /** Doxygen source path prefix. Longest matching prefix wins. */
100
+ prefix: string;
101
+ /**
102
+ * Base URL or template for this route. Omit or set false to suppress public
103
+ * links while still rendering the plain "Defined in path:line" location.
104
+ */
105
+ url?: string | false;
106
+ }
107
+ export type DoxygenSourceUrlResolver = string | DoxygenSourceUrlRoute[] | ((input: DoxygenSourceUrlInput) => string | undefined);
91
108
  export interface DoxygenConfig {
92
109
  /** Path to Doxygen XML output directory */
93
110
  xml: string;
@@ -104,6 +121,14 @@ export interface DoxygenConfig {
104
121
  * - "none" or false: no index page, land on the first API page
105
122
  */
106
123
  index?: DoxygenIndexStyle | false;
124
+ /**
125
+ * Base URL or template for source links in generated API pages.
126
+ * A plain URL is joined with the Doxygen file path and "#L<line>".
127
+ * Templates may use {path}, {fullPath}, and {line}. In route maps,
128
+ * {path} is the matched-prefix-relative path and {fullPath} is the original
129
+ * Doxygen path.
130
+ */
131
+ sourceUrl?: DoxygenSourceUrlResolver;
107
132
  }
108
133
  export type GodocMode = "auto" | "live" | "snapshot";
109
134
  export interface GodocGoEnv {
@@ -148,7 +173,11 @@ export interface TabConfig {
148
173
  tab: string;
149
174
  /** Custom URL slug for this tab. Defaults to slugified tab name. */
150
175
  slug?: string;
176
+ /** Source adapter object, usually created with `mkdocs()`, `openapi()`, `markdown()`, `doxygen()`, `godoc()`, or `mcp()`. */
177
+ source?: SourceAdapter;
151
178
  openapi?: string;
179
+ /** Path to a MkDocs mkdocs.yml/mkdocs.yaml file. Sourcey imports docs_dir and nav. */
180
+ mkdocs?: string;
152
181
  groups?: GroupConfig[];
153
182
  doxygen?: DoxygenConfig;
154
183
  /** Path to an mcp.json file (MCP server snapshot). */
@@ -237,6 +266,7 @@ export interface ResolvedDoxygenConfig {
237
266
  language: string;
238
267
  groups: boolean;
239
268
  index: DoxygenIndexStyle;
269
+ sourceUrl?: DoxygenSourceUrlResolver;
240
270
  }
241
271
  export interface ResolvedGodocConfig {
242
272
  /** Absolute path to the Go module directory (containing go.mod). */
@@ -256,7 +286,9 @@ export interface ResolvedGodocConfig {
256
286
  export interface ResolvedTab {
257
287
  label: string;
258
288
  slug: string;
289
+ source: ResolvedTabSource;
259
290
  openapi?: string;
291
+ mkdocs?: string;
260
292
  groups?: ResolvedGroup[];
261
293
  doxygen?: ResolvedDoxygenConfig;
262
294
  mcp?: string;
@@ -267,6 +299,12 @@ export interface ResolvedPage {
267
299
  slug: string;
268
300
  /** Absolute filesystem path to the .md/.mdx file */
269
301
  file: string;
302
+ /** Optional navigation label supplied by a source format such as MkDocs. */
303
+ label?: string;
304
+ /** Optional source root used for source-format-relative includes and assets. */
305
+ sourceRoot?: string;
306
+ /** Optional source-adapter Markdown preprocessors. */
307
+ preprocess?: MarkdownPreprocessor[];
270
308
  }
271
309
  export interface ResolvedGroup {
272
310
  label: string;
@@ -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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"}