@commentray/render 0.0.4 → 0.0.6

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 (49) hide show
  1. package/dist/block-stretch-layout.d.ts.map +1 -1
  2. package/dist/block-stretch-layout.js +11 -23
  3. package/dist/block-stretch-layout.js.map +1 -1
  4. package/dist/browse-page-slug.d.ts +6 -0
  5. package/dist/browse-page-slug.d.ts.map +1 -0
  6. package/dist/browse-page-slug.js +9 -0
  7. package/dist/browse-page-slug.js.map +1 -0
  8. package/dist/build-commentray-nav-search.d.ts +22 -6
  9. package/dist/build-commentray-nav-search.d.ts.map +1 -1
  10. package/dist/build-commentray-nav-search.js +55 -36
  11. package/dist/build-commentray-nav-search.js.map +1 -1
  12. package/dist/build-stamp.d.ts +6 -0
  13. package/dist/build-stamp.d.ts.map +1 -0
  14. package/dist/build-stamp.js +23 -0
  15. package/dist/build-stamp.js.map +1 -0
  16. package/dist/code-browser-block-rays.d.ts +48 -0
  17. package/dist/code-browser-block-rays.d.ts.map +1 -0
  18. package/dist/code-browser-block-rays.js +95 -0
  19. package/dist/code-browser-block-rays.js.map +1 -0
  20. package/dist/code-browser-client.bundle.js +12 -7
  21. package/dist/code-browser-client.js +787 -100
  22. package/dist/code-browser-client.js.map +1 -1
  23. package/dist/code-browser-pair-nav.d.ts +23 -0
  24. package/dist/code-browser-pair-nav.d.ts.map +1 -0
  25. package/dist/code-browser-pair-nav.js +59 -0
  26. package/dist/code-browser-pair-nav.js.map +1 -0
  27. package/dist/code-browser-search.d.ts +50 -0
  28. package/dist/code-browser-search.d.ts.map +1 -1
  29. package/dist/code-browser-search.js +117 -0
  30. package/dist/code-browser-search.js.map +1 -1
  31. package/dist/code-browser.d.ts +51 -2
  32. package/dist/code-browser.d.ts.map +1 -1
  33. package/dist/code-browser.js +863 -196
  34. package/dist/code-browser.js.map +1 -1
  35. package/dist/highlighted-code-lines.d.ts +19 -0
  36. package/dist/highlighted-code-lines.d.ts.map +1 -0
  37. package/dist/highlighted-code-lines.js +61 -0
  38. package/dist/highlighted-code-lines.js.map +1 -0
  39. package/dist/index.d.ts +2 -1
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +1 -0
  42. package/dist/index.js.map +1 -1
  43. package/dist/markdown-pipeline.d.ts.map +1 -1
  44. package/dist/markdown-pipeline.js +3 -2
  45. package/dist/markdown-pipeline.js.map +1 -1
  46. package/dist/mermaid-runtime-html.d.ts.map +1 -1
  47. package/dist/mermaid-runtime-html.js +3 -1
  48. package/dist/mermaid-runtime-html.js.map +1 -1
  49. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"block-stretch-layout.d.ts","sourceRoot":"","sources":["../src/block-stretch-layout.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EAGrB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,KAAK,0BAA0B,EAGhC,MAAM,wBAAwB,CAAC;AAOhC,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,eAAe,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,0BAA0B,CAAC;CACnD,CAAC;AAEF,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,MAAM,GAAG;IACjE,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC1C,CA6BA;AAwCD;;;;;;GAMG;AACH,wBAAsB,6BAA6B,CACjD,IAAI,EAAE,wBAAwB,GAC7B,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CA2ElE"}
