@commentray/render 0.0.4 → 0.0.5
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.
- package/dist/block-stretch-layout.d.ts.map +1 -1
- package/dist/block-stretch-layout.js +11 -23
- package/dist/block-stretch-layout.js.map +1 -1
- package/dist/build-commentray-nav-search.d.ts +11 -1
- package/dist/build-commentray-nav-search.d.ts.map +1 -1
- package/dist/build-commentray-nav-search.js +45 -26
- package/dist/build-commentray-nav-search.js.map +1 -1
- package/dist/build-stamp.d.ts +6 -0
- package/dist/build-stamp.d.ts.map +1 -0
- package/dist/build-stamp.js +23 -0
- package/dist/build-stamp.js.map +1 -0
- package/dist/code-browser-client.bundle.js +11 -6
- package/dist/code-browser-client.js +463 -94
- package/dist/code-browser-client.js.map +1 -1
- package/dist/code-browser-search.d.ts +5 -0
- package/dist/code-browser-search.d.ts.map +1 -1
- package/dist/code-browser-search.js +28 -0
- package/dist/code-browser-search.js.map +1 -1
- package/dist/code-browser.d.ts +30 -2
- package/dist/code-browser.d.ts.map +1 -1
- package/dist/code-browser.js +599 -171
- package/dist/code-browser.js.map +1 -1
- package/dist/highlighted-code-lines.d.ts +19 -0
- package/dist/highlighted-code-lines.d.ts.map +1 -0
- package/dist/highlighted-code-lines.js +61 -0
- package/dist/highlighted-code-lines.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/markdown-pipeline.js +1 -1
- package/dist/markdown-pipeline.js.map +1 -1
- 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;
|
|
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 {
|
|
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
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
return `<div class="stretch-code-stack">${
|
|
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
|
|
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":"AAAA,OAAO,EAGL,cAAc,EACd,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,
|
|
1
|
+
{"version":3,"file":"block-stretch-layout.js","sourceRoot":"","sources":["../src/block-stretch-layout.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,12 @@ export type DocumentedPairNav = {
|
|
|
21
21
|
commentrayPath: string;
|
|
22
22
|
sourceOnGithub: string;
|
|
23
23
|
commentrayOnGithub: string;
|
|
24
|
+
/**
|
|
25
|
+
* When the static Pages build emits per-pair browse HTML (e.g. `_site/browse/…html`), a URL
|
|
26
|
+
* relative to the site root `index.html` (e.g. `./browse/x.html`) so the hub can open the same
|
|
27
|
+
* Commentray UI for other files without leaving the site.
|
|
28
|
+
*/
|
|
29
|
+
staticBrowseUrl?: string;
|
|
24
30
|
};
|
|
25
31
|
export type CommentrayNavSearchDocument = {
|
|
26
32
|
schemaVersion: typeof COMMENTRAY_NAV_SEARCH_SCHEMA_VERSION;
|
|
@@ -47,6 +53,10 @@ export type BuildCommentrayNavSearchGithubBlobBase = {
|
|
|
47
53
|
*
|
|
48
54
|
* When `githubBlobBase` is set, `documentedPairs` lists every pair with GitHub **blob** URLs for
|
|
49
55
|
* the static hub tree and outbound links.
|
|
56
|
+
*
|
|
57
|
+
* Pairs are merged from the metadata index, a walk of the configured storage `source` tree for
|
|
58
|
+
* every `*.md` companion (flat or Angles layout), and an optional single-page `fallback`. For the
|
|
59
|
+
* same `commentrayPath`, the index wins over disk-inferred paths.
|
|
50
60
|
*/
|
|
51
|
-
export declare function buildCommentrayNavSearchDocument(repoRoot: string, fallback?: BuildCommentrayNavSearchFallback, githubBlobBase?: BuildCommentrayNavSearchGithubBlobBase): Promise<CommentrayNavSearchDocument>;
|
|
61
|
+
export declare function buildCommentrayNavSearchDocument(repoRoot: string, fallback?: BuildCommentrayNavSearchFallback, githubBlobBase?: BuildCommentrayNavSearchGithubBlobBase, storageDir?: string): Promise<CommentrayNavSearchDocument>;
|
|
52
62
|
//# 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":"
|
|
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,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;IAC3B;;;;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;AAmFF;;;;;;;;;;GAUG;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,CAmCtC"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { readFile } from "node:fs/promises";
|
|
2
|
-
import
|
|
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
5
|
const { owner, repo, branch } = gh;
|
|
@@ -20,6 +19,33 @@ function buildDocumentedPairs(pairs, gh) {
|
|
|
20
19
|
? a.commentrayPath.localeCompare(b.commentrayPath)
|
|
21
20
|
: a.sourcePath.localeCompare(b.sourcePath));
|
|
22
21
|
}
|
|
22
|
+
function mergeNavSearchPairs(indexPairs, diskPairs, fallback) {
|
|
23
|
+
const byCr = new Map();
|
|
24
|
+
for (const p of diskPairs) {
|
|
25
|
+
byCr.set(p.commentrayPath, { sourcePath: p.sourcePath, commentrayPath: p.commentrayPath });
|
|
26
|
+
}
|
|
27
|
+
for (const e of indexPairs) {
|
|
28
|
+
byCr.set(e.commentrayPath, { sourcePath: e.sourcePath, commentrayPath: e.commentrayPath });
|
|
29
|
+
}
|
|
30
|
+
if (fallback !== undefined) {
|
|
31
|
+
const fp = {
|
|
32
|
+
sourcePath: fallback.sourcePath,
|
|
33
|
+
commentrayPath: fallback.commentrayPath,
|
|
34
|
+
};
|
|
35
|
+
if (!byCr.has(fp.commentrayPath)) {
|
|
36
|
+
byCr.set(fp.commentrayPath, fp);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return [...byCr.values()].sort((a, b) => a.commentrayPath.localeCompare(b.commentrayPath));
|
|
40
|
+
}
|
|
41
|
+
function markdownAbsForMergedPair(repoRoot, pair, fallback) {
|
|
42
|
+
if (fallback !== undefined &&
|
|
43
|
+
pair.commentrayPath === fallback.commentrayPath &&
|
|
44
|
+
pair.sourcePath === fallback.sourcePath) {
|
|
45
|
+
return fallback.markdownAbs;
|
|
46
|
+
}
|
|
47
|
+
return resolvePathUnderRepoRoot(repoRoot, pair.commentrayPath);
|
|
48
|
+
}
|
|
23
49
|
async function appendPairRowsSync(rows, sourcePath, commentrayPath, markdownAbs) {
|
|
24
50
|
rows.push({ kind: "sourcePath", sourcePath, commentrayPath });
|
|
25
51
|
rows.push({ kind: "commentrayPath", sourcePath, commentrayPath });
|
|
@@ -40,36 +66,29 @@ async function appendPairRowsSync(rows, sourcePath, commentrayPath, markdownAbs)
|
|
|
40
66
|
*
|
|
41
67
|
* When `githubBlobBase` is set, `documentedPairs` lists every pair with GitHub **blob** URLs for
|
|
42
68
|
* the static hub tree and outbound links.
|
|
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
|
|
48
|
-
? Object.entries(idx.byCommentrayPath).
|
|
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
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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
|
-
|
|
68
|
-
await appendPairRowsSync(rows,
|
|
88
|
+
for (const p of merged) {
|
|
89
|
+
await appendPairRowsSync(rows, p.sourcePath, p.commentrayPath, markdownAbsForMergedPair(repoRoot, p, fallback));
|
|
69
90
|
}
|
|
70
|
-
const documentedPairs = githubBlobBase
|
|
71
|
-
? buildDocumentedPairs([{ sourcePath: fallback.sourcePath, commentrayPath: fallback.commentrayPath }], githubBlobBase)
|
|
72
|
-
: undefined;
|
|
91
|
+
const documentedPairs = githubBlobBase !== undefined ? buildDocumentedPairs(merged, githubBlobBase) : undefined;
|
|
73
92
|
return {
|
|
74
93
|
schemaVersion: COMMENTRAY_NAV_SEARCH_SCHEMA_VERSION,
|
|
75
94
|
rows,
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
1
|
+
{"version":3,"file":"build-commentray-nav-search.js","sourceRoot":"","sources":["../src/build-commentray-nav-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
-
"use strict";(()=>{var T=class{static ToInt32Array(e){let t=new Int32Array(e.length);for(let r=0,n=e.length;r<n;r++)t[r]=e[r];return t}},$=class{static getHashCode(e){let t=5381,r=t;for(let n=0,s=e.length;n<s&&e[n]!="\0"&&(t=(t<<5)+t^e.charCodeAt(n),n!==s-1&&e[n+1]!=="\0");n+=2)r=(r<<5)+r^e.charCodeAt(n+1);return t+1566083941*r|0}},g=class{constructor(e){this.entries=void 0,this.entries=e!==void 0?e:new Map}add(e,t){if(this.entries.has(e))throw new Error(`A meta entry with key ${e} is already present.`);this.entries.set(e,t)}get(e){return this.entries.get(e)}get allEntries(){return this.entries}toJSON(){return{entries:Object.fromEntries(this.entries)}}},N=class{static mergeMeta(e){if(e.length===0)return new g;if(e.length===1)return e[0];let t=new Map;for(let n of e)for(let[s,a]of n.allEntries){let o=t.get(s);o===void 0?t.set(s,[a]):o.push(a)}let r=new Map;for(let[n,s]of t)if(s.length!==1){if(s.every(a=>typeof a=="number")){let a=s.reduce((o,h)=>o+h,0);r.set(n,a);continue}for(let a=0;a<s.length;a++)r.set(`${n}_${a}`,s[a])}else r.set(n,s[0]);return new g(r)}},P=class{static isSurrogate(e){let t=e.charCodeAt(0);return t>=55296&&t<=57343}static isAlphanumeric(e){let t=e.charCodeAt(0);return t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122}static isLowerAlpha(e){let t=e.charCodeAt(0);return t>=97&&t<=122}},G=class{constructor(e,t){this.usableSearchers=void 0,this.usableSearchers=new Map;for(let r of t)e.includes(r.type)&&this.usableSearchers.set(r.type,r)}has(e){return this.usableSearchers.has(e)}minQuality(e){return this.usableSearchers.get(e).minQuality}spec(e){return this.usableSearchers.get(e)}},b=class{constructor(e,t,r){this.matches=void 0,this.query=void 0,this.meta=void 0,this.matches=e,this.query=t,this.meta=r}},d,k;(function(i){i.Fuzzy="fuzzy",i.Substring="substring",i.Prefix="prefix"})(d||(d={}));var H=class{constructor(e,t){this.type=void 0,this.minQuality=void 0,this.type=e,this.minQuality=Math.max(0,t)}},R=class extends H{constructor(e){super(d.Fuzzy,e)}},z=class extends H{constructor(e){super(d.Substring,e)}},A=class extends H{constructor(e){super(d.Prefix,e)}},M=class{constructor(e,t=10,r=[new R(.3),new z(0),new A(0)]){this.string=void 0,this.topN=void 0,this.searchers=void 0,this.string=e,this.topN=Math.max(0,t),this.searchers=r}},Y=class{constructor(e,t){this.removedEntities=void 0,this.meta=void 0,this.removedEntities=e,this.meta=t}},Z=class{static mergeResults(e,t){let r=e.query,n=this.mergeMatches(e.matches,t.matches,r.topN),s=N.mergeMeta([e.meta,t.meta]);return new b(n,r,s)}static mergeMatches(e,t,r){if(t.length===0)return e;if(e.length===0)return t;let n=[...e,...t];return n.sort((s,a)=>s.quality>a.quality?-1:s.quality<a.quality?1:0),n.length<=r?n:n.slice(0,r)}},ee=class{constructor(e,t,r){this.maxQueryLength=void 0,this.mainSearcher=void 0,this.secondarySearcher=void 0,this.maxQueryLength=e,this.mainSearcher=t,this.secondarySearcher=r}indexEntities(e,t,r){return this.secondarySearcher.indexEntities([],t,r),this.mainSearcher.indexEntities(e,t,r)}getMatches(e){return e.string?(e.string.length>this.maxQueryLength&&(e=new M(e.string.substring(0,this.maxQueryLength),e.topN,e.searchers)),Z.mergeResults(this.mainSearcher.getMatches(e),this.secondarySearcher.getMatches(e))):new b([],e,new g)}tryGetTerms(e){let t=this.mainSearcher.tryGetTerms(e);return t!==null?t:this.secondarySearcher.tryGetTerms(e)}getTerms(){return this.mainSearcher.getTerms().concat(this.secondarySearcher.getTerms())}tryGetEntity(e){var t,r;return(t=(r=this.mainSearcher.tryGetEntity(e))!=null?r:this.secondarySearcher.tryGetEntity(e))!=null?t:null}getEntities(){return this.mainSearcher.getEntities().concat(this.secondarySearcher.getEntities())}removeEntities(e){let t=[];for(let n=0,s=e.length;n<s;n++)(this.mainSearcher.removeEntity(e[n])||this.secondarySearcher.removeEntity(e[n]))&&t.push(e[n]);let r=new g;return new Y(t,r)}upsertEntities(e,t,r){let n=[],s=[];for(let a=0,o=e.length;a<o;a++){let h=e[a],c=t(h);this.tryUpdate(h,c,r)||(n.push(c),s.push(h))}return this.removeEntities(n),s.length>0?this.reindexSecondarySearcher(s,t,r):new g}reindexSecondarySearcher(e,t,r){let n=this.secondarySearcher.getEntities().concat(e);return this.secondarySearcher.indexEntities(n,t,r)}tryUpdate(e,t,r){return this.tryUpdateSearcher(e,t,r,this.mainSearcher)||this.tryUpdateSearcher(e,t,r,this.secondarySearcher)}tryUpdateSearcher(e,t,r,n){let s=n.tryGetTerms(t);if(s===null)return!1;if(this.termsAreEqual(s,r(e))){if(!n.replaceEntity(t,e,t))throw new Error(`Entity with id ${t} was not present.`);return!0}return!1}termsAreEqual(e,t){return e===t||e!=null&&t!=null&&e.length===t.length&&e.every((r,n)=>r===t[n])}removeEntity(e){return this.mainSearcher.removeEntity(e)||this.secondarySearcher.removeEntity(e)}replaceEntity(e,t,r){return this.mainSearcher.replaceEntity(e,t,r)||this.secondarySearcher.replaceEntity(e,t,r)}save(e){this.mainSearcher.save(e),this.secondarySearcher.save(e)}load(e){this.mainSearcher.load(e),this.secondarySearcher.load(e)}},te=class{constructor(e){this.dynamicSearcher=void 0,this.dynamicSearcher=e}removeEntities(e){let t=performance.now(),r=this.dynamicSearcher.removeEntities(e),n=Math.round(performance.now()-t);return r.meta.add("removalDuration",n),r}upsertEntities(e,t,r){let n=performance.now(),s=this.dynamicSearcher.upsertEntities(e,t,r),a=Math.round(performance.now()-n);return s.add("upsertDuration",a),s}indexEntities(e,t,r){let n=performance.now(),s=this.dynamicSearcher.indexEntities(e,t,r),a=Math.round(performance.now()-n);return s.add("indexingDurationTotal",a),s}getMatches(e){let t=performance.now(),r=this.dynamicSearcher.getMatches(e),n=Math.round(performance.now()-t);return r.meta.add("queryDuration",n),r}tryGetEntity(e){return this.dynamicSearcher.tryGetEntity(e)}getEntities(){return this.dynamicSearcher.getEntities()}tryGetTerms(e){return this.dynamicSearcher.tryGetTerms(e)}getTerms(){return this.dynamicSearcher.getTerms()}removeEntity(e){return this.dynamicSearcher.removeEntity(e)}replaceEntity(e,t,r){return this.dynamicSearcher.replaceEntity(e,t,r)}save(e){this.dynamicSearcher.save(e)}load(e){this.dynamicSearcher.load(e)}},re=class{constructor(e,t,r){this.entity=void 0,this.quality=void 0,this.matchedString=void 0,this.entity=e,this.quality=t,this.matchedString=r}},ne=class{constructor(e){this.query=void 0,this.matchedIndexes=new Set,this.matches=[],this.meta=[],this.query=e}},q=class{constructor(e,t=0,r){this.string=void 0,this.minQuality=void 0,this.searcherType=void 0,this.string=e,this.minQuality=Math.max(0,Math.min(1,t)),this.searcherType=r}},ie=class{constructor(e,t){this.stringSearcher=void 0,this.searcherTypes=void 0,this.entities=void 0,this.idToIndex=void 0,this.terms=void 0,this.termIndexToEntityIndex=void 0,this.entityIndexToFirstTermIndex=void 0,this.searchersAndQualityOffsets=[{searcherType:d.Prefix,qualityOffset:2},{searcherType:d.Substring,qualityOffset:1},{searcherType:d.Fuzzy,qualityOffset:0}],this.stringSearcher=e,this.searcherTypes=t,this.entities=[],this.idToIndex=new Map,this.terms=[],this.termIndexToEntityIndex=new Int32Array(0),this.entityIndexToFirstTermIndex=new Int32Array(0)}indexEntities(e,t,r){this.entities=[...e],this.idToIndex=new Map,this.terms=[];let n=[],s=[];for(let o=0,h=e.length;o<h;o++){this.idToIndex.set(t(e[o]),o);let c=r(e[o]);s.push(this.terms.length),this.terms.push(...c),n.push(...c.map(()=>o))}this.termIndexToEntityIndex=T.ToInt32Array(n),this.entityIndexToFirstTermIndex=T.ToInt32Array(s);let a=this.stringSearcher.index(this.terms);return a.add("numberOfEntities",this.entities.length),a.add("numberOfTerms",this.terms.length),a}getMatches(e){let t=new ne(e),r=new G(this.searcherTypes,e.searchers);for(let{searcherType:s,qualityOffset:a}of this.searchersAndQualityOffsets){if(e.topN==t.matches.length)break;r.has(s)&&this.addMatchesFromSearcher(t,r.spec(s),a)}let n=N.mergeMeta(t.meta);return new b(t.matches,e,n)}addMatchesFromSearcher(e,t,r){let n=Math.max(0,t.minQuality-r);if(n>1)return;let s=new q(e.query.string,n,t.type),a=this.stringSearcher.getMatches(s);this.addMatchesFromResult(e,a,r)}addMatchesFromResult(e,t,r){if(e.meta.push(t.meta),e.query.topN!==0)for(let n=0,s=t.matches.length;n<s;n++){let a=t.matches[n],o=this.termIndexToEntityIndex[a.index];if(!e.matchedIndexes.has(o)&&this.entities[o]!==null&&(e.matchedIndexes.add(o),e.matches.push(new re(this.entities[o],a.quality+r,this.terms[a.index])),e.matches.length===e.query.topN))break}}tryGetEntity(e){let t=this.idToIndex.get(e);return t===void 0?null:this.entities[t]}getEntities(){return this.entities.filter(e=>e!==null)}tryGetTerms(e){let t=this.idToIndex.get(e);return t===void 0?null:this.terms.slice(this.entityIndexToFirstTermIndex[t],t===this.entities.length-1?this.terms.length:this.entityIndexToFirstTermIndex[t+1])}getTerms(){let e=[];for(let t=0,r=this.termIndexToEntityIndex.length;t<r;t++)this.entities[this.termIndexToEntityIndex[t]]!==null&&e.push(this.terms[t]);return e}removeEntity(e){let t=this.idToIndex.get(e);return t!==void 0&&(this.entities[t]=null,this.idToIndex.delete(e),!0)}replaceEntity(e,t,r){let n=this.idToIndex.get(e);return n!==void 0&&(this.entities[n]=t,this.idToIndex.delete(e),this.idToIndex.set(r,n),!0)}save(e){e.add(this.entities),e.add(this.idToIndex),e.add(this.terms),e.add(this.termIndexToEntityIndex),e.add(this.entityIndexToFirstTermIndex),this.stringSearcher.save(e)}load(e){this.entities=e.get(),this.idToIndex=e.get(),this.terms=e.get(),this.termIndexToEntityIndex=e.get(),this.entityIndexToFirstTermIndex=e.get(),this.stringSearcher.load(e)}},v=class{constructor(e,t){this.strings=void 0,this.meta=void 0,this.strings=e,this.meta=t}},se=class{constructor(e,t){this.treatCharacterAsSpace=void 0,this.allowCharacter=void 0,this.numberOfSurrogateCharacters=0,this.treatCharacterAsSpace=e,this.allowCharacter=t}normalize(e){let t=new Array(e.length),r=0,n=!1,s=!1;for(let a=0,o=e.length;a<o;a++){let h=this.getNormalizedCharacter(e[a]);h!==""&&(h===" "?n=!0:(n&&s&&(t[r++]=" "),t[r++]=h,s=!0,n=!1))}return s?t.join(""):""}getNormalizedCharacter(e){return e===" "||this.treatCharacterAsSpace(e)?" ":this.isSurrogate(e)||!this.allowCharacter(e)?"":e.toLowerCase()}isSurrogate(e){return!!P.isSurrogate(e)&&(this.numberOfSurrogateCharacters++,!0)}normalizeBulk(e){this.numberOfSurrogateCharacters=0;let t=e.map(n=>this.normalize(n)),r=new g;return r.add("numberOfSurrogateCharacters",this.numberOfSurrogateCharacters),new v(t,r)}},ae=class{constructor(e){this.normalizationFunction=void 0,this.normalizationFunction=e}normalize(e){return this.normalizationFunction(e)}normalizeBulk(e){let t=e.map(r=>this.normalize(r));return new v(t,new g)}},oe=class{constructor(e){this.normalizers=void 0,this.normalizers=e}normalize(e){for(let t=0,r=this.normalizers.length;t<r;t++)e=this.normalizers[t].normalize(e);return e}normalizeBulk(e){let t=new g;for(let r=0,n=this.normalizers.length;r<n;r++){let s=this.normalizers[r].normalizeBulk(e);e=s.strings;for(let a of s.meta.allEntries)t.add(a[0],a[1])}return new v(e,t)}},he=class{normalize(e){return e||""}normalizeBulk(e){let t=e.map(r=>this.normalize(r));return new v(t,new g)}},ce=class{constructor(e,t){this.normalizeVariationsAndInput=void 0,this.replacements=void 0,this.normalizeVariationsAndInput=t,this.replacements=[];for(let r of e){let n=new Map;for(let[s,a]of r)for(let o of a){let h=t(o);n.set(h,s)}this.replacements.push(n)}}normalize(e){e=this.normalizeVariationsAndInput(e);let t=new Array(e.length),r=0;for(let n=0,s=e.length;n<s;n++)for(let a of this.replacements){let o=a.get(e[n]);if(o!==void 0){t[r++]=o;break}t[r++]=e[n]}return t.join("")}normalizeBulk(e){let t=e.map(r=>this.normalize(r));return new v(t,new g)}},le=class{static create(e){let t=new he,r=new ce(e.replacements,a=>a.toLowerCase().normalize("NFKC")),n=new ae(a=>a.normalize("NFKD")),s=new se(e.treatCharacterAsSpace,e.allowCharacter);return new oe([t,r,n,s])}},D=class{constructor(e,t){this.index=void 0,this.quality=void 0,this.index=e,this.quality=t}},S=class{constructor(e,t,r){this.matches=void 0,this.query=void 0,this.meta=void 0,this.matches=e,this.query=t,this.meta=r}},ue=class{constructor(e){this.stringSearcher=void 0,this.distinctMapping=void 0,this.sortMapping=void 0,this.stringSearcher=e,this.distinctMapping=new Int32Array(0),this.sortMapping=new Int32Array(0)}index(e){let t=e.map((h,c)=>({term:h,index:c}));t.sort((h,c)=>h.term<c.term?-1:h.term>c.term?1:0),this.sortMapping=new Int32Array(t.length);for(let h=0,c=t.length;h<c;h++)this.sortMapping[h]=t[h].index;let r=[],n=[],s=0,a=null;for(let h=0,c=t.length;h<c;h++){let l=t[h].term;l!=a&&(r[s]=l,n[s]=h,s++),a=l}n[s++]=t.length,this.distinctMapping=T.ToInt32Array(n);let o=this.stringSearcher.index(r);return o.add("numberOfDistinctTerms",r.length),o}getMatches(e){let t=this.stringSearcher.getMatches(e),r=new Array(t.matches.length),n=0;return t.matches.forEach(s=>{let a=this.distinctMapping[s.index+1];for(let o=this.distinctMapping[s.index];o<a;o++)r[n++]=new D(this.sortMapping[o],s.quality)}),new S(r,e,t.meta)}save(e){e.add(this.distinctMapping),e.add(this.sortMapping),this.stringSearcher.save(e)}load(e){this.distinctMapping=e.get(),this.sortMapping=e.get(),this.stringSearcher.load(e)}},de=class{constructor(e,t){this.entitySearcher=void 0,this.searcherTypes=void 0,this.entitySearcher=e,this.searcherTypes=t}indexEntities(e,t,r){return this.entitySearcher.indexEntities(e,t,r)}getMatches(e){let t=new G(this.searcherTypes,e.searchers);if(e.topN>200)return this.entitySearcher.getMatches(e);if(e.string.length<=3&&t.has(d.Prefix)&&t.minQuality(d.Prefix)<2.2){let r=new M(e.string,e.topN,[new A(2.3)]),n=this.entitySearcher.getMatches(r);if(n.matches.length==e.topN)return new b(n.matches,e,n.meta)}if(e.string.length<=3&&!t.has(d.Prefix)&&t.has(d.Substring)&&t.minQuality(d.Substring)<1.2){let r=new M(e.string,e.topN,[new z(1.3)]),n=this.entitySearcher.getMatches(r);if(n.matches.length==e.topN)return new b(n.matches,e,n.meta)}return this.entitySearcher.getMatches(e)}tryGetEntity(e){return this.entitySearcher.tryGetEntity(e)}getEntities(){return this.entitySearcher.getEntities()}tryGetTerms(e){return this.entitySearcher.tryGetTerms(e)}getTerms(){return this.entitySearcher.getTerms()}removeEntity(e){return this.entitySearcher.removeEntity(e)}replaceEntity(e,t,r){return this.entitySearcher.replaceEntity(e,t,r)}save(e){return this.entitySearcher.save(e)}load(e){return this.entitySearcher.load(e)}},U=class{constructor(){this.ids=void 0,this.frequencies=void 0,this.ids=[],this.frequencies=[]}addId(e,t){this.ids.push(e),this.frequencies.push(t)}seal(){this.ids=T.ToInt32Array(this.ids),this.frequencies=T.ToInt32Array(this.frequencies)}get length(){return this.ids.length}save(e){e.add(this.ids),e.add(this.frequencies)}load(e){this.ids=e.get(),this.frequencies=e.get()}},L=class{constructor(){this.ngramToTermIds=void 0,this.ngramToTermIds=new Map}add(e,t,r){let n=this.ngramToTermIds.get(e);n||(n=new U,this.ngramToTermIds.set(e,n)),n.addId(t,r)}seal(){for(let e of this.ngramToTermIds.values())e.seal()}getIds(e){return this.ngramToTermIds.get(e)}get size(){return this.ngramToTermIds.size}save(e){e.add(this.ngramToTermIds.size);for(let[t,r]of this.ngramToTermIds)e.add(t),r.save(e)}load(e){let t=e.get();for(let r=0;r<t;r++){let n=e.get(),s=new U;s.load(e),this.ngramToTermIds.set(n,s)}}},me=class{static ComputeJaccardCoefficient(e,t,r){return r/(e+t-r)}static ComputeOverlapMaxCoefficient(e,t,r){return r/Math.max(e,t)}},ge=class{constructor(e){this.ngramComputer=void 0,this.invertedIndex=void 0,this.numberOfNgrams=void 0,this.commonNgramCounts=void 0,this.ngramComputer=e,this.invertedIndex=new L,this.numberOfNgrams=new Int32Array(0),this.commonNgramCounts=new Int32Array(0)}index(e){let t=performance.now();this.invertedIndex=new L,this.commonNgramCounts=new Int32Array(e.length),this.numberOfNgrams=new Int32Array(e.length);let r=0;for(let a=0,o=e.length;a<o;a++){let h=e[a];if(!this.isValidTerm(h)){this.numberOfNgrams[a]=0,r++;continue}let c=this.ngramComputer.computeNgrams(h);this.numberOfNgrams[a]=c.length;let l=this.getNgramsToFrequency(c);for(let[u,m]of l)this.invertedIndex.add(u,a,m)}this.invertedIndex.seal();let n=Math.round(performance.now()-t),s=new g;return s.add("numberOfInvalidTerms",r),s.add("indexingDurationFuzzySearcher",n),s}isValidTerm(e){return e!=null&&e.trim()!==""}getMatches(e){if(this.invertedIndex.size===0)return new S([],e,new g);let t=this.ngramComputer.computeNgrams(e.string),r=this.getNgramsToFrequency(t),n=t.length;this.computeCommonNgramCounts(r);let s=this.getMatchesFromCommonNgrams(n,e.minQuality);return new S(s,e,new g)}computeCommonNgramCounts(e){this.commonNgramCounts.fill(0);for(let[t,r]of e){let n=this.invertedIndex.getIds(t);if(n!=null)for(let s=0,a=n.length;s<a;s++)this.commonNgramCounts[n.ids[s]]+=Math.min(r,n.frequencies[s])}}getNgramsToFrequency(e){let t=new Map;for(let r=0,n=e.length;r<n;r++){let s=e[r],a=t.get(s);t.set(s,a!==void 0?a+1:1)}return t}getMatchesFromCommonNgrams(e,t){let r=[];for(let n=0,s=this.numberOfNgrams.length;n<s;n++){let a=me.ComputeOverlapMaxCoefficient(e,this.numberOfNgrams[n],this.commonNgramCounts[n]);a>t&&r.push(new D(n,a))}return r}save(e){this.invertedIndex.save(e),e.add(this.numberOfNgrams)}load(e){this.invertedIndex=new L,this.invertedIndex.load(e),this.numberOfNgrams=e.get(),this.commonNgramCounts=new Int32Array(this.numberOfNgrams.length)}},fe=class{constructor(e,t){this.stringSearcher=void 0,this.penaltyFactor=void 0,this.hashCodes=void 0,this.stringSearcher=e,this.penaltyFactor=1-t,this.hashCodes=new Int32Array(0)}index(e){this.hashCodes=new Int32Array(e.length);for(let t=0,r=e.length;t<r;t++)this.hashCodes[t]=$.getHashCode(e[t]);return this.stringSearcher.index(e)}getMatches(e){let t=$.getHashCode(e.string),r=this.stringSearcher.getMatches(e),n=r.matches.map(s=>this.penalizeMatch(s,t)).filter(s=>s.quality>=e.minQuality);return new S(n,r.query,r.meta)}penalizeMatch(e,t){return e.quality*=this.hashCodes[e.index]===t?1:this.penaltyFactor,e}save(e){e.add(this.hashCodes),this.stringSearcher.save(e)}load(e){this.hashCodes=e.get(),this.stringSearcher.load(e)}},ye=class{constructor(e,t){this.ngramN=void 0,this.transformNgram=void 0,this.ngramN=e,this.transformNgram=t??(r=>r)}computeNgrams(e){if(e.length===0)return[];if(e.length<=this.ngramN){let r=this.transformNgram(e);return r?[r]:[]}let t=[];for(let r=0,n=this.maximumNumberOfNgrams(e);r<n;r++){let s=this.transformNgram(e.substring(r,r+this.ngramN));s&&t.push(s)}return t}maximumNumberOfNgrams(e){return Math.max(e.length-this.ngramN+1,e.length>0?1:0)}},pe=class{constructor(e,t,r){this.paddingLeft=void 0,this.paddingRight=void 0,this.paddingMiddle=void 0,this.paddingLeft=e,this.paddingRight=t,this.paddingMiddle=r}normalize(e){return e&&`${this.paddingLeft}${e.split(" ").join(this.paddingMiddle)}${this.paddingRight}`}normalizeBulk(e){let t=e.map(n=>this.normalize(n)),r=new g;return new v(t,r)}},j=class{};j.Value=new Map([["a",["\u1D8F","\u2C65","\u0251","\u1D00","\u0250","\u0252"]],["aa",["\xE5","\uA733"]],["ae",["\xE4","\xE6","\u1D01","\u1D2D","\u1D46","\u01FD","\u01E3","\u1D02"]],["ao",["\uA735"]],["au",["\uA737"]],["av",["\uA739","\uA73B"]],["ay",["\uA73D"]],["b",["\u0180","\u0253","\u0183","\u1D6C","\u1D80","\u0299"]],["c",["\u023C","\u0188","\u0255","\u1D04","\uA73F","\u2184"]],["d",["\u0111","\xF0","\u0256","\u0257","\u018C","\u1D6D","\u1D81","\u1D91","\u0221","\u1D05","\uA77A"]],["db",["\u0238"]],["e",["\u1D92","\u0247","\u2C78","\u1D07","\u0259","\u01DD","\u025B"]],["eo",["\u1D14"]],["f",["\u0192","\u1D6E","\u1D82","\uA730","\uA77C"]],["g",["\u01E5","\u0260","\u1D83","\u0262","\u021D","\u014B","\uA7A1","\u1D79","\uA77F"]],["h",["\u0127","\u2C68","\u0266","\u029C","\u0303","\u0267","\u2C76","\u0265"]],["hv",["\u0195"]],["i",["\u0268","\u1D7B","\u1D96","\u0131","\u026A","\u0269"]],["j",["\u0249","\u0237","\u029D","\u025F","\u0284","\u1D0A"]],["k",["\u0199","\u2C6A","\u1D84","\uA741","\u1D0B","\uA743","\uA745","\uA7A3"]],["l",["\u0142","\u019A","\u2C61","\u026B","\u026C","\u1D85","\u026D","\u0234","\u029F","\uA749","\uA781","\uA747"]],["m",["\u1D6F","\u1D86","\u0271","\u1D0D","\u026F"]],["n",["\u0272","\u019E","\u1D70","\u1D87","\u0273","\u0235","\u0274","\uA791","\uA7A5"]],["o",["\xF8","\u01FF","\u0275","\u0254","\u2C7A","\u1D0F","\uA74B","\uA74D"]],["oe",["\xF6","\u0153"]],["oi",["\u01A3"]],["oo",["\uA74F"]],["ou",["\u0223"]],["p",["\u1D7D","\u01A5","\u1D71","\u1D88","\u1D18","\u01BF","\uA751","\uA753","\uA755"]],["q",["\u024B","\u02A0","\uA757","\uA759"]],["qp",["\u0239"]],["r",["\u024D","\u027D","\uA75B","\u1D72","\u1D89","\u027C","\u027E","\u1D73","\u0280","\u0279","\u0281","\uA7A7","\uA783"]],["s",["\u1D74","\u1D8A","\u0282","\u023F","\uA731","\u0283","\uA7A9","\uA785","\u017F"]],["ss",["\xDF"]],["t",["\u0167","\u2C66","\u01AD","\u0288","\u1D75","\u01AB","\u0236","\u1D1B","\uA787"]],["th",["\xFE"]],["tz",["\uA729"]],["u",["\u0289","\u028A","\u1D7E","\u1D1C","\u1D99"]],["ue",["\xFC","\u1D6B"]],["v",["\u028B","\u1D8C","\u2C71","\u2C74","\u1D20","\u028C","\uA75F"]],["vy",["\uA761"]],["w",["\u2C73","\u1D21","\u028D"]],["x",["\u1D8D"]],["y",["\u024F","\u01B4","\u028F","\u1EFF"]],["z",["\u01B6","\u0225","\u2C6C","\u1D76","\u1D8E","\u0290","\u0291","\u0240","\u1D22","\u0292","\u01B9","\uA763"]]]);var K=class i{constructor(e,t,r){this.replacements=void 0,this.treatCharacterAsSpace=void 0,this.allowCharacter=void 0,this.replacements=e,this.treatCharacterAsSpace=t,this.allowCharacter=r}static createDefaultConfig(){let e=new Set(["_","-","\u2013","/",","," "]);return new i([j.Value],t=>e.has(t),t=>P.isAlphanumeric(t))}},_=class{constructor(e,t,r="normalizationDuration"){this.stringSearcher=void 0,this.normalizer=void 0,this.normalizationDurationMetaKey=void 0,this.stringSearcher=e,this.normalizer=t,this.normalizationDurationMetaKey=r}index(e){let t=performance.now(),r=this.normalizer.normalizeBulk(e),n=Math.round(performance.now()-t),s=this.stringSearcher.index(r.strings);s.add(this.normalizationDurationMetaKey,n);for(let a of r.meta.allEntries)s.add(a[0],a[1]);return s}getMatches(e){let t=new q(this.normalizer.normalize(e.string),e.minQuality,e.searcherType),r=this.stringSearcher.getMatches(t);return new S(r.matches,e,r.meta)}save(e){this.stringSearcher.save(e)}load(e){this.stringSearcher.load(e)}},Se=class{constructor(e){this.suffixArraySearcher=void 0,this.suffixArraySearcher=e}index(e){return this.suffixArraySearcher.index(e)}getMatches(e){if(!e.string)return new S([],e,new g);let t=this.modifyQueryString(e.string),r=new q(t,e.minQuality,e.searcherType);return this.suffixArraySearcher.getMatches(r,e.string.length)}modifyQueryString(e){return`${this.suffixArraySearcher.separator}${e}`}save(e){this.suffixArraySearcher.save(e)}load(e){this.suffixArraySearcher.load(e)}},we=class{constructor(e,t,r){this.prefixSearcher=void 0,this.substringSearcher=void 0,this.fuzzySearcher=void 0,this.prefixSearcher=e,this.substringSearcher=t,this.fuzzySearcher=r}index(e){let t=[];if(this.prefixSearcher&&!this.substringSearcher){let r=this.prefixSearcher.index(e);t.push(r)}if(this.substringSearcher){let r=this.substringSearcher.index(e);t.push(r)}if(this.fuzzySearcher){let r=this.fuzzySearcher.index(e);t.push(r)}return N.mergeMeta(t)}getMatches(e){if(!e.searcherType)throw new Error("SearcherSwitch requires a searcher type.");switch(e.searcherType){case d.Prefix:if(!this.prefixSearcher)throw new Error("No prefix searcher has been indexed.");return this.prefixSearcher.getMatches(e);case d.Substring:if(!this.substringSearcher)throw new Error("No substring searcher has been indexed.");return this.substringSearcher.getMatches(e);case d.Fuzzy:if(!this.fuzzySearcher)throw new Error("No fuzzy searcher has been indexed.");return this.fuzzySearcher.getMatches(e);default:throw new Error(`Unknown searcher type: ${e.searcherType}`)}}save(e){this.prefixSearcher&&!this.substringSearcher&&this.prefixSearcher.save(e),this.substringSearcher&&this.substringSearcher.save(e),this.fuzzySearcher&&this.fuzzySearcher.save(e)}load(e){this.prefixSearcher&&!this.substringSearcher&&this.prefixSearcher.load(e),this.substringSearcher&&this.substringSearcher.load(e),this.fuzzySearcher&&this.fuzzySearcher.load(e)}};(function(i){i.QualityAndIndex="qualityAndIndex",i.QualityAndMatchedString="qualityAndMatchedString"})(k||(k={}));var ve=class{constructor(e,t){this.sortOrder=void 0,this.entitySearcher=void 0,this.collator=new Intl.Collator(void 0,{numeric:!0}),this.sortOrder=e,this.entitySearcher=t}indexEntities(e,t,r){return this.entitySearcher.indexEntities(e,t,r)}getMatches(e){let t=this.entitySearcher.getMatches(e);switch(this.sortOrder){case k.QualityAndIndex:return t;case k.QualityAndMatchedString:return this.sortMatchesByQualityAndMatchedString(t.matches),t;default:throw new Error(`Unsupported sort order: ${this.sortOrder}`)}}sortMatchesByQualityAndMatchedString(e){e.sort((t,r)=>t.quality>r.quality?-1:t.quality<r.quality?1:this.collator.compare(t.matchedString,r.matchedString))}tryGetEntity(e){return this.entitySearcher.tryGetEntity(e)}getEntities(){return this.entitySearcher.getEntities()}tryGetTerms(e){return this.entitySearcher.tryGetTerms(e)}getTerms(){return this.entitySearcher.getTerms()}save(e){this.entitySearcher.save(e)}load(e){this.entitySearcher.load(e)}removeEntity(e){return this.entitySearcher.removeEntity(e)}replaceEntity(e,t,r){return this.entitySearcher.replaceEntity(e,t,r)}},xe=class{constructor(e){this.stringSearcher=void 0,this.stringSearcher=e}index(e){return this.stringSearcher.index(e)}getMatches(e){let t=this.stringSearcher.getMatches(e);return t.matches.sort(this.compareMatchesByQualityAndIndex),t}compareMatchesByQualityAndIndex(e,t){return e.quality>t.quality?-1:e.quality<t.quality?1:e.index<t.index?-1:e.index>t.index?1:0}save(e){this.stringSearcher.save(e)}load(e){this.stringSearcher.load(e)}},F=class{static compareOrdinal(e,t,r,n,s){let a=Math.min(t+s,e.length),o=Math.min(n+s,r.length),h=t,c=n;for(;h<a&&c<o;){let m=e.charCodeAt(h),y=r.charCodeAt(c);if(m<y)return-1;if(m>y)return 1;h++,c++}let l=a-t,u=o-n;return l===u?0:l<u?-1:1}},Te=class i{static create(e){if(e==null)throw new Error("Input string cannot be null.");let t=new i(e);return t.FormInitialChains(),t.BuildSufixArray(),t.sa}constructor(e){this.inputString=void 0,this.eoc=2147483647,this.sa=void 0,this.isa=void 0,this.chainHeadsDict=void 0,this.chainStack=[],this.subChains=[],this.nextRank=1,this.inputString=e;let t=e.length;this.sa=new Int32Array(t),this.isa=new Int32Array(t),this.chainHeadsDict=new Map}FormInitialChains(){this.FindInitialChains(),this.SortAndPushSubchains()}FindInitialChains(){for(let e=0;e<this.inputString.length;e++){let t=this.inputString.charCodeAt(e),r=this.chainHeadsDict.get(t);this.isa[e]=r!==void 0?r:this.eoc,this.chainHeadsDict.set(t,e)}for(let e of this.chainHeadsDict.values()){let t=new V(e,1);this.subChains.push(t)}}BuildSufixArray(){for(;this.chainStack.length>0;){let e=this.chainStack.pop();this.isa[e.head]===this.eoc?this.RankSuffix(e.head):this.RefineChainWithInductionSorting(e)}}RankSuffix(e){this.isa[e]=-this.nextRank,this.sa[this.nextRank-1]=e,this.nextRank++}RefineChainWithInductionSorting(e){let t=[];for(this.chainHeadsDict.clear(),this.subChains=[];e.head!==this.eoc;){let r=this.isa[e.head];if(e.head+e.length>this.inputString.length-1)this.RankSuffix(e.head);else if(this.isa[e.head+e.length]<0){let n=new be(e.head,-this.isa[e.head+e.length]);t.push(n)}else this.ExtendChain(e);e.head=r}this.SortAndPushSubchains(),this.SortAndRankNotedSuffixes(t)}ExtendChain(e){let t=this.inputString.charCodeAt(e.head+e.length);if(this.chainHeadsDict.has(t))this.isa[this.chainHeadsDict.get(t)]=e.head,this.isa[e.head]=this.eoc;else{this.isa[e.head]=this.eoc;let r=new V(e.head,e.length+1);this.subChains.push(r)}this.chainHeadsDict.set(t,e.head)}SortAndRankNotedSuffixes(e){e.sort((t,r)=>t.rank-r.rank);for(let t=0;t<e.length;t++)this.RankSuffix(e[t].head)}SortAndPushSubchains(){this.subChains.sort((e,t)=>{let r=Math.min(e.length,t.length);return F.compareOrdinal(this.inputString,e.head,this.inputString,t.head,r)});for(let e=this.subChains.length-1;e>=0;e--)this.chainStack.push(this.subChains[e])}},be=class{constructor(e,t){this.head=void 0,this.rank=void 0,this.head=e,this.rank=t}},V=class{constructor(e,t){this.head=void 0,this.length=void 0,this.head=e,this.length=t}},Me=class{constructor(e){this.separator=void 0,this.str=void 0,this.suffixArray=void 0,this.indexToTermIndex=void 0,this.termLengths=void 0,this.separator=e,this.str="",this.suffixArray=new Int32Array(0),this.indexToTermIndex=new Int32Array(0),this.termLengths=new Int32Array(0)}index(e){let t=performance.now();this.str=e.length>0?this.separator+e.join(this.separator)+this.separator:"",this.suffixArray=Te.create(this.str),this.indexToTermIndex=new Int32Array(this.suffixArray.length),this.termLengths=new Int32Array(e.length);let r=0;for(let a=0;a<e.length;a++){this.termLengths[a]=e[a].length;for(let o=0;o<=e[a].length;o++)this.indexToTermIndex[r++]=a}this.indexToTermIndex[r++]=-1;let n=Math.round(performance.now()-t),s=new g;return s.add("indexingDurationSuffixArraySearcher",n),s}getMatches(e,t){if(!e.string)return new S([],e,new g);let[r,n]=this.GetPositionsInSuffixArray(e.string),s=new Int32Array(n-r),a=new Set,o=0;for(let l=r;l<n;l++){let u=this.indexToTermIndex[this.suffixArray[l]];a.has(u)||(a.add(u),s[o++]=u)}let h=[];t=t??e.string.length;let c=0;for(let l=0;l<o;l++)c=this.computeQuality(t,this.termLengths[s[l]]),c>e.minQuality&&h.push(new D(s[l],c));return new S(h,e,new g)}computeQuality(e,t){return e/t}GetPositionsInSuffixArray(e){let t=0,r=this.suffixArray.length,n=0;for(;t<r;)n=Math.floor((t+r)/2),F.compareOrdinal(e,0,this.str,this.suffixArray[n],e.length)>0?t=n+1:r=n;let s=t;for(r=this.suffixArray.length;t<r;)n=Math.floor((t+r)/2),F.compareOrdinal(e,0,this.str,this.suffixArray[n],e.length)==0?t=n+1:r=n;return[s,r]}save(e){e.add(this.str),e.add(this.suffixArray),e.add(this.indexToTermIndex),e.add(this.termLengths)}load(e){this.str=e.get(),this.suffixArray=e.get(),this.indexToTermIndex=e.get(),this.termLengths=e.get()}},J=class{static createSearcher(e){let t=this.createDefaultNormalizer(e),r=this.tryCreateFuzzySearcher(e),n=this.tryCreateSubstringSearcher(e),s=this.tryCreatePrefixSearcher(e,n),a=new we(s,n,r);a=new ue(a),a=new xe(a),a=new _(a,t,"normalizationDurationDefault");let o=new ie(a,e.searcherTypes);return o=new de(o,e.searcherTypes),o=new ve(e.sortOrder,o),o}static createDefaultNormalizer(e){let t=new Set;e.fuzzySearchConfig&&(e.fuzzySearchConfig.paddingLeft.split("").forEach(n=>t.add(n)),e.fuzzySearchConfig.paddingRight.split("").forEach(n=>t.add(n)),e.fuzzySearchConfig.paddingMiddle.split("").forEach(n=>t.add(n))),e.substringSearchConfig&&e.substringSearchConfig.suffixArraySeparator.split("").forEach(n=>t.add(n));let r=new K(e.normalizerConfig.replacements,e.normalizerConfig.treatCharacterAsSpace,n=>e.normalizerConfig.allowCharacter(n)&&!t.has(n));return le.create(r)}static tryCreateFuzzySearcher(e){if(!e.searcherTypes.includes(d.Fuzzy))return null;if(e.fuzzySearchConfig===void 0)throw new Error("Unable to create fuzzy searcher: No fuzzy search config provided.");return this.createFuzzySearcher(e.fuzzySearchConfig)}static createFuzzySearcher(e){let t=new ye(e.ngramN,e.transformNgram),r=new pe(e.paddingLeft,e.paddingRight,e.paddingMiddle),n=new ge(t);return n=new fe(n,e.inequalityPenalty),n=new _(n,r,"normalizationDurationNgrams"),n}static tryCreateSubstringSearcher(e){if(!e.searcherTypes.includes(d.Substring))return null;if(e.substringSearchConfig===void 0)throw new Error("Unable to create substring searcher: No substring search config provided.");return this.createSubstringSearcher(e.substringSearchConfig)}static createSubstringSearcher(e){return new Me(e.suffixArraySeparator)}static tryCreatePrefixSearcher(e,t){if(!e.searcherTypes.includes(d.Prefix))return null;if(e.substringSearchConfig===void 0)throw new Error("Unable to create prefix searcher: No substring search config provided.");return this.createPrefixSearcher(e.substringSearchConfig,t)}static createPrefixSearcher(e,t){return t===null&&(t=this.createSubstringSearcher(e)),new Se(t)}},Ee=class i{constructor(e,t,r,n,s,a){this.paddingLeft=void 0,this.paddingRight=void 0,this.paddingMiddle=void 0,this.ngramN=void 0,this.transformNgram=void 0,this.inequalityPenalty=void 0,this.paddingLeft=e,this.paddingRight=t,this.paddingMiddle=r,this.ngramN=n,this.transformNgram=s,this.inequalityPenalty=a}static createDefaultConfig(){return new i("$$","!","!$$",3,e=>e.endsWith("$")?null:e.indexOf("$")===-1?e.split("").sort().join(""):e,.05)}};var Ce=class i{constructor(e){this.suffixArraySeparator=void 0,this.suffixArraySeparator=e}static createDefaultConfig(){return new i("$")}},Ie=class i{constructor(e,t,r,n,s,a){this.searcherTypes=void 0,this.maxQueryLength=void 0,this.sortOrder=void 0,this.normalizerConfig=void 0,this.fuzzySearchConfig=void 0,this.substringSearchConfig=void 0,this.searcherTypes=e,this.maxQueryLength=t,this.sortOrder=r,this.normalizerConfig=n,this.fuzzySearchConfig=s,this.substringSearchConfig=a}static createDefaultConfig(){let e=[d.Fuzzy,d.Substring,d.Prefix],t=k.QualityAndMatchedString,r=K.createDefaultConfig(),n=Ee.createDefaultConfig(),s=Ce.createDefaultConfig();return new i(e,150,t,r,n,s)}},W=class{static createSearcher(e){let t=J.createSearcher(e),r=J.createSearcher(e),n=new ee(e.maxQueryLength,t,r);return n=new te(n),n}static createDefaultSearcher(){let e=Ie.createDefaultConfig();return this.createSearcher(e)}};function ze(i,e){if(i.length===0)return null;let t=i.find(n=>n.sourceStart<=e&&e<=n.sourceEnd);if(t)return t.commentrayLine;if(e<i[0].sourceStart)return i[0].commentrayLine;let r=i[0];for(let n of i)if(n.sourceStart<=e)r=n;else break;return r.commentrayLine}function Ae(i,e){if(i.length===0)return null;let t=i[0];for(let r of i)if(r.commentrayLine<=e)t=r;else break;return t.sourceStart-1}function E(i,e,t,r,n){let s=Math.max(0,e-t),a=Math.max(0,r-n);return s<=0?0:i/s*a}function O(i){let e=i.trim();if(e==="")return"";try{let t=atob(e),r=new Uint8Array(t.length);for(let n=0;n<t.length;n++)r[n]=t.charCodeAt(n);return new TextDecoder("utf-8",{fatal:!1}).decode(r)}catch{return""}}function ke(i,e){function t(r){let n=i.getAttribute(r);return n!==null&&n.trim()!==""?n:e.getAttribute(r)?.trim()??""}return{rawCodeB64:t("data-raw-code-b64"),rawMdB64:t("data-raw-md-b64")}}function He(i,e){let t=e.map(h=>h.trim()).filter(Boolean);if(t.length===0)return[];let r=i.toLowerCase(),n=t.map(h=>h.toLowerCase()),s=[],a=0,o=0;for(;a<i.length&&o<400;){let h=a,c=-1,l=!0;for(let u of n){if(u.length===0)continue;let m=r.indexOf(u,h);if(m<0){l=!1;break}c<0&&(c=m),h=m+u.length}if(!l||c<0)break;s.push({start:c,end:h}),o++,a=c+1}return s}function Re(i,e){let t=Math.max(0,Math.min(e,i.length)),r=0;for(let n=0;n<t;n++)i[n]===`
|
|
2
|
-
`&&r++;return r}function
|
|
3
|
-
`);return e<0||e>=t.length?"":t[e]??""}function
|
|
4
|
-
`),
|
|
1
|
+
"use strict";(()=>{var T=class{static ToInt32Array(e){let t=new Int32Array(e.length);for(let r=0,n=e.length;r<n;r++)t[r]=e[r];return t}},O=class{static getHashCode(e){let t=5381,r=t;for(let n=0,s=e.length;n<s&&e[n]!="\0"&&(t=(t<<5)+t^e.charCodeAt(n),n!==s-1&&e[n+1]!=="\0");n+=2)r=(r<<5)+r^e.charCodeAt(n+1);return t+1566083941*r|0}},f=class{constructor(e){this.entries=void 0,this.entries=e!==void 0?e:new Map}add(e,t){if(this.entries.has(e))throw new Error(`A meta entry with key ${e} is already present.`);this.entries.set(e,t)}get(e){return this.entries.get(e)}get allEntries(){return this.entries}toJSON(){return{entries:Object.fromEntries(this.entries)}}},P=class{static mergeMeta(e){if(e.length===0)return new f;if(e.length===1)return e[0];let t=new Map;for(let n of e)for(let[s,a]of n.allEntries){let o=t.get(s);o===void 0?t.set(s,[a]):o.push(a)}let r=new Map;for(let[n,s]of t)if(s.length!==1){if(s.every(a=>typeof a=="number")){let a=s.reduce((o,c)=>o+c,0);r.set(n,a);continue}for(let a=0;a<s.length;a++)r.set(`${n}_${a}`,s[a])}else r.set(n,s[0]);return new f(r)}},q=class{static isSurrogate(e){let t=e.charCodeAt(0);return t>=55296&&t<=57343}static isAlphanumeric(e){let t=e.charCodeAt(0);return t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122}static isLowerAlpha(e){let t=e.charCodeAt(0);return t>=97&&t<=122}},$=class{constructor(e,t){this.usableSearchers=void 0,this.usableSearchers=new Map;for(let r of t)e.includes(r.type)&&this.usableSearchers.set(r.type,r)}has(e){return this.usableSearchers.has(e)}minQuality(e){return this.usableSearchers.get(e).minQuality}spec(e){return this.usableSearchers.get(e)}},M=class{constructor(e,t,r){this.matches=void 0,this.query=void 0,this.meta=void 0,this.matches=e,this.query=t,this.meta=r}},g,R;(function(i){i.Fuzzy="fuzzy",i.Substring="substring",i.Prefix="prefix"})(g||(g={}));var k=class{constructor(e,t){this.type=void 0,this.minQuality=void 0,this.type=e,this.minQuality=Math.max(0,t)}},N=class extends k{constructor(e){super(g.Fuzzy,e)}},L=class extends k{constructor(e){super(g.Substring,e)}},H=class extends k{constructor(e){super(g.Prefix,e)}},E=class{constructor(e,t=10,r=[new N(.3),new L(0),new H(0)]){this.string=void 0,this.topN=void 0,this.searchers=void 0,this.string=e,this.topN=Math.max(0,t),this.searchers=r}},Z=class{constructor(e,t){this.removedEntities=void 0,this.meta=void 0,this.removedEntities=e,this.meta=t}},ee=class{static mergeResults(e,t){let r=e.query,n=this.mergeMatches(e.matches,t.matches,r.topN),s=P.mergeMeta([e.meta,t.meta]);return new M(n,r,s)}static mergeMatches(e,t,r){if(t.length===0)return e;if(e.length===0)return t;let n=[...e,...t];return n.sort((s,a)=>s.quality>a.quality?-1:s.quality<a.quality?1:0),n.length<=r?n:n.slice(0,r)}},te=class{constructor(e,t,r){this.maxQueryLength=void 0,this.mainSearcher=void 0,this.secondarySearcher=void 0,this.maxQueryLength=e,this.mainSearcher=t,this.secondarySearcher=r}indexEntities(e,t,r){return this.secondarySearcher.indexEntities([],t,r),this.mainSearcher.indexEntities(e,t,r)}getMatches(e){return e.string?(e.string.length>this.maxQueryLength&&(e=new E(e.string.substring(0,this.maxQueryLength),e.topN,e.searchers)),ee.mergeResults(this.mainSearcher.getMatches(e),this.secondarySearcher.getMatches(e))):new M([],e,new f)}tryGetTerms(e){let t=this.mainSearcher.tryGetTerms(e);return t!==null?t:this.secondarySearcher.tryGetTerms(e)}getTerms(){return this.mainSearcher.getTerms().concat(this.secondarySearcher.getTerms())}tryGetEntity(e){var t,r;return(t=(r=this.mainSearcher.tryGetEntity(e))!=null?r:this.secondarySearcher.tryGetEntity(e))!=null?t:null}getEntities(){return this.mainSearcher.getEntities().concat(this.secondarySearcher.getEntities())}removeEntities(e){let t=[];for(let n=0,s=e.length;n<s;n++)(this.mainSearcher.removeEntity(e[n])||this.secondarySearcher.removeEntity(e[n]))&&t.push(e[n]);let r=new f;return new Z(t,r)}upsertEntities(e,t,r){let n=[],s=[];for(let a=0,o=e.length;a<o;a++){let c=e[a],h=t(c);this.tryUpdate(c,h,r)||(n.push(h),s.push(c))}return this.removeEntities(n),s.length>0?this.reindexSecondarySearcher(s,t,r):new f}reindexSecondarySearcher(e,t,r){let n=this.secondarySearcher.getEntities().concat(e);return this.secondarySearcher.indexEntities(n,t,r)}tryUpdate(e,t,r){return this.tryUpdateSearcher(e,t,r,this.mainSearcher)||this.tryUpdateSearcher(e,t,r,this.secondarySearcher)}tryUpdateSearcher(e,t,r,n){let s=n.tryGetTerms(t);if(s===null)return!1;if(this.termsAreEqual(s,r(e))){if(!n.replaceEntity(t,e,t))throw new Error(`Entity with id ${t} was not present.`);return!0}return!1}termsAreEqual(e,t){return e===t||e!=null&&t!=null&&e.length===t.length&&e.every((r,n)=>r===t[n])}removeEntity(e){return this.mainSearcher.removeEntity(e)||this.secondarySearcher.removeEntity(e)}replaceEntity(e,t,r){return this.mainSearcher.replaceEntity(e,t,r)||this.secondarySearcher.replaceEntity(e,t,r)}save(e){this.mainSearcher.save(e),this.secondarySearcher.save(e)}load(e){this.mainSearcher.load(e),this.secondarySearcher.load(e)}},re=class{constructor(e){this.dynamicSearcher=void 0,this.dynamicSearcher=e}removeEntities(e){let t=performance.now(),r=this.dynamicSearcher.removeEntities(e),n=Math.round(performance.now()-t);return r.meta.add("removalDuration",n),r}upsertEntities(e,t,r){let n=performance.now(),s=this.dynamicSearcher.upsertEntities(e,t,r),a=Math.round(performance.now()-n);return s.add("upsertDuration",a),s}indexEntities(e,t,r){let n=performance.now(),s=this.dynamicSearcher.indexEntities(e,t,r),a=Math.round(performance.now()-n);return s.add("indexingDurationTotal",a),s}getMatches(e){let t=performance.now(),r=this.dynamicSearcher.getMatches(e),n=Math.round(performance.now()-t);return r.meta.add("queryDuration",n),r}tryGetEntity(e){return this.dynamicSearcher.tryGetEntity(e)}getEntities(){return this.dynamicSearcher.getEntities()}tryGetTerms(e){return this.dynamicSearcher.tryGetTerms(e)}getTerms(){return this.dynamicSearcher.getTerms()}removeEntity(e){return this.dynamicSearcher.removeEntity(e)}replaceEntity(e,t,r){return this.dynamicSearcher.replaceEntity(e,t,r)}save(e){this.dynamicSearcher.save(e)}load(e){this.dynamicSearcher.load(e)}},ne=class{constructor(e,t,r){this.entity=void 0,this.quality=void 0,this.matchedString=void 0,this.entity=e,this.quality=t,this.matchedString=r}},ie=class{constructor(e){this.query=void 0,this.matchedIndexes=new Set,this.matches=[],this.meta=[],this.query=e}},F=class{constructor(e,t=0,r){this.string=void 0,this.minQuality=void 0,this.searcherType=void 0,this.string=e,this.minQuality=Math.max(0,Math.min(1,t)),this.searcherType=r}},se=class{constructor(e,t){this.stringSearcher=void 0,this.searcherTypes=void 0,this.entities=void 0,this.idToIndex=void 0,this.terms=void 0,this.termIndexToEntityIndex=void 0,this.entityIndexToFirstTermIndex=void 0,this.searchersAndQualityOffsets=[{searcherType:g.Prefix,qualityOffset:2},{searcherType:g.Substring,qualityOffset:1},{searcherType:g.Fuzzy,qualityOffset:0}],this.stringSearcher=e,this.searcherTypes=t,this.entities=[],this.idToIndex=new Map,this.terms=[],this.termIndexToEntityIndex=new Int32Array(0),this.entityIndexToFirstTermIndex=new Int32Array(0)}indexEntities(e,t,r){this.entities=[...e],this.idToIndex=new Map,this.terms=[];let n=[],s=[];for(let o=0,c=e.length;o<c;o++){this.idToIndex.set(t(e[o]),o);let h=r(e[o]);s.push(this.terms.length),this.terms.push(...h),n.push(...h.map(()=>o))}this.termIndexToEntityIndex=T.ToInt32Array(n),this.entityIndexToFirstTermIndex=T.ToInt32Array(s);let a=this.stringSearcher.index(this.terms);return a.add("numberOfEntities",this.entities.length),a.add("numberOfTerms",this.terms.length),a}getMatches(e){let t=new ie(e),r=new $(this.searcherTypes,e.searchers);for(let{searcherType:s,qualityOffset:a}of this.searchersAndQualityOffsets){if(e.topN==t.matches.length)break;r.has(s)&&this.addMatchesFromSearcher(t,r.spec(s),a)}let n=P.mergeMeta(t.meta);return new M(t.matches,e,n)}addMatchesFromSearcher(e,t,r){let n=Math.max(0,t.minQuality-r);if(n>1)return;let s=new F(e.query.string,n,t.type),a=this.stringSearcher.getMatches(s);this.addMatchesFromResult(e,a,r)}addMatchesFromResult(e,t,r){if(e.meta.push(t.meta),e.query.topN!==0)for(let n=0,s=t.matches.length;n<s;n++){let a=t.matches[n],o=this.termIndexToEntityIndex[a.index];if(!e.matchedIndexes.has(o)&&this.entities[o]!==null&&(e.matchedIndexes.add(o),e.matches.push(new ne(this.entities[o],a.quality+r,this.terms[a.index])),e.matches.length===e.query.topN))break}}tryGetEntity(e){let t=this.idToIndex.get(e);return t===void 0?null:this.entities[t]}getEntities(){return this.entities.filter(e=>e!==null)}tryGetTerms(e){let t=this.idToIndex.get(e);return t===void 0?null:this.terms.slice(this.entityIndexToFirstTermIndex[t],t===this.entities.length-1?this.terms.length:this.entityIndexToFirstTermIndex[t+1])}getTerms(){let e=[];for(let t=0,r=this.termIndexToEntityIndex.length;t<r;t++)this.entities[this.termIndexToEntityIndex[t]]!==null&&e.push(this.terms[t]);return e}removeEntity(e){let t=this.idToIndex.get(e);return t!==void 0&&(this.entities[t]=null,this.idToIndex.delete(e),!0)}replaceEntity(e,t,r){let n=this.idToIndex.get(e);return n!==void 0&&(this.entities[n]=t,this.idToIndex.delete(e),this.idToIndex.set(r,n),!0)}save(e){e.add(this.entities),e.add(this.idToIndex),e.add(this.terms),e.add(this.termIndexToEntityIndex),e.add(this.entityIndexToFirstTermIndex),this.stringSearcher.save(e)}load(e){this.entities=e.get(),this.idToIndex=e.get(),this.terms=e.get(),this.termIndexToEntityIndex=e.get(),this.entityIndexToFirstTermIndex=e.get(),this.stringSearcher.load(e)}},w=class{constructor(e,t){this.strings=void 0,this.meta=void 0,this.strings=e,this.meta=t}},ae=class{constructor(e,t){this.treatCharacterAsSpace=void 0,this.allowCharacter=void 0,this.numberOfSurrogateCharacters=0,this.treatCharacterAsSpace=e,this.allowCharacter=t}normalize(e){let t=new Array(e.length),r=0,n=!1,s=!1;for(let a=0,o=e.length;a<o;a++){let c=this.getNormalizedCharacter(e[a]);c!==""&&(c===" "?n=!0:(n&&s&&(t[r++]=" "),t[r++]=c,s=!0,n=!1))}return s?t.join(""):""}getNormalizedCharacter(e){return e===" "||this.treatCharacterAsSpace(e)?" ":this.isSurrogate(e)||!this.allowCharacter(e)?"":e.toLowerCase()}isSurrogate(e){return!!q.isSurrogate(e)&&(this.numberOfSurrogateCharacters++,!0)}normalizeBulk(e){this.numberOfSurrogateCharacters=0;let t=e.map(n=>this.normalize(n)),r=new f;return r.add("numberOfSurrogateCharacters",this.numberOfSurrogateCharacters),new w(t,r)}},oe=class{constructor(e){this.normalizationFunction=void 0,this.normalizationFunction=e}normalize(e){return this.normalizationFunction(e)}normalizeBulk(e){let t=e.map(r=>this.normalize(r));return new w(t,new f)}},ce=class{constructor(e){this.normalizers=void 0,this.normalizers=e}normalize(e){for(let t=0,r=this.normalizers.length;t<r;t++)e=this.normalizers[t].normalize(e);return e}normalizeBulk(e){let t=new f;for(let r=0,n=this.normalizers.length;r<n;r++){let s=this.normalizers[r].normalizeBulk(e);e=s.strings;for(let a of s.meta.allEntries)t.add(a[0],a[1])}return new w(e,t)}},he=class{normalize(e){return e||""}normalizeBulk(e){let t=e.map(r=>this.normalize(r));return new w(t,new f)}},le=class{constructor(e,t){this.normalizeVariationsAndInput=void 0,this.replacements=void 0,this.normalizeVariationsAndInput=t,this.replacements=[];for(let r of e){let n=new Map;for(let[s,a]of r)for(let o of a){let c=t(o);n.set(c,s)}this.replacements.push(n)}}normalize(e){e=this.normalizeVariationsAndInput(e);let t=new Array(e.length),r=0;for(let n=0,s=e.length;n<s;n++)for(let a of this.replacements){let o=a.get(e[n]);if(o!==void 0){t[r++]=o;break}t[r++]=e[n]}return t.join("")}normalizeBulk(e){let t=e.map(r=>this.normalize(r));return new w(t,new f)}},ue=class{static create(e){let t=new he,r=new le(e.replacements,a=>a.toLowerCase().normalize("NFKC")),n=new oe(a=>a.normalize("NFKD")),s=new ae(e.treatCharacterAsSpace,e.allowCharacter);return new ce([t,r,n,s])}},D=class{constructor(e,t){this.index=void 0,this.quality=void 0,this.index=e,this.quality=t}},S=class{constructor(e,t,r){this.matches=void 0,this.query=void 0,this.meta=void 0,this.matches=e,this.query=t,this.meta=r}},de=class{constructor(e){this.stringSearcher=void 0,this.distinctMapping=void 0,this.sortMapping=void 0,this.stringSearcher=e,this.distinctMapping=new Int32Array(0),this.sortMapping=new Int32Array(0)}index(e){let t=e.map((c,h)=>({term:c,index:h}));t.sort((c,h)=>c.term<h.term?-1:c.term>h.term?1:0),this.sortMapping=new Int32Array(t.length);for(let c=0,h=t.length;c<h;c++)this.sortMapping[c]=t[c].index;let r=[],n=[],s=0,a=null;for(let c=0,h=t.length;c<h;c++){let l=t[c].term;l!=a&&(r[s]=l,n[s]=c,s++),a=l}n[s++]=t.length,this.distinctMapping=T.ToInt32Array(n);let o=this.stringSearcher.index(r);return o.add("numberOfDistinctTerms",r.length),o}getMatches(e){let t=this.stringSearcher.getMatches(e),r=new Array(t.matches.length),n=0;return t.matches.forEach(s=>{let a=this.distinctMapping[s.index+1];for(let o=this.distinctMapping[s.index];o<a;o++)r[n++]=new D(this.sortMapping[o],s.quality)}),new S(r,e,t.meta)}save(e){e.add(this.distinctMapping),e.add(this.sortMapping),this.stringSearcher.save(e)}load(e){this.distinctMapping=e.get(),this.sortMapping=e.get(),this.stringSearcher.load(e)}},me=class{constructor(e,t){this.entitySearcher=void 0,this.searcherTypes=void 0,this.entitySearcher=e,this.searcherTypes=t}indexEntities(e,t,r){return this.entitySearcher.indexEntities(e,t,r)}getMatches(e){let t=new $(this.searcherTypes,e.searchers);if(e.topN>200)return this.entitySearcher.getMatches(e);if(e.string.length<=3&&t.has(g.Prefix)&&t.minQuality(g.Prefix)<2.2){let r=new E(e.string,e.topN,[new H(2.3)]),n=this.entitySearcher.getMatches(r);if(n.matches.length==e.topN)return new M(n.matches,e,n.meta)}if(e.string.length<=3&&!t.has(g.Prefix)&&t.has(g.Substring)&&t.minQuality(g.Substring)<1.2){let r=new E(e.string,e.topN,[new L(1.3)]),n=this.entitySearcher.getMatches(r);if(n.matches.length==e.topN)return new M(n.matches,e,n.meta)}return this.entitySearcher.getMatches(e)}tryGetEntity(e){return this.entitySearcher.tryGetEntity(e)}getEntities(){return this.entitySearcher.getEntities()}tryGetTerms(e){return this.entitySearcher.tryGetTerms(e)}getTerms(){return this.entitySearcher.getTerms()}removeEntity(e){return this.entitySearcher.removeEntity(e)}replaceEntity(e,t,r){return this.entitySearcher.replaceEntity(e,t,r)}save(e){return this.entitySearcher.save(e)}load(e){return this.entitySearcher.load(e)}},Q=class{constructor(){this.ids=void 0,this.frequencies=void 0,this.ids=[],this.frequencies=[]}addId(e,t){this.ids.push(e),this.frequencies.push(t)}seal(){this.ids=T.ToInt32Array(this.ids),this.frequencies=T.ToInt32Array(this.frequencies)}get length(){return this.ids.length}save(e){e.add(this.ids),e.add(this.frequencies)}load(e){this.ids=e.get(),this.frequencies=e.get()}},A=class{constructor(){this.ngramToTermIds=void 0,this.ngramToTermIds=new Map}add(e,t,r){let n=this.ngramToTermIds.get(e);n||(n=new Q,this.ngramToTermIds.set(e,n)),n.addId(t,r)}seal(){for(let e of this.ngramToTermIds.values())e.seal()}getIds(e){return this.ngramToTermIds.get(e)}get size(){return this.ngramToTermIds.size}save(e){e.add(this.ngramToTermIds.size);for(let[t,r]of this.ngramToTermIds)e.add(t),r.save(e)}load(e){let t=e.get();for(let r=0;r<t;r++){let n=e.get(),s=new Q;s.load(e),this.ngramToTermIds.set(n,s)}}},ge=class{static ComputeJaccardCoefficient(e,t,r){return r/(e+t-r)}static ComputeOverlapMaxCoefficient(e,t,r){return r/Math.max(e,t)}},fe=class{constructor(e){this.ngramComputer=void 0,this.invertedIndex=void 0,this.numberOfNgrams=void 0,this.commonNgramCounts=void 0,this.ngramComputer=e,this.invertedIndex=new A,this.numberOfNgrams=new Int32Array(0),this.commonNgramCounts=new Int32Array(0)}index(e){let t=performance.now();this.invertedIndex=new A,this.commonNgramCounts=new Int32Array(e.length),this.numberOfNgrams=new Int32Array(e.length);let r=0;for(let a=0,o=e.length;a<o;a++){let c=e[a];if(!this.isValidTerm(c)){this.numberOfNgrams[a]=0,r++;continue}let h=this.ngramComputer.computeNgrams(c);this.numberOfNgrams[a]=h.length;let l=this.getNgramsToFrequency(h);for(let[u,m]of l)this.invertedIndex.add(u,a,m)}this.invertedIndex.seal();let n=Math.round(performance.now()-t),s=new f;return s.add("numberOfInvalidTerms",r),s.add("indexingDurationFuzzySearcher",n),s}isValidTerm(e){return e!=null&&e.trim()!==""}getMatches(e){if(this.invertedIndex.size===0)return new S([],e,new f);let t=this.ngramComputer.computeNgrams(e.string),r=this.getNgramsToFrequency(t),n=t.length;this.computeCommonNgramCounts(r);let s=this.getMatchesFromCommonNgrams(n,e.minQuality);return new S(s,e,new f)}computeCommonNgramCounts(e){this.commonNgramCounts.fill(0);for(let[t,r]of e){let n=this.invertedIndex.getIds(t);if(n!=null)for(let s=0,a=n.length;s<a;s++)this.commonNgramCounts[n.ids[s]]+=Math.min(r,n.frequencies[s])}}getNgramsToFrequency(e){let t=new Map;for(let r=0,n=e.length;r<n;r++){let s=e[r],a=t.get(s);t.set(s,a!==void 0?a+1:1)}return t}getMatchesFromCommonNgrams(e,t){let r=[];for(let n=0,s=this.numberOfNgrams.length;n<s;n++){let a=ge.ComputeOverlapMaxCoefficient(e,this.numberOfNgrams[n],this.commonNgramCounts[n]);a>t&&r.push(new D(n,a))}return r}save(e){this.invertedIndex.save(e),e.add(this.numberOfNgrams)}load(e){this.invertedIndex=new A,this.invertedIndex.load(e),this.numberOfNgrams=e.get(),this.commonNgramCounts=new Int32Array(this.numberOfNgrams.length)}},pe=class{constructor(e,t){this.stringSearcher=void 0,this.penaltyFactor=void 0,this.hashCodes=void 0,this.stringSearcher=e,this.penaltyFactor=1-t,this.hashCodes=new Int32Array(0)}index(e){this.hashCodes=new Int32Array(e.length);for(let t=0,r=e.length;t<r;t++)this.hashCodes[t]=O.getHashCode(e[t]);return this.stringSearcher.index(e)}getMatches(e){let t=O.getHashCode(e.string),r=this.stringSearcher.getMatches(e),n=r.matches.map(s=>this.penalizeMatch(s,t)).filter(s=>s.quality>=e.minQuality);return new S(n,r.query,r.meta)}penalizeMatch(e,t){return e.quality*=this.hashCodes[e.index]===t?1:this.penaltyFactor,e}save(e){e.add(this.hashCodes),this.stringSearcher.save(e)}load(e){this.hashCodes=e.get(),this.stringSearcher.load(e)}},ye=class{constructor(e,t){this.ngramN=void 0,this.transformNgram=void 0,this.ngramN=e,this.transformNgram=t??(r=>r)}computeNgrams(e){if(e.length===0)return[];if(e.length<=this.ngramN){let r=this.transformNgram(e);return r?[r]:[]}let t=[];for(let r=0,n=this.maximumNumberOfNgrams(e);r<n;r++){let s=this.transformNgram(e.substring(r,r+this.ngramN));s&&t.push(s)}return t}maximumNumberOfNgrams(e){return Math.max(e.length-this.ngramN+1,e.length>0?1:0)}},Se=class{constructor(e,t,r){this.paddingLeft=void 0,this.paddingRight=void 0,this.paddingMiddle=void 0,this.paddingLeft=e,this.paddingRight=t,this.paddingMiddle=r}normalize(e){return e&&`${this.paddingLeft}${e.split(" ").join(this.paddingMiddle)}${this.paddingRight}`}normalizeBulk(e){let t=e.map(n=>this.normalize(n)),r=new f;return new w(t,r)}},G=class{};G.Value=new Map([["a",["\u1D8F","\u2C65","\u0251","\u1D00","\u0250","\u0252"]],["aa",["\xE5","\uA733"]],["ae",["\xE4","\xE6","\u1D01","\u1D2D","\u1D46","\u01FD","\u01E3","\u1D02"]],["ao",["\uA735"]],["au",["\uA737"]],["av",["\uA739","\uA73B"]],["ay",["\uA73D"]],["b",["\u0180","\u0253","\u0183","\u1D6C","\u1D80","\u0299"]],["c",["\u023C","\u0188","\u0255","\u1D04","\uA73F","\u2184"]],["d",["\u0111","\xF0","\u0256","\u0257","\u018C","\u1D6D","\u1D81","\u1D91","\u0221","\u1D05","\uA77A"]],["db",["\u0238"]],["e",["\u1D92","\u0247","\u2C78","\u1D07","\u0259","\u01DD","\u025B"]],["eo",["\u1D14"]],["f",["\u0192","\u1D6E","\u1D82","\uA730","\uA77C"]],["g",["\u01E5","\u0260","\u1D83","\u0262","\u021D","\u014B","\uA7A1","\u1D79","\uA77F"]],["h",["\u0127","\u2C68","\u0266","\u029C","\u0303","\u0267","\u2C76","\u0265"]],["hv",["\u0195"]],["i",["\u0268","\u1D7B","\u1D96","\u0131","\u026A","\u0269"]],["j",["\u0249","\u0237","\u029D","\u025F","\u0284","\u1D0A"]],["k",["\u0199","\u2C6A","\u1D84","\uA741","\u1D0B","\uA743","\uA745","\uA7A3"]],["l",["\u0142","\u019A","\u2C61","\u026B","\u026C","\u1D85","\u026D","\u0234","\u029F","\uA749","\uA781","\uA747"]],["m",["\u1D6F","\u1D86","\u0271","\u1D0D","\u026F"]],["n",["\u0272","\u019E","\u1D70","\u1D87","\u0273","\u0235","\u0274","\uA791","\uA7A5"]],["o",["\xF8","\u01FF","\u0275","\u0254","\u2C7A","\u1D0F","\uA74B","\uA74D"]],["oe",["\xF6","\u0153"]],["oi",["\u01A3"]],["oo",["\uA74F"]],["ou",["\u0223"]],["p",["\u1D7D","\u01A5","\u1D71","\u1D88","\u1D18","\u01BF","\uA751","\uA753","\uA755"]],["q",["\u024B","\u02A0","\uA757","\uA759"]],["qp",["\u0239"]],["r",["\u024D","\u027D","\uA75B","\u1D72","\u1D89","\u027C","\u027E","\u1D73","\u0280","\u0279","\u0281","\uA7A7","\uA783"]],["s",["\u1D74","\u1D8A","\u0282","\u023F","\uA731","\u0283","\uA7A9","\uA785","\u017F"]],["ss",["\xDF"]],["t",["\u0167","\u2C66","\u01AD","\u0288","\u1D75","\u01AB","\u0236","\u1D1B","\uA787"]],["th",["\xFE"]],["tz",["\uA729"]],["u",["\u0289","\u028A","\u1D7E","\u1D1C","\u1D99"]],["ue",["\xFC","\u1D6B"]],["v",["\u028B","\u1D8C","\u2C71","\u2C74","\u1D20","\u028C","\uA75F"]],["vy",["\uA761"]],["w",["\u2C73","\u1D21","\u028D"]],["x",["\u1D8D"]],["y",["\u024F","\u01B4","\u028F","\u1EFF"]],["z",["\u01B6","\u0225","\u2C6C","\u1D76","\u1D8E","\u0290","\u0291","\u0240","\u1D22","\u0292","\u01B9","\uA763"]]]);var U=class i{constructor(e,t,r){this.replacements=void 0,this.treatCharacterAsSpace=void 0,this.allowCharacter=void 0,this.replacements=e,this.treatCharacterAsSpace=t,this.allowCharacter=r}static createDefaultConfig(){let e=new Set(["_","-","\u2013","/",","," "]);return new i([G.Value],t=>e.has(t),t=>q.isAlphanumeric(t))}},j=class{constructor(e,t,r="normalizationDuration"){this.stringSearcher=void 0,this.normalizer=void 0,this.normalizationDurationMetaKey=void 0,this.stringSearcher=e,this.normalizer=t,this.normalizationDurationMetaKey=r}index(e){let t=performance.now(),r=this.normalizer.normalizeBulk(e),n=Math.round(performance.now()-t),s=this.stringSearcher.index(r.strings);s.add(this.normalizationDurationMetaKey,n);for(let a of r.meta.allEntries)s.add(a[0],a[1]);return s}getMatches(e){let t=new F(this.normalizer.normalize(e.string),e.minQuality,e.searcherType),r=this.stringSearcher.getMatches(t);return new S(r.matches,e,r.meta)}save(e){this.stringSearcher.save(e)}load(e){this.stringSearcher.load(e)}},we=class{constructor(e){this.suffixArraySearcher=void 0,this.suffixArraySearcher=e}index(e){return this.suffixArraySearcher.index(e)}getMatches(e){if(!e.string)return new S([],e,new f);let t=this.modifyQueryString(e.string),r=new F(t,e.minQuality,e.searcherType);return this.suffixArraySearcher.getMatches(r,e.string.length)}modifyQueryString(e){return`${this.suffixArraySearcher.separator}${e}`}save(e){this.suffixArraySearcher.save(e)}load(e){this.suffixArraySearcher.load(e)}},ve=class{constructor(e,t,r){this.prefixSearcher=void 0,this.substringSearcher=void 0,this.fuzzySearcher=void 0,this.prefixSearcher=e,this.substringSearcher=t,this.fuzzySearcher=r}index(e){let t=[];if(this.prefixSearcher&&!this.substringSearcher){let r=this.prefixSearcher.index(e);t.push(r)}if(this.substringSearcher){let r=this.substringSearcher.index(e);t.push(r)}if(this.fuzzySearcher){let r=this.fuzzySearcher.index(e);t.push(r)}return P.mergeMeta(t)}getMatches(e){if(!e.searcherType)throw new Error("SearcherSwitch requires a searcher type.");switch(e.searcherType){case g.Prefix:if(!this.prefixSearcher)throw new Error("No prefix searcher has been indexed.");return this.prefixSearcher.getMatches(e);case g.Substring:if(!this.substringSearcher)throw new Error("No substring searcher has been indexed.");return this.substringSearcher.getMatches(e);case g.Fuzzy:if(!this.fuzzySearcher)throw new Error("No fuzzy searcher has been indexed.");return this.fuzzySearcher.getMatches(e);default:throw new Error(`Unknown searcher type: ${e.searcherType}`)}}save(e){this.prefixSearcher&&!this.substringSearcher&&this.prefixSearcher.save(e),this.substringSearcher&&this.substringSearcher.save(e),this.fuzzySearcher&&this.fuzzySearcher.save(e)}load(e){this.prefixSearcher&&!this.substringSearcher&&this.prefixSearcher.load(e),this.substringSearcher&&this.substringSearcher.load(e),this.fuzzySearcher&&this.fuzzySearcher.load(e)}};(function(i){i.QualityAndIndex="qualityAndIndex",i.QualityAndMatchedString="qualityAndMatchedString"})(R||(R={}));var be=class{constructor(e,t){this.sortOrder=void 0,this.entitySearcher=void 0,this.collator=new Intl.Collator(void 0,{numeric:!0}),this.sortOrder=e,this.entitySearcher=t}indexEntities(e,t,r){return this.entitySearcher.indexEntities(e,t,r)}getMatches(e){let t=this.entitySearcher.getMatches(e);switch(this.sortOrder){case R.QualityAndIndex:return t;case R.QualityAndMatchedString:return this.sortMatchesByQualityAndMatchedString(t.matches),t;default:throw new Error(`Unsupported sort order: ${this.sortOrder}`)}}sortMatchesByQualityAndMatchedString(e){e.sort((t,r)=>t.quality>r.quality?-1:t.quality<r.quality?1:this.collator.compare(t.matchedString,r.matchedString))}tryGetEntity(e){return this.entitySearcher.tryGetEntity(e)}getEntities(){return this.entitySearcher.getEntities()}tryGetTerms(e){return this.entitySearcher.tryGetTerms(e)}getTerms(){return this.entitySearcher.getTerms()}save(e){this.entitySearcher.save(e)}load(e){this.entitySearcher.load(e)}removeEntity(e){return this.entitySearcher.removeEntity(e)}replaceEntity(e,t,r){return this.entitySearcher.replaceEntity(e,t,r)}},xe=class{constructor(e){this.stringSearcher=void 0,this.stringSearcher=e}index(e){return this.stringSearcher.index(e)}getMatches(e){let t=this.stringSearcher.getMatches(e);return t.matches.sort(this.compareMatchesByQualityAndIndex),t}compareMatchesByQualityAndIndex(e,t){return e.quality>t.quality?-1:e.quality<t.quality?1:e.index<t.index?-1:e.index>t.index?1:0}save(e){this.stringSearcher.save(e)}load(e){this.stringSearcher.load(e)}},B=class{static compareOrdinal(e,t,r,n,s){let a=Math.min(t+s,e.length),o=Math.min(n+s,r.length),c=t,h=n;for(;c<a&&h<o;){let m=e.charCodeAt(c),d=r.charCodeAt(h);if(m<d)return-1;if(m>d)return 1;c++,h++}let l=a-t,u=o-n;return l===u?0:l<u?-1:1}},Te=class i{static create(e){if(e==null)throw new Error("Input string cannot be null.");let t=new i(e);return t.FormInitialChains(),t.BuildSufixArray(),t.sa}constructor(e){this.inputString=void 0,this.eoc=2147483647,this.sa=void 0,this.isa=void 0,this.chainHeadsDict=void 0,this.chainStack=[],this.subChains=[],this.nextRank=1,this.inputString=e;let t=e.length;this.sa=new Int32Array(t),this.isa=new Int32Array(t),this.chainHeadsDict=new Map}FormInitialChains(){this.FindInitialChains(),this.SortAndPushSubchains()}FindInitialChains(){for(let e=0;e<this.inputString.length;e++){let t=this.inputString.charCodeAt(e),r=this.chainHeadsDict.get(t);this.isa[e]=r!==void 0?r:this.eoc,this.chainHeadsDict.set(t,e)}for(let e of this.chainHeadsDict.values()){let t=new W(e,1);this.subChains.push(t)}}BuildSufixArray(){for(;this.chainStack.length>0;){let e=this.chainStack.pop();this.isa[e.head]===this.eoc?this.RankSuffix(e.head):this.RefineChainWithInductionSorting(e)}}RankSuffix(e){this.isa[e]=-this.nextRank,this.sa[this.nextRank-1]=e,this.nextRank++}RefineChainWithInductionSorting(e){let t=[];for(this.chainHeadsDict.clear(),this.subChains=[];e.head!==this.eoc;){let r=this.isa[e.head];if(e.head+e.length>this.inputString.length-1)this.RankSuffix(e.head);else if(this.isa[e.head+e.length]<0){let n=new Me(e.head,-this.isa[e.head+e.length]);t.push(n)}else this.ExtendChain(e);e.head=r}this.SortAndPushSubchains(),this.SortAndRankNotedSuffixes(t)}ExtendChain(e){let t=this.inputString.charCodeAt(e.head+e.length);if(this.chainHeadsDict.has(t))this.isa[this.chainHeadsDict.get(t)]=e.head,this.isa[e.head]=this.eoc;else{this.isa[e.head]=this.eoc;let r=new W(e.head,e.length+1);this.subChains.push(r)}this.chainHeadsDict.set(t,e.head)}SortAndRankNotedSuffixes(e){e.sort((t,r)=>t.rank-r.rank);for(let t=0;t<e.length;t++)this.RankSuffix(e[t].head)}SortAndPushSubchains(){this.subChains.sort((e,t)=>{let r=Math.min(e.length,t.length);return B.compareOrdinal(this.inputString,e.head,this.inputString,t.head,r)});for(let e=this.subChains.length-1;e>=0;e--)this.chainStack.push(this.subChains[e])}},Me=class{constructor(e,t){this.head=void 0,this.rank=void 0,this.head=e,this.rank=t}},W=class{constructor(e,t){this.head=void 0,this.length=void 0,this.head=e,this.length=t}},Ee=class{constructor(e){this.separator=void 0,this.str=void 0,this.suffixArray=void 0,this.indexToTermIndex=void 0,this.termLengths=void 0,this.separator=e,this.str="",this.suffixArray=new Int32Array(0),this.indexToTermIndex=new Int32Array(0),this.termLengths=new Int32Array(0)}index(e){let t=performance.now();this.str=e.length>0?this.separator+e.join(this.separator)+this.separator:"",this.suffixArray=Te.create(this.str),this.indexToTermIndex=new Int32Array(this.suffixArray.length),this.termLengths=new Int32Array(e.length);let r=0;for(let a=0;a<e.length;a++){this.termLengths[a]=e[a].length;for(let o=0;o<=e[a].length;o++)this.indexToTermIndex[r++]=a}this.indexToTermIndex[r++]=-1;let n=Math.round(performance.now()-t),s=new f;return s.add("indexingDurationSuffixArraySearcher",n),s}getMatches(e,t){if(!e.string)return new S([],e,new f);let[r,n]=this.GetPositionsInSuffixArray(e.string),s=new Int32Array(n-r),a=new Set,o=0;for(let l=r;l<n;l++){let u=this.indexToTermIndex[this.suffixArray[l]];a.has(u)||(a.add(u),s[o++]=u)}let c=[];t=t??e.string.length;let h=0;for(let l=0;l<o;l++)h=this.computeQuality(t,this.termLengths[s[l]]),h>e.minQuality&&c.push(new D(s[l],h));return new S(c,e,new f)}computeQuality(e,t){return e/t}GetPositionsInSuffixArray(e){let t=0,r=this.suffixArray.length,n=0;for(;t<r;)n=Math.floor((t+r)/2),B.compareOrdinal(e,0,this.str,this.suffixArray[n],e.length)>0?t=n+1:r=n;let s=t;for(r=this.suffixArray.length;t<r;)n=Math.floor((t+r)/2),B.compareOrdinal(e,0,this.str,this.suffixArray[n],e.length)==0?t=n+1:r=n;return[s,r]}save(e){e.add(this.str),e.add(this.suffixArray),e.add(this.indexToTermIndex),e.add(this.termLengths)}load(e){this.str=e.get(),this.suffixArray=e.get(),this.indexToTermIndex=e.get(),this.termLengths=e.get()}},J=class{static createSearcher(e){let t=this.createDefaultNormalizer(e),r=this.tryCreateFuzzySearcher(e),n=this.tryCreateSubstringSearcher(e),s=this.tryCreatePrefixSearcher(e,n),a=new ve(s,n,r);a=new de(a),a=new xe(a),a=new j(a,t,"normalizationDurationDefault");let o=new se(a,e.searcherTypes);return o=new me(o,e.searcherTypes),o=new be(e.sortOrder,o),o}static createDefaultNormalizer(e){let t=new Set;e.fuzzySearchConfig&&(e.fuzzySearchConfig.paddingLeft.split("").forEach(n=>t.add(n)),e.fuzzySearchConfig.paddingRight.split("").forEach(n=>t.add(n)),e.fuzzySearchConfig.paddingMiddle.split("").forEach(n=>t.add(n))),e.substringSearchConfig&&e.substringSearchConfig.suffixArraySeparator.split("").forEach(n=>t.add(n));let r=new U(e.normalizerConfig.replacements,e.normalizerConfig.treatCharacterAsSpace,n=>e.normalizerConfig.allowCharacter(n)&&!t.has(n));return ue.create(r)}static tryCreateFuzzySearcher(e){if(!e.searcherTypes.includes(g.Fuzzy))return null;if(e.fuzzySearchConfig===void 0)throw new Error("Unable to create fuzzy searcher: No fuzzy search config provided.");return this.createFuzzySearcher(e.fuzzySearchConfig)}static createFuzzySearcher(e){let t=new ye(e.ngramN,e.transformNgram),r=new Se(e.paddingLeft,e.paddingRight,e.paddingMiddle),n=new fe(t);return n=new pe(n,e.inequalityPenalty),n=new j(n,r,"normalizationDurationNgrams"),n}static tryCreateSubstringSearcher(e){if(!e.searcherTypes.includes(g.Substring))return null;if(e.substringSearchConfig===void 0)throw new Error("Unable to create substring searcher: No substring search config provided.");return this.createSubstringSearcher(e.substringSearchConfig)}static createSubstringSearcher(e){return new Ee(e.suffixArraySeparator)}static tryCreatePrefixSearcher(e,t){if(!e.searcherTypes.includes(g.Prefix))return null;if(e.substringSearchConfig===void 0)throw new Error("Unable to create prefix searcher: No substring search config provided.");return this.createPrefixSearcher(e.substringSearchConfig,t)}static createPrefixSearcher(e,t){return t===null&&(t=this.createSubstringSearcher(e)),new we(t)}},Ce=class i{constructor(e,t,r,n,s,a){this.paddingLeft=void 0,this.paddingRight=void 0,this.paddingMiddle=void 0,this.ngramN=void 0,this.transformNgram=void 0,this.inequalityPenalty=void 0,this.paddingLeft=e,this.paddingRight=t,this.paddingMiddle=r,this.ngramN=n,this.transformNgram=s,this.inequalityPenalty=a}static createDefaultConfig(){return new i("$$","!","!$$",3,e=>e.endsWith("$")?null:e.indexOf("$")===-1?e.split("").sort().join(""):e,.05)}};var Ie=class i{constructor(e){this.suffixArraySeparator=void 0,this.suffixArraySeparator=e}static createDefaultConfig(){return new i("$")}},Le=class i{constructor(e,t,r,n,s,a){this.searcherTypes=void 0,this.maxQueryLength=void 0,this.sortOrder=void 0,this.normalizerConfig=void 0,this.fuzzySearchConfig=void 0,this.substringSearchConfig=void 0,this.searcherTypes=e,this.maxQueryLength=t,this.sortOrder=r,this.normalizerConfig=n,this.fuzzySearchConfig=s,this.substringSearchConfig=a}static createDefaultConfig(){let e=[g.Fuzzy,g.Substring,g.Prefix],t=R.QualityAndMatchedString,r=U.createDefaultConfig(),n=Ce.createDefaultConfig(),s=Ie.createDefaultConfig();return new i(e,150,t,r,n,s)}},K=class{static createSearcher(e){let t=J.createSearcher(e),r=J.createSearcher(e),n=new te(e.maxQueryLength,t,r);return n=new re(n),n}static createDefaultSearcher(){let e=Le.createDefaultConfig();return this.createSearcher(e)}};function He(i,e){if(i.length===0)return null;let t=i.find(n=>n.sourceStart<=e&&e<=n.sourceEnd);if(t)return t.commentrayLine;if(e<i[0].sourceStart)return i[0].commentrayLine;let r=i[0];for(let n of i)if(n.sourceStart<=e)r=n;else break;return r.commentrayLine}function ze(i,e){if(i.length===0)return null;let t=i[0];for(let r of i)if(r.commentrayLine<=e)t=r;else break;return t.sourceStart-1}function C(i,e,t,r,n){let s=Math.max(0,e-t),a=Math.max(0,r-n);return s<=0?0:i/s*a}function v(i){let e=i.trim();if(e==="")return"";try{let t=atob(e),r=new Uint8Array(t.length);for(let n=0;n<t.length;n++)r[n]=t.charCodeAt(n);return new TextDecoder("utf-8",{fatal:!1}).decode(r)}catch{return""}}function Be(i,e){function t(r){let n=i.getAttribute(r);return n!==null&&n.trim()!==""?n:e.getAttribute(r)?.trim()??""}return{rawCodeB64:t("data-raw-code-b64"),rawMdB64:t("data-raw-md-b64")}}function V(i){return i.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function Oe(i,e){let t=e.map(r=>r.trim()).filter(Boolean);if(t.length===0)return V(i);try{let r=t.map(a=>a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")),n=new RegExp(`(${r.join("|")})`,"gi");return i.split(n).map((a,o)=>o%2===1?`<mark class="search-hit">${V(a)}</mark>`:V(a)).join("")}catch{return V(i)}}function Ae(i,e){let t=e.map(c=>c.trim()).filter(Boolean);if(t.length===0)return[];let r=i.toLowerCase(),n=t.map(c=>c.toLowerCase()),s=[],a=0,o=0;for(;a<i.length&&o<400;){let c=a,h=-1,l=!0;for(let u of n){if(u.length===0)continue;let m=r.indexOf(u,c);if(m<0){l=!1;break}h<0&&(h=m),c=m+u.length}if(!l||h<0)break;s.push({start:h,end:c}),o++,a=h+1}return s}function qe(i,e){let t=Math.max(0,Math.min(e,i.length)),r=0;for(let n=0;n<t;n++)i[n]===`
|
|
2
|
+
`&&r++;return r}function $e(i,e){let t=i.split(`
|
|
3
|
+
`);return e<0||e>=t.length?"":t[e]??""}function Pe(i,e){try{return i.getItem(e)}catch{return null}}function _(i,e,t){try{i.setItem(e,t)}catch{}}function st(i){return i.trim().split(/\s+/).filter(Boolean)}function Je(i,e,t){return Math.max(e,Math.min(t,i))}function I(i){return i.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function at(i,e){let t=i.replace(/\s+/g," ").trim();return t.length<=e?t:`${t.slice(0,e-1)}\u2026`}function ot(i,e){let t=new Map;for(let r of i){let n=r.kind==="path"?`path:${r.spPath??""}|${r.crPath??""}|${r.text.slice(0,120)}`:`${r.kind}:${r.line}:${r.crPath??""}`,s=t.get(n);(!s||r.score>s.score)&&t.set(n,r)}return[...t.values()].sort((r,n)=>n.score-r.score).slice(0,e)}function Re(i,e,t){let r=Ae(i,t),n=new Set,s=[];for(let a of r){let o=qe(i,a.start);n.has(o)||(n.add(o),s.push({kind:e,line:o,text:$e(i,o),score:1e3,source:"ordered"}))}return s}function ct(i,e,t){let r=e.trim();if(!r)return[];let n=new E(r,t,[new N(.22),new L(0),new H(0)]),s=i.getMatches(n),a=[];for(let o of s.matches){let c=o.entity;a.push({kind:c.kind,line:c.line,text:c.text,score:100+o.quality,source:"fuzzy",crPath:c.crPath,spPath:c.spPath})}return a}function ht(i,e){if(e.length===0)return[];let t=[];for(let r of i)r.kind!=="path"||Ae(r.text,e).length===0||t.push({kind:"path",line:r.line,text:r.text,score:1e3,source:"ordered",spPath:r.spPath,crPath:r.crPath});return t}function lt(i){let{scope:e,filePathLabel:t,commentrayPathLabel:r,rawCode:n,rawMd:s,searcher:a,queryRaw:o,tokens:c,pathBlobWide:h,pathRowsForOrdering:l}=i,u=(h&&h.trim().length>0?h.trim():[t,r].filter(b=>b.trim().length>0).join(`
|
|
4
|
+
`))||"",m=e==="commentray-and-paths"?[]:Re(n,"code",c),d=e==="commentray-and-paths"&&l&&l.length>0?ht(l,c):e==="commentray-and-paths"&&u?Re(u,"path",c):[],p=Re(s,"md",c),y=ct(a,o,60);return ot([...m,...d,...p,...y],80)}function ut(i){return i==="commentray-and-paths"?"Paths + indexed commentray (this page + browse pages when built). Ordered tokens + fuzzy lines.":"Whole source: whitespace tokens in order (may span lines). Per-line fuzzy ranking for typos."}function dt(i,e){if(i.kind==="code")return`Code L${i.line+1}`;if(i.kind==="path")return"Path";let t=i.crPath&&i.crPath!==e.currentCommentrayPath?` \xB7 ${i.crPath}`:"";return`Commentray L${i.line+1}${t}`}function mt(i,e,t){let r=dt(i,t),n=i.source==="ordered"?"ordered":"fuzzy",s=Oe(at(i.text,320),e),a=I(i.kind==="md"?i.crPath??t.currentCommentrayPath:i.crPath??""),o=I(i.kind==="md"?i.spPath??t.currentSourcePath:i.spPath??"");return`<button type="button" class="hit" data-kind="${i.kind}" data-line="${String(i.line)}" data-cr-path="${a}" data-sp-path="${o}"><span class="meta">${I(r)} <span class="src-tag">(${n})</span></span><div class="snippet">${s}</div></button>`}function gt(i,e,t,r){if(e.length===0)return'<div class="hint">No matches. Try fewer tokens or looser spelling (fuzzy matches per line).</div>';let n=ut(i),s=[];s.push(`<div class="hint">${n} ${e.length} hit(s).</div>`);for(let a of e)s.push(mt(a,t,r));return s.join("")}function Ke(i,e,t){let r=i.querySelector(`#commentray-md-line-${String(e)}`);if(r instanceof HTMLElement){let a=r.getBoundingClientRect().top-i.getBoundingClientRect().top+i.scrollTop;i.scrollTo({top:Math.max(0,a-8),behavior:"smooth"});return}if(t<=1)return;let n=e/Math.max(1,t-1),s=i.scrollHeight-i.clientHeight;i.scrollTo({top:n*Math.max(0,s),behavior:"smooth"})}function Ve(i,e,t){let r=i.find(n=>n.commentrayPath===e);if(r){if(r.staticBrowseUrl?.trim()){let n=new URL(r.staticBrowseUrl.trim(),globalThis.location.href);t!==null&&t>=0&&(n.hash=`commentray-md-line-${String(t)}`),globalThis.open(n.toString(),"_blank","noopener,noreferrer");return}if(r.commentrayOnGithub){let n=t!==null&&t>=0?`${r.commentrayOnGithub}#L${String(t+1)}`:r.commentrayOnGithub;globalThis.open(n,"_blank","noopener,noreferrer")}}}function ft(i){return{scope:(i.getAttribute("data-search-scope")||"")==="commentray-and-paths"?"commentray-and-paths":"full",filePathLabel:i.getAttribute("data-search-file-path")||"",commentrayPathLabel:i.getAttribute("data-search-commentray-path")||""}}function Qe(i,e,t,r,n){let s=t.split(`
|
|
5
5
|
`),a=e.split(`
|
|
6
|
-
`),o=[];return i==="commentray-and-paths"&&(r.trim()&&o.push({kind:"path",line:o.length,text:r}),n.trim()&&o.push({kind:"path",line:o.length,text:n})),[...i==="full"?a.map((h,c)=>({kind:"code",line:c,text:h})):[],...o,...s.map((h,c)=>({kind:"md",line:c,text:h}))]}function Ze(i){let e=W.createDefaultSearcher();return e.indexEntities(i,t=>`${t.kind}:${t.kind==="path"?t.text:t.line}`,t=>[t.text]),e}function et(i){let{scope:e,filePathLabel:t,commentrayPathLabel:r,rawCode:n,rawMd:s,mdLines:a,searcher:o,searchInput:h,searchClear:c,searchResults:l,docPane:u}=i,m;function y(){clearTimeout(m),m=void 0,h.value="",l.innerHTML="",l.hidden=!0}function C(){let p=je(h.value);if(p.length===0){l.hidden=!0,l.innerHTML="";return}let f=Je({scope:e,filePathLabel:t,commentrayPathLabel:r,rawCode:n,rawMd:s,searcher:o,queryRaw:h.value,tokens:p});l.hidden=!1,l.innerHTML=We(e,f)}l.addEventListener("click",p=>{let f=p.target;for(;f&&f!==l&&(!f.classList||!f.classList.contains("hit"));)f=f.parentElement;if(!f||!f.classList||!f.classList.contains("hit"))return;let x=f.getAttribute("data-kind"),I=parseInt(f.getAttribute("data-line")||"0",10);if(x==="code"){let w=document.getElementById(`code-line-${String(I)}`);w&&w.scrollIntoView({block:"nearest",behavior:"smooth"})}else if(x==="path")u.scrollTo({top:0,behavior:"smooth"});else{let w=a.length;if(w<=0)return;let Q=I/Math.max(1,w-1),Ue=u.scrollHeight-u.clientHeight;u.scrollTo({top:Q*Math.max(0,Ue),behavior:"smooth"})}}),h.addEventListener("input",()=>{clearTimeout(m),m=setTimeout(C,200)}),c.addEventListener("click",y),document.addEventListener("keydown",p=>{if(p.key!=="Escape")return;let f=h.value.trim().length>0,x=document.activeElement===h,I=!l.hidden;!f&&!x&&!I||(y(),x&&h.blur(),p.preventDefault())})}function Be(i,e,t){let r=Le(localStorage,i)==="1";t.checked=r,r&&e.classList.add("wrap"),t.addEventListener("change",()=>{t.checked?(e.classList.add("wrap"),X(localStorage,i,"1")):(e.classList.remove("wrap"),X(localStorage,i,"0"))})}function tt(i){let e=i.trim();if(!e)return[];try{let t=JSON.parse(O(e));if(!Array.isArray(t))return[];let r=[];for(let n of t){if(typeof n!="object"||n===null)continue;let s=n;typeof s.id=="string"&&typeof s.commentrayLine=="number"&&typeof s.sourceStart=="number"&&typeof s.sourceEnd=="number"&&r.push({id:s.id,commentrayLine:s.commentrayLine,sourceStart:s.sourceStart,sourceEnd:s.sourceEnd})}return r}catch{return[]}}function rt(i){let e=i.getBoundingClientRect().top+2,t=i.querySelectorAll('[id^="code-line-"]');for(let r of t)if(r.getBoundingClientRect().bottom>e){let s=/^code-line-(\d+)$/.exec(r.id);return s?Number(s[1])+1:1}return t.length>0?t.length:1}function nt(i){let e=i.getBoundingClientRect().top+2,t=i.querySelectorAll(".commentray-block-anchor"),r=0;for(let n of t){let s=n.getAttribute("data-commentray-line");if(!(s===null||s===""))if(n.getBoundingClientRect().top<=e+1)r=Number(s);else break}return r}function Qe(i,e,t,r){let n="none";i.addEventListener("scroll",()=>{n!=="doc"&&(n="code",t(),n="none")},{passive:!0}),e.addEventListener("scroll",()=>{n!=="code"&&(n="doc",r(),n="none")},{passive:!0})}function it(i,e,t){Qe(i,e,()=>{let r=rt(i),n=ze(t,r);if(n===null)e.scrollTop=E(i.scrollTop,i.scrollHeight,i.clientHeight,e.scrollHeight,e.clientHeight);else{let s=e.querySelector(`[data-commentray-line="${String(n)}"]`);if(s instanceof HTMLElement){let a=s.getBoundingClientRect().top-e.getBoundingClientRect().top+e.scrollTop;e.scrollTop=Math.max(0,a-2)}else e.scrollTop=E(i.scrollTop,i.scrollHeight,i.clientHeight,e.scrollHeight,e.clientHeight)}},()=>{let r=nt(e),n=Ae(t,r);if(n===null)i.scrollTop=E(e.scrollTop,e.scrollHeight,e.clientHeight,i.scrollHeight,i.clientHeight);else{let s=document.getElementById(`code-line-${String(n)}`);if(s){let a=s.getBoundingClientRect().top-i.getBoundingClientRect().top+i.scrollTop;i.scrollTop=Math.max(0,a-2)}else i.scrollTop=E(e.scrollTop,e.scrollHeight,e.clientHeight,i.scrollHeight,i.clientHeight)}})}function st(i,e){Qe(i,e,()=>{e.scrollTop=E(i.scrollTop,i.scrollHeight,i.clientHeight,e.scrollHeight,e.clientHeight)},()=>{i.scrollTop=E(e.scrollTop,e.scrollHeight,e.clientHeight,i.scrollHeight,i.clientHeight)})}function at(i){if(typeof i!="object"||i===null)return!1;let e=i;return typeof e.sourcePath=="string"&&typeof e.commentrayPath=="string"&&typeof e.sourceOnGithub=="string"&&typeof e.commentrayOnGithub=="string"}function $e(i){let e=[];if(!Array.isArray(i))return e;for(let t of i)at(t)&&e.push(t);return e}function ot(i){let e=i.trim();if(e==="")return[];try{let t=JSON.parse(O(e));return $e(t)}catch{return[]}}function ht(i,e){let t=e.sourcePath.split("/").filter(Boolean);if(t.length===0)return;let r=i;for(let n=0;n<t.length;n++){let s=t[n];if(s===void 0)continue;r.children.has(s)||r.children.set(s,{children:new Map,pairs:[]});let a=r.children.get(s);if(a===void 0)return;n===t.length-1&&a.pairs.push(e),r=a}}function Pe(i){let e=[...i.children.keys()].sort((r,n)=>r.localeCompare(n));if(e.length===0)return"";let t=[];for(let r of e){let n=i.children.get(r);if(n!==void 0){if(n.children.size>0){let s=Pe(n);t.push(`<li><div class="tree-dir">${B(r)}</div>${s}</li>`)}if(n.pairs.length>0)for(let s of n.pairs)t.push(`<li><div class="tree-file"><span class="tree-file-name">${B(s.sourcePath)}</span><span class="tree-file-links"><a href="${B(s.sourceOnGithub)}" target="_blank" rel="noopener noreferrer">source</a><a href="${B(s.commentrayOnGithub)}" target="_blank" rel="noopener noreferrer">commentray</a></span></div></li>`)}}return`<ul>${t.join("")}</ul>`}function ct(i,e,t){e.hidden=!t,i.setAttribute("aria-expanded",t?"true":"false")}function lt(i,e){if(e.length===0){i.innerHTML='<p class="documented-files-panel__hint">No <code class="documented-files-panel__code">documentedPairs</code> in this export (build with a GitHub repo URL).</p>';return}let t={children:new Map,pairs:[]};for(let r of e)ht(t,r);i.innerHTML=Pe(t)}function ut(i,e){let t=null,r=null;return async()=>t!==null?t:(r===null&&(r=(async()=>{if(e.length>0&&(t=ot(e),t.length>0))return;if(i.length===0){t=[];return}let n=await fetch(i,{credentials:"same-origin"});if(!n.ok)throw new Error(`nav json ${String(n.status)}`);let s=await n.json();t=$e(s.documentedPairs)})()),await r,t??[])}function dt(){let i=document.getElementById("documented-files-toggle"),e=document.getElementById("documented-files-panel"),t=document.getElementById("documented-files-tree"),r=document.getElementById("shell");if(!(i instanceof HTMLButtonElement)||!e||!t)return;let n=i.getAttribute("data-nav-json-url")?.trim()??"",s=r?.getAttribute("data-documented-pairs-b64")?.trim()??"";if(n.length===0&&s.length===0)return;let a=ut(n,s);i.addEventListener("click",()=>{let o=e.hidden!==!1;ct(i,e,o),o&&(async()=>{try{let h=await a();lt(t,h)}catch{t.innerHTML='<p class="documented-files-panel__hint">Could not load the file list. Check the browser network tab.</p>'}})()})}function mt(i,e,t,r,n){let s=!1,a=n;function o(c){if(!s)return;let l=e.getBoundingClientRect(),u=c.clientX-l.left,m=Oe(u/l.width*100,15,85);a=m,t.style.flex=`0 0 ${m}%`}function h(){s=!1,window.removeEventListener("mousemove",o),window.removeEventListener("mouseup",h),document.body.style.cursor="",document.body.style.userSelect="",X(localStorage,i,String(a))}r.addEventListener("mousedown",c=>{c.preventDefault(),s=!0,document.body.style.cursor="col-resize",document.body.style.userSelect="none",window.addEventListener("mousemove",o),window.addEventListener("mouseup",h)})}var De="commentray.codeCommentrayStatic.splitPct",Ge="commentray.codeCommentrayStatic.wrap";function gt(i){let e=document.getElementById("wrap-lines");e&&Be(Ge,i,e)}function ft(i,e){let t=document.getElementById("doc-pane"),r=document.getElementById("gutter"),n=document.getElementById("wrap-lines"),s=document.getElementById("search-q"),a=document.getElementById("search-clear"),o=document.getElementById("search-results");if(!t||!r||!n||!s||!a||!o)return;let{rawCodeB64:h,rawMdB64:c}=ke(i,e),l=O(h),u=O(c),m=tt(i.getAttribute("data-scroll-block-links-b64")||""),{scope:y,filePathLabel:C,commentrayPathLabel:p}=Xe(i),f=u.split(`
|
|
7
|
-
`)
|
|
6
|
+
`),o=[];return i==="commentray-and-paths"&&(r.trim()&&o.push({kind:"path",line:o.length,text:r}),n.trim()&&o.push({kind:"path",line:o.length,text:n})),[...i==="full"?a.map((c,h)=>({kind:"code",line:h,text:c})):[],...o,...s.map((c,h)=>({kind:"md",line:h,text:c}))]}function Ge(i){let e=K.createDefaultSearcher();return e.indexEntities(i,t=>t.kind==="md"&&t.crPath?`md:${t.crPath}:${t.line}`:t.kind==="path"?`path:${t.spPath??""}|${t.crPath??""}|${t.line}|${t.text.slice(0,120)}`:`${t.kind}:${t.line}`,t=>[t.text]),e}function pt(i,e){let t=i;for(;t;){if(t.classList?.contains("hit"))return t;if(t===e)return null;t=t.parentElement}return null}function yt(i){let e=document.getElementById(`code-line-${String(i)}`);e&&e.scrollIntoView({block:"nearest",behavior:"smooth"})}function St(i,e){let t=(i.getAttribute("data-cr-path")?.trim()??"").trim(),r=e.mutable.commentrayPathLabel.trim();if(t.length===0||t===r){e.docScrollEl.scrollTo({top:0,behavior:"smooth"});return}Ve(e.mutable.documentedPairs,t,null)}function wt(i,e,t){if(e.length>0&&e!==t.mutable.commentrayPathLabel){Ve(t.mutable.documentedPairs,e,i);return}Ke(t.docScrollEl,i,t.mutable.mdLines.length)}function vt(i,e){let t=i.getAttribute("data-kind"),r=parseInt(i.getAttribute("data-line")||"0",10),n=i.getAttribute("data-cr-path")?.trim()??"";if(t==="code"){yt(r);return}if(t==="path"){St(i,e);return}wt(r,n,e)}function bt(i){let{scope:e,filePathLabel:t,mutable:r,rawCode:n,searchInput:s,searchClear:a,searchResults:o,docScrollEl:c}=i,h;function l(){clearTimeout(h),h=void 0,s.value="",o.innerHTML="",o.hidden=!0}function u(){let d=st(s.value);if(d.length===0){o.hidden=!0,o.innerHTML="";return}let p=lt({scope:e,filePathLabel:t,commentrayPathLabel:r.commentrayPathLabel,rawCode:n,rawMd:r.rawMd,searcher:r.searcher,queryRaw:s.value,tokens:d,pathBlobWide:r.pathBlobWide,pathRowsForOrdering:r.pathRowsForOrdering.length>0?r.pathRowsForOrdering:void 0});o.hidden=!1,o.innerHTML=gt(e,p,d,{currentCommentrayPath:r.commentrayPathLabel,currentSourcePath:t})}let m={mutable:r,docScrollEl:c};o.addEventListener("click",d=>{let p=pt(d.target,o);p&&vt(p,m)}),s.addEventListener("input",()=>{clearTimeout(h),h=setTimeout(u,200)}),a.addEventListener("click",l),document.addEventListener("keydown",d=>{if(d.key!=="Escape")return;let p=s.value.trim().length>0,y=document.activeElement===s,b=!o.hidden;!p&&!y&&!b||(l(),y&&s.blur(),d.preventDefault())})}function _e(i,e,t){let r=Pe(localStorage,i)==="1";t.checked=r,r&&e.classList.add("wrap"),t.addEventListener("change",()=>{t.checked?(e.classList.add("wrap"),_(localStorage,i,"1")):(e.classList.remove("wrap"),_(localStorage,i,"0"))})}function Xe(i){let e=i.trim();if(!e)return[];try{let t=JSON.parse(v(e));if(!Array.isArray(t))return[];let r=[];for(let n of t){if(typeof n!="object"||n===null)continue;let s=n;typeof s.id=="string"&&typeof s.commentrayLine=="number"&&typeof s.sourceStart=="number"&&typeof s.sourceEnd=="number"&&r.push({id:s.id,commentrayLine:s.commentrayLine,sourceStart:s.sourceStart,sourceEnd:s.sourceEnd})}return r}catch{return[]}}function xt(i){let e=i.getBoundingClientRect().top+2,t=i.querySelectorAll('[id^="code-line-"]');for(let r of t)if(r.getBoundingClientRect().bottom>e){let s=/^code-line-(\d+)$/.exec(r.id);return s?Number(s[1])+1:1}return t.length>0?t.length:1}function Tt(i){let e=i.getBoundingClientRect().top+2,t=i.querySelectorAll(".commentray-block-anchor"),r=0;for(let n of t){let s=n.getAttribute("data-commentray-line");if(!(s===null||s===""))if(n.getBoundingClientRect().top<=e+1)r=Number(s);else break}return r}function Ye(i,e,t,r){let n="none";i.addEventListener("scroll",()=>{n!=="doc"&&(n="code",t(),n="none")},{passive:!0}),e.addEventListener("scroll",()=>{n!=="code"&&(n="doc",r(),n="none")},{passive:!0})}function Ue(i,e,t){Ye(i,e,()=>{let r=t(),n=xt(i),s=He(r,n);if(s===null)e.scrollTop=C(i.scrollTop,i.scrollHeight,i.clientHeight,e.scrollHeight,e.clientHeight);else{let a=e.querySelector(`[data-commentray-line="${String(s)}"]`);if(a instanceof HTMLElement){let o=a.getBoundingClientRect().top-e.getBoundingClientRect().top+e.scrollTop;e.scrollTop=Math.max(0,o-2)}else e.scrollTop=C(i.scrollTop,i.scrollHeight,i.clientHeight,e.scrollHeight,e.clientHeight)}},()=>{let r=t(),n=Tt(e),s=ze(r,n);if(s===null)i.scrollTop=C(e.scrollTop,e.scrollHeight,e.clientHeight,i.scrollHeight,i.clientHeight);else{let a=document.getElementById(`code-line-${String(s)}`);if(a){let o=a.getBoundingClientRect().top-i.getBoundingClientRect().top+i.scrollTop;i.scrollTop=Math.max(0,o-2)}else i.scrollTop=C(e.scrollTop,e.scrollHeight,e.clientHeight,i.scrollHeight,i.clientHeight)}})}function Mt(i,e){Ye(i,e,()=>{e.scrollTop=C(i.scrollTop,i.scrollHeight,i.clientHeight,e.scrollHeight,e.clientHeight)},()=>{i.scrollTop=C(e.scrollTop,e.scrollHeight,e.clientHeight,i.scrollHeight,i.clientHeight)})}function Et(i){if(typeof i!="object"||i===null)return!1;let e=i;return typeof e.sourcePath=="string"&&typeof e.commentrayPath=="string"&&typeof e.sourceOnGithub=="string"&&typeof e.commentrayOnGithub=="string"&&(e.staticBrowseUrl===void 0||typeof e.staticBrowseUrl=="string")}function ke(i){let e=[];if(!Array.isArray(i))return e;for(let t of i)Et(t)&&e.push(t);return e}function Ct(i){let e=new Set,t=[],r=0;for(let n of i)for(let s of[n.sourcePath,n.commentrayPath]){let a=s.trim();!a||e.has(a)||(e.add(a),t.push({kind:"path",line:r++,text:a,spPath:n.sourcePath,crPath:n.commentrayPath}))}return t}function It(i){if(i.kind!=="commentrayLine"||typeof i.line!="number"||typeof i.text!="string")return null;let e=typeof i.sourcePath=="string"?i.sourcePath:"",t=typeof i.commentrayPath=="string"?i.commentrayPath:"";return{kind:"md",line:i.line,text:i.text,spPath:e,crPath:t}}function Lt(i,e){if(i.kind!=="sourcePath"&&i.kind!=="commentrayPath")return null;let t=typeof i.sourcePath=="string"?i.sourcePath:"",r=typeof i.commentrayPath=="string"?i.commentrayPath:"",n=i.kind==="sourcePath"?t:r;return n?{kind:"path",line:e,text:n,spPath:t,crPath:r}:null}function Ht(i){if(!i||typeof i!="object")return[];let e=i.rows;if(!Array.isArray(e))return[];let t=[],r=0;for(let n of e){if(!n||typeof n!="object")continue;let s=n,a=It(s);if(a){t.push(a);continue}let o=Lt(s,r);o&&(t.push(o),r+=1)}return t}function Ze(i){let e=i.trim();if(e==="")return[];try{let t=JSON.parse(v(e));return ke(t)}catch{return[]}}function zt(i,e){let t=e.sourcePath.split("/").filter(Boolean);if(t.length===0)return;let r=i;for(let n=0;n<t.length;n++){let s=t[n];if(s===void 0)continue;r.children.has(s)||r.children.set(s,{children:new Map,pairs:[]});let a=r.children.get(s);if(a===void 0)return;n===t.length-1&&a.pairs.push(e),r=a}}function At(i){let e=i.replace(/\\/g,"/").replace(/\/+$/,""),t=e.lastIndexOf("/");return t>=0?e.slice(t+1):e}function Pt(i){return(i.replace(/\\/g,"/").replace(/\/+$/,"").split("/").filter(Boolean).at(-1)??"").replace(/\.md$/i,"")}function Rt(i,e){let t=At(i.sourcePath);if(!e)return t;let r=Pt(i.commentrayPath);return r!==""&&r!==t?`${t} \xB7 ${r}`:t}function et(i){let e=[...i.children.keys()].sort((r,n)=>r.localeCompare(n));if(e.length===0)return"";let t=[];for(let r of e){let n=i.children.get(r);if(n!==void 0){if(n.children.size>0){let s=et(n);t.push(`<li><div class="tree-dir">${I(r)}</div>${s}</li>`)}if(n.pairs.length>0){let s=n.pairs.length>1;for(let a of n.pairs){let o=I(Rt(a,s)),c=I(`${a.sourcePath} \u2014 open companion on GitHub`);t.push(`<li><div class="tree-file"><a class="tree-file-link" href="${I(a.commentrayOnGithub)}" target="_blank" rel="noopener noreferrer" title="${c}">${o}</a></div></li>`)}}}}return`<ul>${t.join("")}</ul>`}function kt(i,e){if(e.length===0){i.innerHTML='<p class="nav-rail__doc-hub-hint" role="status">No documented pairs in this export.</p>';return}let t={children:new Map,pairs:[]};for(let r of e)zt(t,r);i.innerHTML=et(t)}function Nt(i,e){let t=null,r=null;return async()=>t!==null?t:(r===null&&(r=(async()=>{if(e.length>0&&(t=Ze(e),t.length>0))return;if(i.length===0){t=[];return}let n=await fetch(i,{credentials:"same-origin"});if(!n.ok)throw new Error(`nav json ${String(n.status)}`);let s=await n.json();t=ke(s.documentedPairs)})()),await r,t??[])}function Ft(){let i=document.getElementById("documented-files-hub"),e=document.getElementById("documented-files-tree"),t=document.getElementById("shell");if(!(i instanceof HTMLDetailsElement)||!(e instanceof HTMLElement))return;let r=e,n=i.getAttribute("data-nav-json-url")?.trim()??"",s=t?.getAttribute("data-documented-pairs-b64")?.trim()??"";if(n.length===0&&s.length===0)return;let a=Nt(n,s);async function o(){try{let c=await a();kt(r,c)}catch{r.innerHTML='<p class="nav-rail__doc-hub-hint" role="alert">Could not load the file list.</p>'}}i.addEventListener("toggle",()=>{i.open&&o()})}function Dt(i,e,t,r,n){let s=!1,a=n;function o(h){if(!s)return;let l=e.getBoundingClientRect(),u=h.clientX-l.left,m=Je(u/l.width*100,15,85);a=m,t.style.flex=`0 0 ${m}%`}function c(){s=!1,window.removeEventListener("mousemove",o),window.removeEventListener("mouseup",c),document.body.style.cursor="",document.body.style.userSelect="",_(localStorage,i,String(a))}r.addEventListener("mousedown",h=>{h.preventDefault(),s=!0,document.body.style.cursor="col-resize",document.body.style.userSelect="none",window.addEventListener("mousemove",o),window.addEventListener("mouseup",c)})}var je="commentray.codeCommentrayStatic.splitPct",tt="commentray.codeCommentrayStatic.wrap";function Bt(i){let e=document.getElementById("wrap-lines");e&&_e(tt,i,e)}function Ot(i){let e=i?.textContent?.trim()??"";if(!e)return null;try{let t=JSON.parse(v(e));if(!t||!Array.isArray(t.angles)||t.angles.length<2)return null;for(let r of t.angles)if(typeof r.id!="string"||typeof r.docInnerHtmlB64!="string")return null;return t}catch{return null}}function qt(){let i=document.getElementById("doc-pane"),e=document.getElementById("gutter"),t=document.getElementById("wrap-lines"),r=document.getElementById("search-q"),n=document.getElementById("search-clear"),s=document.getElementById("search-results");if(!i||!e||!t||!r||!n||!s)return null;let a=document.getElementById("doc-pane-body"),o=a instanceof HTMLElement?a:i;return{docBody:a,docScrollEl:o,gutter:e,wrapCb:t,searchInput:r,searchClear:n,searchResults:s}}function $t(i){let{scope:e,rawCode:t,filePathLabel:r,hubNavRows:n,pathRowsForOrdering:s,rawMd:a,commentrayPathLabel:o}=i;if(e!=="commentray-and-paths")return Qe(e,t,a,r,o);if(n.length>0)return n;let c=s.length>0?s:Qe(e,t,a,r,o).filter(l=>l.kind==="path"),h=a.split(`
|
|
7
|
+
`).map((l,u)=>({kind:"md",line:u,text:l,spPath:r,crPath:o}));return[...c,...h]}function Qt(i,e,t,r){if(e!=="commentray-and-paths")return{documentedPairs:[],pathRowsForOrdering:[],pathBlobWide:""};let n=Ze(i.getAttribute("data-documented-pairs-b64")?.trim()??""),s=Ct(n),a=s.length>0?s.map(o=>o.text).join(`
|
|
8
|
+
`):[t,r].filter(o=>o.trim().length>0).join(`
|
|
9
|
+
`);return{documentedPairs:n,pathRowsForOrdering:s,pathBlobWide:a}}function Gt(i,e,t,r,n){i.length!==0&&(async()=>{try{let s=await fetch(i,{credentials:"same-origin"});if(!s.ok)return;let a=await s.json(),o=ke(a.documentedPairs);o.length>0&&(e.documentedPairs=o,t.documentedPairs=o);let c=Ht(a);if(c.length===0)return;e.hubNavRows=c,e.pathRowsForOrdering=c.filter(h=>h.kind==="path"),t.pathRowsForOrdering=e.pathRowsForOrdering,t.pathBlobWide=e.pathRowsForOrdering.map(h=>h.text).join(`
|
|
10
|
+
`),r(),n.value.trim().length>0&&n.dispatchEvent(new Event("input",{bubbles:!0}))}catch{}})()}function Ut(i){let{codePane:e,docScrollEl:t,docBody:r,shell:n,scrollLinks:s,multiPayload:a,mutable:o,rebuildSearcher:c,searchInput:h,searchResults:l}=i,u={current:s};if(a){Ue(e,t,()=>u.current);let m=document.getElementById("angle-select");m&&r&&m.addEventListener("change",()=>{let d=a.angles.find(y=>y.id===m.value);if(!d)return;r.innerHTML=v(d.docInnerHtmlB64),o.rawMd=v(d.rawMdB64),o.mdLines=o.rawMd.split(`
|
|
11
|
+
`),o.commentrayPathLabel=d.commentrayPathForSearch,c(),u.current=Xe(d.scrollBlockLinksB64),n.setAttribute("data-scroll-block-links-b64",d.scrollBlockLinksB64),n.setAttribute("data-search-commentray-path",d.commentrayPathForSearch);let p=document.getElementById("toolbar-commentray-github");p instanceof HTMLAnchorElement&&d.commentrayOnGithubUrl?.trim()&&(p.href=d.commentrayOnGithubUrl.trim()),h.value="",l.innerHTML="",l.hidden=!0});return}if(s.length>0){Ue(e,t,()=>s);return}Mt(e,t)}function jt(i,e){function t(){let r=/^commentray-md-line-(\d+)$/.exec(globalThis.location.hash.slice(1));if(!r?.[1])return;let n=Number.parseInt(r[1],10);Number.isFinite(n)&&Ke(i,n,e())}globalThis.addEventListener("hashchange",t),globalThis.requestAnimationFrame(()=>{globalThis.requestAnimationFrame(t)})}function Wt(i,e){let t=qt();if(!t)return;let{docBody:r,docScrollEl:n,gutter:s,wrapCb:a,searchInput:o,searchClear:c,searchResults:h}=t,{rawCodeB64:l,rawMdB64:u}=Be(i,e),m=v(l),d=v(u),p=Xe(i.getAttribute("data-scroll-block-links-b64")||""),{scope:y,filePathLabel:b,commentrayPathLabel:Ne}=ft(i),X=Qt(i,y,b,Ne),z={hubNavRows:[],documentedPairs:X.documentedPairs,pathRowsForOrdering:X.pathRowsForOrdering},x={rawMd:d,mdLines:d.split(`
|
|
12
|
+
`),commentrayPathLabel:Ne,searcher:Ge([]),pathBlobWide:X.pathBlobWide,pathRowsForOrdering:z.pathRowsForOrdering,documentedPairs:z.documentedPairs};function Y(){x.searcher=Ge($t({scope:y,rawCode:m,filePathLabel:b,hubNavRows:z.hubNavRows,pathRowsForOrdering:z.pathRowsForOrdering,rawMd:x.rawMd,commentrayPathLabel:x.commentrayPathLabel}))}Y(),bt({scope:y,filePathLabel:b,mutable:x,rawCode:m,searchInput:o,searchClear:c,searchResults:h,docScrollEl:n});let rt=i.getAttribute("data-nav-search-json-url")?.trim()??"";Gt(rt,z,x,Y,o);let Fe=parseFloat(Pe(localStorage,je)||"50"),De=Je(Number.isFinite(Fe)?Fe:50,15,85);e.style.flex=`0 0 ${De}%`,_e(tt,e,a),Dt(je,i,e,s,De);let nt=document.getElementById("commentray-multi-angle-b64"),it=Ot(nt);Ut({codePane:e,docScrollEl:n,docBody:r,shell:i,scrollLinks:p,multiPayload:it,mutable:x,rebuildSearcher:Y,searchInput:o,searchResults:h}),jt(n,()=>x.mdLines.length)}function We(){Ft();let i=document.getElementById("shell"),e=document.getElementById("code-pane");if(!i||!e)return;if((i.getAttribute("data-layout")||"dual")==="stretch"){Bt(e);return}Wt(i,e)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",We):We();})();
|