1
+ {"version":3,"file":"block-stretch-layout.d.ts","sourceRoot":"","sources":["../src/block-stretch-layout.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EAGrB,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EAAE,KAAK,0BAA0B,EAAwB,MAAM,wBAAwB,CAAC;AAO/F,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,eAAe,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,0BAA0B,CAAC;CACnD,CAAC;AAEF,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,MAAM,GAAG;IACjE,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC1C,CA6BA;AAgBD;;;;;;GAMG;AACH,wBAAsB,6BAA6B,CACjD,IAAI,EAAE,wBAAwB,GAC7B,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CA8ElE"}
@@ -1,6 +1,7 @@
1
1
  import { MARKER_ID_BODY, buildBlockScrollLinks, } from "@commentray/core";
2
2
  import { escapeHtml } from "./html-utils.js";
3
- import { renderFencedCode, renderMarkdownToHtml, } from "./markdown-pipeline.js";
3
+ import { renderHighlightedCodeLineRows } from "./highlighted-code-lines.js";
4
+ import { renderMarkdownToHtml } from "./markdown-pipeline.js";
4
5
  const BLOCK_MARKER_LINE = new RegExp(`^<!--\\s*commentray:block\\s+id=(${MARKER_ID_BODY})\\s*-->$`, "i");
5
6
  export function splitCommentrayMarkdownSegments(markdown) {
6
7
  const lines = markdown.split("\n");
@@ -32,29 +33,13 @@ export function splitCommentrayMarkdownSegments(markdown) {
32
33
  flush();
33
34
  return { preamble: preambleLines.join("\n").trimEnd(), segments };
34
35
  }
35
- function extractPreCodeInner(html) {
36
- const m = /<pre(?:\s[^>]*)?>\s*<code(?:\s[^>]*)?>([\s\S]*?)<\/code>\s*<\/pre>/i.exec(html.trim());
37
- return m ? m[1] : escapeHtml(html);
38
- }
39
- async function renderSingleCodeLine(line, lineIndex0, language) {
40
- const display = line === "" ? " " : line;
41
- const fence = "```" + language + "\n" + display + "\n```\n";
42
- const block = await renderFencedCode(fence);
43
- const inner = extractPreCodeInner(block);
44
- const langAttr = escapeHtml(language);
45
- const num = lineIndex0 + 1;
46
- return (`<div class="code-line" id="code-line-${lineIndex0}" data-line="${lineIndex0}">` +
47
- `<span class="ln" aria-hidden="true">${num}</span>` +
48
- `<pre><code class="hljs language-${langAttr}">${inner}</code></pre>` +
49
- `</div>`);
50
- }
51
36
  /** Renders a contiguous 0-based inclusive range of source lines into one stacked column. */
52
37
  async function renderCodeLineStack(lines, startLine0, endLine0, language) {
53
- const parts = [];
54
- for (let j = startLine0; j <= endLine0; j++) {
55
- parts.push(await renderSingleCodeLine(lines[j] ?? "", j, language));
56
- }
57
- return `<div class="stretch-code-stack">${parts.join("\n")}</div>`;
38
+ const slice = lines.slice(startLine0, endLine0 + 1).join("\n");
39
+ const inner = await renderHighlightedCodeLineRows(slice, language, {
40
+ lineIndexOffset: startLine0,
41
+ });
42
+ return `<div class="stretch-code-stack">${inner}</div>`;
58
43
  }
59
44
  /**
60
45
  * When index blocks + markdown markers align, builds a two-column table in the spirit of
@@ -86,7 +71,10 @@ export async function tryBuildBlockStretchTableHtml(opts) {
86
71
  const L = i + 1;
87
72
  const b = lineToBlock.get(L);
88
73
  if (!b) {
89
- const codeLineHtml = await renderSingleCodeLine(lines[i] ?? "", i, opts.language);
74
+ const codeLineHtml = await renderHighlightedCodeLineRows(lines[i] ?? "", opts.language, {
75
+ lineIndexOffset: i,
76
+ omitLineStackWrapper: true,
77
+ });
90
78
  rows.push(`<tr class="stretch-row stretch-row--gap"><td class="stretch-code">${codeLineHtml}</td>` +
91
79
  `<td class="stretch-doc stretch-doc--gap"><span class="stretch-gap-mark" aria-hidden="true">—</span></td></tr>`);
92
80
  i += 1;
@@ -1 +1 @@
1
- {"version":3,"file":"block-stretch-layout.js","sourceRoot":"","sources":["../src/block-stretch-layout.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"block-stretch-layout.js","sourceRoot":"","sources":["../src/block-stretch-layout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /** Same slug as `_site/browse/<slug>.html` in `github-pages-site.ts` (nav search + browse pages). */
2
+ export declare function browsePageSlugFromPair(pair: {
3
+ sourcePath: string;
4
+ commentrayPath: string;
5
+ }): string;
6
+ //# sourceMappingURL=browse-page-slug.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browse-page-slug.d.ts","sourceRoot":"","sources":["../src/browse-page-slug.ts"],"names":[],"mappings":"AAEA,qGAAqG;AACrG,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,MAAM,CAKT"}
@@ -0,0 +1,9 @@
1
+ import { createHash } from "node:crypto";
2
+ /** Same slug as `_site/browse/<slug>.html` in `github-pages-site.ts` (nav search + browse pages). */
3
+ export function browsePageSlugFromPair(pair) {
4
+ return createHash("sha256")
5
+ .update(`${pair.commentrayPath}\0${pair.sourcePath}`, "utf8")
6
+ .digest("base64url")
7
+ .slice(0, 28);
8
+ }
9
+ //# sourceMappingURL=browse-page-slug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browse-page-slug.js","sourceRoot":"","sources":["../src/browse-page-slug.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,qGAAqG;AACrG,MAAM,UAAU,sBAAsB,CAAC,IAGtC;IACC,OAAO,UAAU,CAAC,QAAQ,CAAC;SACxB,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM,CAAC;SAC5D,MAAM,CAAC,WAAW,CAAC;SACnB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC"}
@@ -15,12 +15,23 @@ export type CommentrayNavSearchRow = {
15
15
  line: number;
16
16
  text: string;
17
17
  };
18
- /** One indexed source ↔ commentray pair with absolute GitHub blob links for static hub pages. */
18
+ /**
19
+ * One indexed source ↔ commentray pair for the static hub.
20
+ * Optional SCM blob URLs are filled when `[static_site].github_url` is set (GitHub-style today;
21
+ * configurable host URL — see plan). Same-site `./browse/…` links are added by the static-site
22
+ * build so navigation stays on the exported HTML without requiring an external host.
23
+ */
19
24
  export type DocumentedPairNav = {
20
25
  sourcePath: string;
21
26
  commentrayPath: string;
22
- sourceOnGithub: string;
23
- commentrayOnGithub: string;
27
+ sourceOnGithub?: string;
28
+ commentrayOnGithub?: string;
29
+ /**
30
+ * When the static Pages build emits per-pair browse HTML (e.g. `_site/browse/…html`), a URL
31
+ * relative to the site root `index.html` (e.g. `./browse/x.html`) so the hub can open the same
32
+ * Commentray UI for other files without leaving the site.
33
+ */
34
+ staticBrowseUrl?: string;
24
35
  };
25
36
  export type CommentrayNavSearchDocument = {
26
37
  schemaVersion: typeof COMMENTRAY_NAV_SEARCH_SCHEMA_VERSION;
@@ -45,8 +56,13 @@ export type BuildCommentrayNavSearchGithubBlobBase = {
45
56
  * Builds a JSON-serialisable search corpus: **filenames / paths** plus **commentray Markdown lines**
46
57
  * for each indexed pair. Primary source file contents are intentionally omitted.
47
58
  *
48
- * When `githubBlobBase` is set, `documentedPairs` lists every pair with GitHub **blob** URLs for
49
- * the static hub tree and outbound links.
59
+ * `documentedPairs` lists every merged pair. When `githubBlobBase` is set, GitHub-style **blob**
60
+ * URLs are included for optional outbound links; the static-site build always adds same-site
61
+ * `staticBrowseUrl` when it emits `_site/browse/*.html`.
62
+ *
63
+ * Pairs are merged from the metadata index, a walk of the configured storage `source` tree for
64
+ * every `*.md` companion (flat or Angles layout), and an optional single-page `fallback`. For the
65
+ * same `commentrayPath`, the index wins over disk-inferred paths.
50
66
  */
51
- export declare function buildCommentrayNavSearchDocument(repoRoot: string, fallback?: BuildCommentrayNavSearchFallback, githubBlobBase?: BuildCommentrayNavSearchGithubBlobBase): Promise<CommentrayNavSearchDocument>;
67
+ export declare function buildCommentrayNavSearchDocument(repoRoot: string, fallback?: BuildCommentrayNavSearchFallback, githubBlobBase?: BuildCommentrayNavSearchGithubBlobBase, storageDir?: string): Promise<CommentrayNavSearchDocument>;
52
68
  //# sourceMappingURL=build-commentray-nav-search.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"build-commentray-nav-search.d.ts","sourceRoot":"","sources":["../src/build-commentray-nav-search.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,oCAAoC,EAAG,CAAU,CAAC;AAE/D,6FAA6F;AAC7F,MAAM,MAAM,sBAAsB,GAC9B;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAClE;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GACtE;IACE,IAAI,EAAE,gBAAgB,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEN,iGAAiG;AACjG,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,aAAa,EAAE,OAAO,oCAAoC,CAAC;IAC3D,IAAI,EAAE,sBAAsB,EAAE,CAAC;IAC/B,kGAAkG;IAClG,eAAe,CAAC,EAAE,iBAAiB,EAAE,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,6DAA6D;IAC7D,UAAU,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,cAAc,EAAE,MAAM,CAAC;IACvB,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,sCAAsC,GAAG;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AA4CF;;;;;;GAMG;AACH,wBAAsB,gCAAgC,CACpD,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,gCAAgC,EAC3C,cAAc,CAAC,EAAE,sCAAsC,GACtD,OAAO,CAAC,2BAA2B,CAAC,CAgDtC"}
1
+ {"version":3,"file":"build-commentray-nav-search.d.ts","sourceRoot":"","sources":["../src/build-commentray-nav-search.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,oCAAoC,EAAG,CAAU,CAAC;AAE/D,6FAA6F;AAC7F,MAAM,MAAM,sBAAsB,GAC9B;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAClE;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GACtE;IACE,IAAI,EAAE,gBAAgB,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEN;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,aAAa,EAAE,OAAO,oCAAoC,CAAC;IAC3D,IAAI,EAAE,sBAAsB,EAAE,CAAC;IAC/B,kGAAkG;IAClG,eAAe,CAAC,EAAE,iBAAiB,EAAE,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,6DAA6D;IAC7D,UAAU,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,cAAc,EAAE,MAAM,CAAC;IACvB,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,sCAAsC,GAAG;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAkFF;;;;;;;;;;;GAWG;AACH,wBAAsB,gCAAgC,CACpD,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,gCAAgC,EAC3C,cAAc,CAAC,EAAE,sCAAsC,EACvD,UAAU,SAAgB,GACzB,OAAO,CAAC,2BAA2B,CAAC,CAkCtC"}
@@ -1,25 +1,50 @@
1
1
  import { readFile } from "node:fs/promises";
2
- import path from "node:path";
3
- import { githubRepoBlobFileUrl, readIndex } from "@commentray/core";
2
+ import { discoverCommentrayPairsOnDisk, githubRepoBlobFileUrl, readIndex, resolvePathUnderRepoRoot, } from "@commentray/core";
4
3
  export const COMMENTRAY_NAV_SEARCH_SCHEMA_VERSION = 1;
5
4
  function buildDocumentedPairs(pairs, gh) {
6
- const { owner, repo, branch } = gh;
7
5
  const uniq = new Map();
8
6
  for (const { sourcePath, commentrayPath } of pairs) {
9
7
  const key = `${sourcePath}\0${commentrayPath}`;
10
8
  if (uniq.has(key))
11
9
  continue;
12
- uniq.set(key, {
13
- sourcePath,
14
- commentrayPath,
15
- sourceOnGithub: githubRepoBlobFileUrl(owner, repo, branch, sourcePath),
16
- commentrayOnGithub: githubRepoBlobFileUrl(owner, repo, branch, commentrayPath),
17
- });
10
+ const row = { sourcePath, commentrayPath };
11
+ if (gh !== undefined) {
12
+ row.sourceOnGithub = githubRepoBlobFileUrl(gh.owner, gh.repo, gh.branch, sourcePath);
13
+ row.commentrayOnGithub = githubRepoBlobFileUrl(gh.owner, gh.repo, gh.branch, commentrayPath);
14
+ }
15
+ uniq.set(key, row);
18
16
  }
19
17
  return [...uniq.values()].sort((a, b) => a.sourcePath === b.sourcePath
20
18
  ? a.commentrayPath.localeCompare(b.commentrayPath)
21
19
  : a.sourcePath.localeCompare(b.sourcePath));
22
20
  }
21
+ function mergeNavSearchPairs(indexPairs, diskPairs, fallback) {
22
+ const byCr = new Map();
23
+ for (const p of diskPairs) {
24
+ byCr.set(p.commentrayPath, { sourcePath: p.sourcePath, commentrayPath: p.commentrayPath });
25
+ }
26
+ for (const e of indexPairs) {
27
+ byCr.set(e.commentrayPath, { sourcePath: e.sourcePath, commentrayPath: e.commentrayPath });
28
+ }
29
+ if (fallback !== undefined) {
30
+ const fp = {
31
+ sourcePath: fallback.sourcePath,
32
+ commentrayPath: fallback.commentrayPath,
33
+ };
34
+ if (!byCr.has(fp.commentrayPath)) {
35
+ byCr.set(fp.commentrayPath, fp);
36
+ }
37
+ }
38
+ return [...byCr.values()].sort((a, b) => a.commentrayPath.localeCompare(b.commentrayPath));
39
+ }
40
+ function markdownAbsForMergedPair(repoRoot, pair, fallback) {
41
+ if (fallback !== undefined &&
42
+ pair.commentrayPath === fallback.commentrayPath &&
43
+ pair.sourcePath === fallback.sourcePath) {
44
+ return fallback.markdownAbs;
45
+ }
46
+ return resolvePathUnderRepoRoot(repoRoot, pair.commentrayPath);
47
+ }
23
48
  async function appendPairRowsSync(rows, sourcePath, commentrayPath, markdownAbs) {
24
49
  rows.push({ kind: "sourcePath", sourcePath, commentrayPath });
25
50
  rows.push({ kind: "commentrayPath", sourcePath, commentrayPath });
@@ -38,42 +63,36 @@ async function appendPairRowsSync(rows, sourcePath, commentrayPath, markdownAbs)
38
63
  * Builds a JSON-serialisable search corpus: **filenames / paths** plus **commentray Markdown lines**
39
64
  * for each indexed pair. Primary source file contents are intentionally omitted.
40
65
  *
41
- * When `githubBlobBase` is set, `documentedPairs` lists every pair with GitHub **blob** URLs for
42
- * the static hub tree and outbound links.
66
+ * `documentedPairs` lists every merged pair. When `githubBlobBase` is set, GitHub-style **blob**
67
+ * URLs are included for optional outbound links; the static-site build always adds same-site
68
+ * `staticBrowseUrl` when it emits `_site/browse/*.html`.
69
+ *
70
+ * Pairs are merged from the metadata index, a walk of the configured storage `source` tree for
71
+ * every `*.md` companion (flat or Angles layout), and an optional single-page `fallback`. For the
72
+ * same `commentrayPath`, the index wins over disk-inferred paths.
43
73
  */
44
- export async function buildCommentrayNavSearchDocument(repoRoot, fallback, githubBlobBase) {
74
+ export async function buildCommentrayNavSearchDocument(repoRoot, fallback, githubBlobBase, storageDir = ".commentray") {
45
75
  const rows = [];
46
76
  const idx = await readIndex(repoRoot);
47
- const fromIndex = idx !== null && Object.keys(idx.byCommentrayPath).length > 0
48
- ? Object.entries(idx.byCommentrayPath).sort(([a], [b]) => a.localeCompare(b))
49
- : [];
50
- if (fromIndex.length > 0) {
51
- for (const [crPath, entry] of fromIndex) {
52
- await appendPairRowsSync(rows, entry.sourcePath, crPath, path.join(repoRoot, crPath));
53
- }
54
- const pairInputs = fromIndex.map(([, e]) => ({
77
+ const indexPairs = idx !== null && Object.keys(idx.byCommentrayPath).length > 0
78
+ ? Object.entries(idx.byCommentrayPath).map(([crPath, e]) => ({
79
+ commentrayPath: crPath,
55
80
  sourcePath: e.sourcePath,
56
- commentrayPath: e.commentrayPath,
57
- }));
58
- const documentedPairs = githubBlobBase
59
- ? buildDocumentedPairs(pairInputs, githubBlobBase)
60
- : undefined;
61
- return {
62
- schemaVersion: COMMENTRAY_NAV_SEARCH_SCHEMA_VERSION,
63
- rows,
64
- ...(documentedPairs ? { documentedPairs } : {}),
65
- };
81
+ }))
82
+ : [];
83
+ const diskPairs = await discoverCommentrayPairsOnDisk(repoRoot, storageDir);
84
+ const merged = mergeNavSearchPairs(indexPairs, diskPairs, fallback);
85
+ if (merged.length === 0) {
86
+ return { schemaVersion: COMMENTRAY_NAV_SEARCH_SCHEMA_VERSION, rows };
66
87
  }
67
- if (fallback !== undefined) {
68
- await appendPairRowsSync(rows, fallback.sourcePath, fallback.commentrayPath, fallback.markdownAbs);
88
+ for (const p of merged) {
89
+ await appendPairRowsSync(rows, p.sourcePath, p.commentrayPath, markdownAbsForMergedPair(repoRoot, p, fallback));
69
90
  }
70
- const documentedPairs = githubBlobBase && fallback !== undefined
71
- ? buildDocumentedPairs([{ sourcePath: fallback.sourcePath, commentrayPath: fallback.commentrayPath }], githubBlobBase)
72
- : undefined;
91
+ const documentedPairs = buildDocumentedPairs(merged, githubBlobBase);
73
92
  return {
74
93
  schemaVersion: COMMENTRAY_NAV_SEARCH_SCHEMA_VERSION,
75
94
  rows,
76
- ...(documentedPairs ? { documentedPairs } : {}),
95
+ documentedPairs,
77
96
  };
78
97
  }
79
98
  //# sourceMappingURL=build-commentray-nav-search.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"build-commentray-nav-search.js","sourceRoot":"","sources":["../src/build-commentray-nav-search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build-commentray-nav-search.js","sourceRoot":"","sources":["../src/build-commentray-nav-search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EACL,6BAA6B,EAC7B,qBAAqB,EACrB,SAAS,EACT,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAAU,CAAC;AAuD/D,SAAS,oBAAoB,CAC3B,KAAuD,EACvD,EAA2C;IAE3C,MAAM,IAAI,GAAG,IAAI,GAAG,EAA6B,CAAC;IAClD,KAAK,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,IAAI,KAAK,EAAE,CAAC;QACnD,MAAM,GAAG,GAAG,GAAG,UAAU,KAAK,cAAc,EAAE,CAAC;QAC/C,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5B,MAAM,GAAG,GAAsB,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;QAC9D,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACrB,GAAG,CAAC,cAAc,GAAG,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACrF,GAAG,CAAC,kBAAkB,GAAG,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAC/F,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACtC,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU;QAC3B,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC;QAClD,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAC7C,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,UAA4D,EAC5D,SAA2D,EAC3D,QAA2C;IAE3C,MAAM,IAAI,GAAG,IAAI,GAAG,EAA0D,CAAC;IAC/E,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,cAAc,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;IAC7F,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,cAAc,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;IAC7F,CAAC;IACD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG;YACT,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,cAAc,EAAE,QAAQ,CAAC,cAAc;SACxC,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;AAC7F,CAAC;AAED,SAAS,wBAAwB,CAC/B,QAAgB,EAChB,IAAoD,EACpD,QAA2C;IAE3C,IACE,QAAQ,KAAK,SAAS;QACtB,IAAI,CAAC,cAAc,KAAK,QAAQ,CAAC,cAAc;QAC/C,IAAI,CAAC,UAAU,KAAK,QAAQ,CAAC,UAAU,EACvC,CAAC;QACD,OAAO,QAAQ,CAAC,WAAW,CAAC;IAC9B,CAAC;IACD,OAAO,wBAAwB,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;AACjE,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,IAA8B,EAC9B,UAAkB,EAClB,cAAsB,EACtB,WAAmB;IAEnB,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC,CAAC;IAC9D,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC,CAAC;IAClE,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,uDAAuD;IACzD,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,QAAgB,EAChB,QAA2C,EAC3C,cAAuD,EACvD,UAAU,GAAG,aAAa;IAE1B,MAAM,IAAI,GAA6B,EAAE,CAAC;IAC1C,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,UAAU,GACd,GAAG,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,MAAM,GAAG,CAAC;QAC1D,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzD,cAAc,EAAE,MAAM;YACtB,UAAU,EAAE,CAAC,CAAC,UAAU;SACzB,CAAC,CAAC;QACL,CAAC,CAAC,EAAE,CAAC;IAET,MAAM,SAAS,GAAG,MAAM,6BAA6B,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,mBAAmB,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAEpE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,aAAa,EAAE,oCAAoC,EAAE,IAAI,EAAE,CAAC;IACvE,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,kBAAkB,CACtB,IAAI,EACJ,CAAC,CAAC,UAAU,EACZ,CAAC,CAAC,cAAc,EAChB,wBAAwB,CAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,CAAC,CAChD,CAAC;IACJ,CAAC;IAED,MAAM,eAAe,GAAG,oBAAoB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAErE,OAAO;QACL,aAAa,EAAE,oCAAoC;QACnD,IAAI;QACJ,eAAe;KAChB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Human-readable “when was this HTML built” line for static pages, using the
3
+ * **Node process** local timezone and a zone name/offset from `Intl` (not UTC-only).
4
+ */
5
+ export declare function formatCommentrayBuiltAtLocal(date: Date): string;
6
+ //# sourceMappingURL=build-stamp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-stamp.d.ts","sourceRoot":"","sources":["../src/build-stamp.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAgB/D"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Human-readable “when was this HTML built” line for static pages, using the
3
+ * **Node process** local timezone and a zone name/offset from `Intl` (not UTC-only).
4
+ */
5
+ export function formatCommentrayBuiltAtLocal(date) {
6
+ try {
7
+ return new Intl.DateTimeFormat(undefined, {
8
+ weekday: "short",
9
+ year: "numeric",
10
+ month: "short",
11
+ day: "numeric",
12
+ hour: "2-digit",
13
+ minute: "2-digit",
14
+ second: "2-digit",
15
+ hour12: false,
16
+ timeZoneName: "longOffset",
17
+ }).format(date);
18
+ }
19
+ catch {
20
+ return date.toISOString();
21
+ }
22
+ }
23
+ //# sourceMappingURL=build-stamp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-stamp.js","sourceRoot":"","sources":["../src/build-stamp.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAAC,IAAU;IACrD,IAAI,CAAC;QACH,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE;YACxC,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,OAAO;YACd,GAAG,EAAE,SAAS;YACd,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,KAAK;YACb,YAAY,EAAE,YAAY;SAC3B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;AACH,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { type BlockScrollLink } from "./code-browser-scroll-sync.js";
2
+ /** Gutter-local Y after clamping to visible gutter band (viewport-relative input). */
3
+ export type GutterYClamp = {
4
+ y: number;
5
+ clipped: "none" | "above" | "below";
6
+ };
7
+ /**
8
+ * Maps a viewport Y to gutter-local coordinates and clamps into the gutter band
9
+ * so off-screen anchors draw at the top/bottom edge of the gutter.
10
+ */
11
+ export declare function clampViewportYToGutterLocal(yViewport: number, gutterTop: number, gutterHeight: number, margin?: number): GutterYClamp;
12
+ export type GutterClipKind = GutterYClamp["clipped"];
13
+ export type GutterPt = {
14
+ x: number;
15
+ y: number;
16
+ };
17
+ /**
18
+ * Options for gutter Bézier paths: tension, clipping at viewport edges, and optional split for
19
+ * dotted “tail” segments when an anchor is off-screen.
20
+ */
21
+ export type GutterRayBezierOpts = {
22
+ tension?: number;
23
+ clipStart?: GutterClipKind;
24
+ clipEnd?: GutterClipKind;
25
+ splitT?: number;
26
+ };
27
+ /**
28
+ * Horizontal cubic between the code edge (x0) and doc edge (x1), IntelliJ-style.
29
+ *
30
+ * When an endpoint is **clipped** to the top/bottom of the gutter (anchor off-screen), the
31
+ * corresponding control handle is lengthened so the curve **hugs the viewport boundary** with a
32
+ * horizontal tangent there—read as “the ray meets the edge flat,” not a pointer toward far
33
+ * off-screen content.
34
+ */
35
+ export declare function gutterCubicControlPoints(x0: number, y0: number, x1: number, y1: number, opts?: Pick<GutterRayBezierOpts, "tension" | "clipStart" | "clipEnd">): [GutterPt, GutterPt, GutterPt, GutterPt];
36
+ export declare function cubicBezierDFromControlPoints(p0: GutterPt, p1: GutterPt, p2: GutterPt, p3: GutterPt): string;
37
+ /** de Casteljau split of a cubic Bézier at t ∈ (0, 1). */
38
+ export declare function splitCubicAtT(p0: GutterPt, p1: GutterPt, p2: GutterPt, p3: GutterPt, t: number): [[GutterPt, GutterPt, GutterPt, GutterPt], [GutterPt, GutterPt, GutterPt, GutterPt]];
39
+ export declare function gutterRayBezierPaths(x0: number, y0: number, x1: number, y1: number, opts?: GutterRayBezierOpts): {
40
+ solid: string;
41
+ dotted?: string;
42
+ };
43
+ export declare function cubicBezierAcrossGutterD(x0: number, y0: number, x1: number, y1: number, opts?: Pick<GutterRayBezierOpts, "tension" | "clipStart" | "clipEnd">): string;
44
+ export declare function sortBlockLinksBySource(links: BlockScrollLink[]): BlockScrollLink[];
45
+ export declare function activeBlockIdForViewport(links: BlockScrollLink[], topSourceLine1Based: number): string | null;
46
+ /** 0-based index into `code-line-*` ids from 1-based inclusive source line numbers. */
47
+ export declare function codeLineDomIndex0(sourceLine1Based: number): number;
48
+ //# sourceMappingURL=code-browser-block-rays.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-browser-block-rays.d.ts","sourceRoot":"","sources":["../src/code-browser-block-rays.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,+BAA+B,CAAC;AAEvC,sFAAsF;AACtF,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;CACrC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,MAAM,SAAI,GACT,YAAY,CAMd;AAED,MAAM,MAAM,cAAc,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;AAErD,MAAM,MAAM,QAAQ,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhD;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,IAAI,GAAE,IAAI,CAAC,mBAAmB,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,CAAM,GACxE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAa1C;AAED,wBAAgB,6BAA6B,CAC3C,EAAE,EAAE,QAAQ,EACZ,EAAE,EAAE,QAAQ,EACZ,EAAE,EAAE,QAAQ,EACZ,EAAE,EAAE,QAAQ,GACX,MAAM,CAER;AAED,0DAA0D;AAC1D,wBAAgB,aAAa,CAC3B,EAAE,EAAE,QAAQ,EACZ,EAAE,EAAE,QAAQ,EACZ,EAAE,EAAE,QAAQ,EACZ,EAAE,EAAE,QAAQ,EACZ,CAAC,EAAE,MAAM,GACR,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAWtF;AAMD,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,IAAI,GAAE,mBAAwB,GAC7B;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAepC;AAED,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,IAAI,GAAE,IAAI,CAAC,mBAAmB,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,CAAM,GACxE,MAAM,CAGR;AAMD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,eAAe,EAAE,CAElF;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,eAAe,EAAE,EACxB,mBAAmB,EAAE,MAAM,GAC1B,MAAM,GAAG,IAAI,CAMf;AAED,uFAAuF;AACvF,wBAAgB,iBAAiB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAElE"}
@@ -0,0 +1,95 @@
1
+ import { pickCommentrayLineForSourceScroll, } from "./code-browser-scroll-sync.js";
2
+ /**
3
+ * Maps a viewport Y to gutter-local coordinates and clamps into the gutter band
4
+ * so off-screen anchors draw at the top/bottom edge of the gutter.
5
+ */
6
+ export function clampViewportYToGutterLocal(yViewport, gutterTop, gutterHeight, margin = 5) {
7
+ const lo = gutterTop + margin;
8
+ const hi = gutterTop + gutterHeight - margin;
9
+ if (yViewport < lo)
10
+ return { y: lo - gutterTop, clipped: "above" };
11
+ if (yViewport > hi)
12
+ return { y: hi - gutterTop, clipped: "below" };
13
+ return { y: yViewport - gutterTop, clipped: "none" };
14
+ }
15
+ /**
16
+ * Horizontal cubic between the code edge (x0) and doc edge (x1), IntelliJ-style.
17
+ *
18
+ * When an endpoint is **clipped** to the top/bottom of the gutter (anchor off-screen), the
19
+ * corresponding control handle is lengthened so the curve **hugs the viewport boundary** with a
20
+ * horizontal tangent there—read as “the ray meets the edge flat,” not a pointer toward far
21
+ * off-screen content.
22
+ */
23
+ export function gutterCubicControlPoints(x0, y0, x1, y1, opts = {}) {
24
+ const { tension = 0.38, clipStart = "none", clipEnd = "none" } = opts;
25
+ const boost = 0.24;
26
+ const boosted = Math.min(0.66, tension + boost);
27
+ const t0 = clipStart === "none" ? tension : boosted;
28
+ const t1 = clipEnd === "none" ? tension : boosted;
29
+ const dx = x1 - x0;
30
+ return [
31
+ { x: x0, y: y0 },
32
+ { x: x0 + dx * t0, y: y0 },
33
+ { x: x1 - dx * t1, y: y1 },
34
+ { x: x1, y: y1 },
35
+ ];
36
+ }
37
+ export function cubicBezierDFromControlPoints(p0, p1, p2, p3) {
38
+ return `M ${fmt(p0.x)} ${fmt(p0.y)} C ${fmt(p1.x)} ${fmt(p1.y)} ${fmt(p2.x)} ${fmt(p2.y)} ${fmt(p3.x)} ${fmt(p3.y)}`;
39
+ }
40
+ /** de Casteljau split of a cubic Bézier at t ∈ (0, 1). */
41
+ export function splitCubicAtT(p0, p1, p2, p3, t) {
42
+ const q0 = lerpPt(p0, p1, t);
43
+ const q1 = lerpPt(p1, p2, t);
44
+ const q2 = lerpPt(p2, p3, t);
45
+ const r0 = lerpPt(q0, q1, t);
46
+ const r1 = lerpPt(q1, q2, t);
47
+ const s = lerpPt(r0, r1, t);
48
+ return [
49
+ [p0, q0, r0, s],
50
+ [s, r1, q2, p3],
51
+ ];
52
+ }
53
+ function lerpPt(a, b, t) {
54
+ return { x: (1 - t) * a.x + t * b.x, y: (1 - t) * a.y + t * b.y };
55
+ }
56
+ export function gutterRayBezierPaths(x0, y0, x1, y1, opts = {}) {
57
+ const { tension = 0.38, clipStart = "none", clipEnd = "none", splitT = 0.66 } = opts;
58
+ const pts = gutterCubicControlPoints(x0, y0, x1, y1, { tension, clipStart, clipEnd });
59
+ const [p0, p1, p2, p3] = pts;
60
+ const interrupt = clipStart !== "none" || clipEnd !== "none";
61
+ if (!interrupt) {
62
+ return { solid: cubicBezierDFromControlPoints(p0, p1, p2, p3) };
63
+ }
64
+ const [left, right] = splitCubicAtT(p0, p1, p2, p3, splitT);
65
+ const [a0, a1, a2, a3] = left;
66
+ const [b0, b1, b2, b3] = right;
67
+ return {
68
+ solid: cubicBezierDFromControlPoints(a0, a1, a2, a3),
69
+ dotted: cubicBezierDFromControlPoints(b0, b1, b2, b3),
70
+ };
71
+ }
72
+ export function cubicBezierAcrossGutterD(x0, y0, x1, y1, opts = {}) {
73
+ const [p0, p1, p2, p3] = gutterCubicControlPoints(x0, y0, x1, y1, opts);
74
+ return cubicBezierDFromControlPoints(p0, p1, p2, p3);
75
+ }
76
+ function fmt(n) {
77
+ return n.toFixed(2);
78
+ }
79
+ export function sortBlockLinksBySource(links) {
80
+ return [...links].sort((a, b) => a.sourceStart - b.sourceStart);
81
+ }
82
+ export function activeBlockIdForViewport(links, topSourceLine1Based) {
83
+ if (links.length === 0)
84
+ return null;
85
+ const mdLine = pickCommentrayLineForSourceScroll(links, topSourceLine1Based);
86
+ if (mdLine === null)
87
+ return null;
88
+ const b = links.find((x) => x.commentrayLine === mdLine);
89
+ return b?.id ?? null;
90
+ }
91
+ /** 0-based index into `code-line-*` ids from 1-based inclusive source line numbers. */
92
+ export function codeLineDomIndex0(sourceLine1Based) {
93
+ return Math.max(0, sourceLine1Based - 1);
94
+ }
95
+ //# sourceMappingURL=code-browser-block-rays.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-browser-block-rays.js","sourceRoot":"","sources":["../src/code-browser-block-rays.ts"],"names":[],"mappings":"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"}