@commentray/render 0.0.9 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/block-stretch-layout.d.ts.map +1 -1
- package/dist/block-stretch-layout.js +2 -1
- package/dist/block-stretch-layout.js.map +1 -1
- package/dist/browse-page-slug.d.ts +6 -1
- package/dist/browse-page-slug.d.ts.map +1 -1
- package/dist/browse-page-slug.js +6 -1
- package/dist/browse-page-slug.js.map +1 -1
- package/dist/browse-pair-html-test-fixtures.d.ts +10 -0
- package/dist/browse-pair-html-test-fixtures.d.ts.map +1 -0
- package/dist/browse-pair-html-test-fixtures.js +19 -0
- package/dist/browse-pair-html-test-fixtures.js.map +1 -0
- package/dist/build-commentray-nav-search.d.ts +4 -4
- package/dist/build-commentray-nav-search.js +1 -1
- package/dist/code-browser-block-rays.d.ts +29 -0
- package/dist/code-browser-block-rays.d.ts.map +1 -1
- package/dist/code-browser-block-rays.js +120 -0
- package/dist/code-browser-block-rays.js.map +1 -1
- package/dist/code-browser-client.bundle.js +24 -11
- package/dist/code-browser-client.js +766 -116
- package/dist/code-browser-client.js.map +1 -1
- package/dist/code-browser-intro.css +187 -0
- package/dist/code-browser-pair-nav.d.ts +3 -3
- package/dist/code-browser-pair-nav.d.ts.map +1 -1
- package/dist/code-browser-pair-nav.js +25 -13
- package/dist/code-browser-pair-nav.js.map +1 -1
- package/dist/code-browser-wide-intro-controller.d.ts +4 -0
- package/dist/code-browser-wide-intro-controller.d.ts.map +1 -0
- package/dist/code-browser-wide-intro-controller.js +148 -0
- package/dist/code-browser-wide-intro-controller.js.map +1 -0
- package/dist/code-browser-wide-intro-layout.d.ts +3 -0
- package/dist/code-browser-wide-intro-layout.d.ts.map +1 -0
- package/dist/code-browser-wide-intro-layout.js +84 -0
- package/dist/code-browser-wide-intro-layout.js.map +1 -0
- package/dist/code-browser-wide-intro-steps.d.ts +11 -0
- package/dist/code-browser-wide-intro-steps.d.ts.map +1 -0
- package/dist/code-browser-wide-intro-steps.js +108 -0
- package/dist/code-browser-wide-intro-steps.js.map +1 -0
- package/dist/code-browser-wide-intro-ui.d.ts +14 -0
- package/dist/code-browser-wide-intro-ui.d.ts.map +1 -0
- package/dist/code-browser-wide-intro-ui.js +67 -0
- package/dist/code-browser-wide-intro-ui.js.map +1 -0
- package/dist/code-browser.d.ts +18 -4
- package/dist/code-browser.d.ts.map +1 -1
- package/dist/code-browser.js +506 -154
- package/dist/code-browser.js.map +1 -1
- package/dist/commentray-anchor-viewport-probe.d.ts +9 -0
- package/dist/commentray-anchor-viewport-probe.d.ts.map +1 -0
- package/dist/commentray-anchor-viewport-probe.js +13 -0
- package/dist/commentray-anchor-viewport-probe.js.map +1 -0
- package/dist/commentray-preview-html.d.ts +13 -0
- package/dist/commentray-preview-html.d.ts.map +1 -0
- package/dist/commentray-preview-html.js +12 -0
- package/dist/commentray-preview-html.js.map +1 -0
- package/dist/companion-markdown-preview-entry.d.ts +7 -0
- package/dist/companion-markdown-preview-entry.d.ts.map +1 -0
- package/dist/companion-markdown-preview-entry.js +6 -0
- package/dist/companion-markdown-preview-entry.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/inject-md-line-anchors.d.ts +18 -0
- package/dist/inject-md-line-anchors.d.ts.map +1 -0
- package/dist/inject-md-line-anchors.js +250 -0
- package/dist/inject-md-line-anchors.js.map +1 -0
- package/dist/inline-favicon.js +15 -15
- package/dist/markdown-pipeline.d.ts +5 -0
- package/dist/markdown-pipeline.d.ts.map +1 -1
- package/dist/markdown-pipeline.js +47 -1
- package/dist/markdown-pipeline.js.map +1 -1
- package/dist/side-by-side-layout-css.d.ts +1 -1
- package/dist/side-by-side-layout-css.d.ts.map +1 -1
- package/dist/side-by-side-layout-css.js +48 -0
- package/dist/side-by-side-layout-css.js.map +1 -1
- package/package.json +8 -3
- package/dist/code-browser-client.d.ts +0 -2
- package/dist/side-by-side-layout.css +0 -58
- package/dist/side-by-side-layout.embedded.d.ts +0 -3
- package/dist/side-by-side-layout.embedded.d.ts.map +0 -1
- package/dist/side-by-side-layout.embedded.js +0 -3
- package/dist/side-by-side-layout.embedded.js.map +0 -1
|
@@ -20,11 +20,14 @@ export function siteRootPathnameFromPathname(pathname) {
|
|
|
20
20
|
return "/";
|
|
21
21
|
return noFile.replace(/\/+$/, "") || "/";
|
|
22
22
|
}
|
|
23
|
-
/** `./browse/<
|
|
24
|
-
const
|
|
23
|
+
/** Flat canonical page: `./browse/<hash>.html` (opaque slug, one path segment). */
|
|
24
|
+
const STATIC_BROWSE_FLAT = /^(?:\.\/)?browse\/([^/?#]+\.html)$/i;
|
|
25
|
+
/** Human-readable shim: `./browse/<encoded/source/segments>/index.html` (see `browse-pair-static-url.ts`). */
|
|
26
|
+
const STATIC_BROWSE_INDEXED = /^(?:\.\/)?browse\/(.+)\/index\.html$/i;
|
|
25
27
|
/** True when `href` is hub-root-relative static browse (not same-dir `./other.html`). */
|
|
26
28
|
export function isHubRelativeStaticBrowseHref(href) {
|
|
27
|
-
|
|
29
|
+
const t = href.trim();
|
|
30
|
+
return STATIC_BROWSE_FLAT.test(t) || STATIC_BROWSE_INDEXED.test(t);
|
|
28
31
|
}
|
|
29
32
|
/**
|
|
30
33
|
* Resolves `staticBrowseUrl` from nav JSON (typically `./browse/<slug>.html`) to an absolute href.
|
|
@@ -33,26 +36,35 @@ export function resolveStaticBrowseHref(relativeBrowse, pathname, origin) {
|
|
|
33
36
|
const r = relativeBrowse.trim();
|
|
34
37
|
if (r.startsWith("/"))
|
|
35
38
|
return `${origin}${r}`;
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
const path = root === "/" ? `/browse/${
|
|
39
|
+
const root = siteRootPathnameFromPathname(pathname);
|
|
40
|
+
const mFlat = STATIC_BROWSE_FLAT.exec(r);
|
|
41
|
+
if (mFlat?.[1]) {
|
|
42
|
+
const path = root === "/" ? `/browse/${mFlat[1]}` : `${root}/browse/${mFlat[1]}`;
|
|
43
|
+
return `${origin}${path}`;
|
|
44
|
+
}
|
|
45
|
+
const mIdx = STATIC_BROWSE_INDEXED.exec(r);
|
|
46
|
+
if (mIdx?.[1]) {
|
|
47
|
+
const inner = mIdx[1];
|
|
48
|
+
const path = root === "/" ? `/browse/${inner}/index.html` : `${root}/browse/${inner}/index.html`;
|
|
40
49
|
return `${origin}${path}`;
|
|
41
50
|
}
|
|
42
51
|
return new URL(r, `${origin}${pathname}`).href;
|
|
43
52
|
}
|
|
44
53
|
/**
|
|
45
|
-
* Value for `#shell` `data-commentray-pair-browse-href`: keep portable `./browse
|
|
46
|
-
* when the static site
|
|
47
|
-
*
|
|
54
|
+
* Value for `#shell` `data-commentray-pair-browse-href`: keep portable `./browse/…` hub-relative
|
|
55
|
+
* URLs when the static site emits them (`*.html` or `…/index.html`); otherwise resolve like
|
|
56
|
+
* {@link resolveStaticBrowseHref} for anchors and odd relative forms.
|
|
48
57
|
*/
|
|
49
58
|
export function staticBrowseHrefForShellDataAttribute(staticBrowseUrl, pathname, origin) {
|
|
50
59
|
const r = staticBrowseUrl.trim();
|
|
51
60
|
if (r.length === 0)
|
|
52
61
|
return "";
|
|
53
|
-
const
|
|
54
|
-
if (
|
|
55
|
-
return `./browse/${
|
|
62
|
+
const flat = STATIC_BROWSE_FLAT.exec(r);
|
|
63
|
+
if (flat?.[1])
|
|
64
|
+
return `./browse/${flat[1]}`;
|
|
65
|
+
const indexed = STATIC_BROWSE_INDEXED.exec(r);
|
|
66
|
+
if (indexed?.[1])
|
|
67
|
+
return `./browse/${indexed[1]}/index.html`;
|
|
56
68
|
return resolveStaticBrowseHref(r, pathname, origin);
|
|
57
69
|
}
|
|
58
70
|
export function findDocumentedPair(pairs, commentrayPath, sourcePath) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-browser-pair-nav.js","sourceRoot":"","sources":["../src/code-browser-pair-nav.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,UAAU,aAAa,CAAC,CAAS;IACrC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAAC,QAAgB;IAC3D,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACzC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC1D,OAAO,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;IACtC,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAChD,IAAI,MAAM,KAAK,EAAE,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,GAAG,CAAC;IAChD,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;AAC3C,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"code-browser-pair-nav.js","sourceRoot":"","sources":["../src/code-browser-pair-nav.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-browser-wide-intro-controller.d.ts","sourceRoot":"","sources":["../src/code-browser-wide-intro-controller.ts"],"names":[],"mappings":"AA0GA,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,WAAW,EAClB,gBAAgB,EAAE,MAAM,OAAO,EAC/B,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GACzB,IAAI,CAsEN"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { renderWideIntroArrows, repositionWideIntroBubble, } from "./code-browser-wide-intro-layout.js";
|
|
2
|
+
import { wideIntroStepsForShell, wideIntroVisibleTargetsForCurrentStep, } from "./code-browser-wide-intro-steps.js";
|
|
3
|
+
import { clearOpenWideModeIntroTourUi, createWideIntroElements, } from "./code-browser-wide-intro-ui.js";
|
|
4
|
+
import { readWebStorageItem, writeWebStorageItem } from "./code-browser-web-storage.js";
|
|
5
|
+
const STORAGE_WIDE_MODE_INTRO_DONE = "commentray.codeCommentrayStatic.wideModeIntro.v1";
|
|
6
|
+
function refreshWideIntroSteps(runtime) {
|
|
7
|
+
const nextMode = runtime.isNarrowViewport() ? "narrow" : "wide";
|
|
8
|
+
if (nextMode === runtime.viewportMode)
|
|
9
|
+
return;
|
|
10
|
+
runtime.viewportMode = nextMode;
|
|
11
|
+
runtime.steps = wideIntroStepsForShell(runtime.shell, nextMode === "narrow");
|
|
12
|
+
}
|
|
13
|
+
function repositionWideIntro(runtime) {
|
|
14
|
+
const { bubble, arrowLayer } = runtime.elements;
|
|
15
|
+
refreshWideIntroSteps(runtime);
|
|
16
|
+
const targets = wideIntroVisibleTargetsForCurrentStep(runtime.steps, runtime.current);
|
|
17
|
+
const primary = targets[0];
|
|
18
|
+
if (!primary) {
|
|
19
|
+
bubble.dataset.side = "none";
|
|
20
|
+
bubble.style.top = "12px";
|
|
21
|
+
bubble.style.left = "12px";
|
|
22
|
+
arrowLayer.replaceChildren();
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
repositionWideIntroBubble(bubble, primary);
|
|
26
|
+
renderWideIntroArrows(bubble, arrowLayer, targets);
|
|
27
|
+
}
|
|
28
|
+
function advanceWideIntroToRenderableStep(runtime) {
|
|
29
|
+
refreshWideIntroSteps(runtime);
|
|
30
|
+
while (runtime.current < runtime.steps.length) {
|
|
31
|
+
const step = runtime.steps[runtime.current];
|
|
32
|
+
if (!step)
|
|
33
|
+
break;
|
|
34
|
+
const visibleTargets = wideIntroVisibleTargetsForCurrentStep(runtime.steps, runtime.current);
|
|
35
|
+
const hasFallbackAction = typeof step.fallbackAction === "function";
|
|
36
|
+
if (visibleTargets.length > 0 || hasFallbackAction)
|
|
37
|
+
break;
|
|
38
|
+
runtime.current++;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function syncWideIntroStepActionUi(runtime, step, targets) {
|
|
42
|
+
const { stepActionBtn } = runtime.elements;
|
|
43
|
+
if (targets.length === 0 &&
|
|
44
|
+
typeof step.fallbackAction === "function" &&
|
|
45
|
+
step.fallbackActionLabel) {
|
|
46
|
+
stepActionBtn.hidden = false;
|
|
47
|
+
stepActionBtn.textContent = step.fallbackActionLabel;
|
|
48
|
+
stepActionBtn.disabled = false;
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
stepActionBtn.hidden = true;
|
|
52
|
+
stepActionBtn.textContent = "";
|
|
53
|
+
stepActionBtn.disabled = true;
|
|
54
|
+
}
|
|
55
|
+
function renderWideIntro(runtime, closeTour) {
|
|
56
|
+
const { titleEl, bodyEl, progressEl, backBtn, nextBtn } = runtime.elements;
|
|
57
|
+
advanceWideIntroToRenderableStep(runtime);
|
|
58
|
+
if (runtime.current >= runtime.steps.length) {
|
|
59
|
+
closeTour();
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const step = runtime.steps[runtime.current];
|
|
63
|
+
if (!step)
|
|
64
|
+
return;
|
|
65
|
+
const targets = wideIntroVisibleTargetsForCurrentStep(runtime.steps, runtime.current);
|
|
66
|
+
for (const el of runtime.highlighted)
|
|
67
|
+
el.classList.remove("commentray-wide-intro-target");
|
|
68
|
+
runtime.highlighted = targets;
|
|
69
|
+
for (const el of runtime.highlighted)
|
|
70
|
+
el.classList.add("commentray-wide-intro-target");
|
|
71
|
+
titleEl.textContent = step.title;
|
|
72
|
+
bodyEl.textContent = step.body;
|
|
73
|
+
syncWideIntroStepActionUi(runtime, step, targets);
|
|
74
|
+
progressEl.textContent = `${String(runtime.current + 1)} / ${String(runtime.steps.length)}`;
|
|
75
|
+
backBtn.disabled = runtime.current === 0;
|
|
76
|
+
nextBtn.textContent = runtime.current === runtime.steps.length - 1 ? "Done" : "Next";
|
|
77
|
+
repositionWideIntro(runtime);
|
|
78
|
+
}
|
|
79
|
+
export function wireWideModeIntroTour(shell, isNarrowViewport, opts) {
|
|
80
|
+
if (!opts?.force && readWebStorageItem(localStorage, STORAGE_WIDE_MODE_INTRO_DONE) === "1")
|
|
81
|
+
return;
|
|
82
|
+
clearOpenWideModeIntroTourUi();
|
|
83
|
+
const elements = createWideIntroElements();
|
|
84
|
+
if (!elements)
|
|
85
|
+
return;
|
|
86
|
+
const runtime = {
|
|
87
|
+
shell,
|
|
88
|
+
steps: wideIntroStepsForShell(shell, isNarrowViewport()),
|
|
89
|
+
viewportMode: isNarrowViewport() ? "narrow" : "wide",
|
|
90
|
+
current: 0,
|
|
91
|
+
highlighted: [],
|
|
92
|
+
elements,
|
|
93
|
+
isNarrowViewport,
|
|
94
|
+
};
|
|
95
|
+
const { bubble, arrowLayer, stepActionBtn, backBtn, nextBtn, skipBtn } = runtime.elements;
|
|
96
|
+
const closeTour = () => {
|
|
97
|
+
for (const el of runtime.highlighted)
|
|
98
|
+
el.classList.remove("commentray-wide-intro-target");
|
|
99
|
+
runtime.highlighted = [];
|
|
100
|
+
arrowLayer.remove();
|
|
101
|
+
bubble.remove();
|
|
102
|
+
globalThis.removeEventListener("resize", onResize);
|
|
103
|
+
globalThis.removeEventListener("scroll", reposition, true);
|
|
104
|
+
document.removeEventListener("keydown", onKeyDown, true);
|
|
105
|
+
writeWebStorageItem(localStorage, STORAGE_WIDE_MODE_INTRO_DONE, "1");
|
|
106
|
+
};
|
|
107
|
+
const reposition = () => {
|
|
108
|
+
repositionWideIntro(runtime);
|
|
109
|
+
};
|
|
110
|
+
const render = () => {
|
|
111
|
+
renderWideIntro(runtime, closeTour);
|
|
112
|
+
};
|
|
113
|
+
const onResize = () => {
|
|
114
|
+
render();
|
|
115
|
+
};
|
|
116
|
+
const onKeyDown = (ev) => {
|
|
117
|
+
if (ev.key !== "Escape")
|
|
118
|
+
return;
|
|
119
|
+
ev.preventDefault();
|
|
120
|
+
closeTour();
|
|
121
|
+
};
|
|
122
|
+
backBtn.addEventListener("click", () => {
|
|
123
|
+
if (runtime.current > 0)
|
|
124
|
+
runtime.current--;
|
|
125
|
+
render();
|
|
126
|
+
});
|
|
127
|
+
stepActionBtn.addEventListener("click", () => {
|
|
128
|
+
const step = runtime.steps[runtime.current];
|
|
129
|
+
if (!step || typeof step.fallbackAction !== "function")
|
|
130
|
+
return;
|
|
131
|
+
step.fallbackAction();
|
|
132
|
+
render();
|
|
133
|
+
});
|
|
134
|
+
nextBtn.addEventListener("click", () => {
|
|
135
|
+
if (runtime.current >= runtime.steps.length - 1) {
|
|
136
|
+
closeTour();
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
runtime.current++;
|
|
140
|
+
render();
|
|
141
|
+
});
|
|
142
|
+
skipBtn.addEventListener("click", closeTour);
|
|
143
|
+
globalThis.addEventListener("resize", onResize);
|
|
144
|
+
globalThis.addEventListener("scroll", reposition, true);
|
|
145
|
+
document.addEventListener("keydown", onKeyDown, true);
|
|
146
|
+
render();
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=code-browser-wide-intro-controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-browser-wide-intro-controller.js","sourceRoot":"","sources":["../src/code-browser-wide-intro-controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare function repositionWideIntroBubble(bubble: HTMLElement, target: HTMLElement): void;
|
|
2
|
+
export declare function renderWideIntroArrows(bubble: HTMLElement, arrowLayer: HTMLElement, targets: HTMLElement[]): void;
|
|
3
|
+
//# sourceMappingURL=code-browser-wide-intro-layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-browser-wide-intro-layout.d.ts","sourceRoot":"","sources":["../src/code-browser-wide-intro-layout.ts"],"names":[],"mappings":"AAIA,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAkBxF;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,WAAW,EACnB,UAAU,EAAE,WAAW,EACvB,OAAO,EAAE,WAAW,EAAE,GACrB,IAAI,CAsEN"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
function clamp(n, lo, hi) {
|
|
2
|
+
return Math.max(lo, Math.min(hi, n));
|
|
3
|
+
}
|
|
4
|
+
export function repositionWideIntroBubble(bubble, target) {
|
|
5
|
+
const rect = target.getBoundingClientRect();
|
|
6
|
+
const vw = globalThis.innerWidth;
|
|
7
|
+
const vh = globalThis.innerHeight;
|
|
8
|
+
const bubbleRect = bubble.getBoundingClientRect();
|
|
9
|
+
const bubbleWidth = bubbleRect.width > 0 ? bubbleRect.width : 340;
|
|
10
|
+
const bubbleHeight = bubbleRect.height > 0 ? bubbleRect.height : 160;
|
|
11
|
+
const margin = 8;
|
|
12
|
+
const canPlaceBelow = rect.bottom + 12 + bubbleHeight <= vh - margin;
|
|
13
|
+
const top = canPlaceBelow
|
|
14
|
+
? Math.max(margin, rect.bottom + 12)
|
|
15
|
+
: Math.max(margin, rect.top - bubbleHeight - 12);
|
|
16
|
+
const left = clamp(rect.left, margin, vw - bubbleWidth - margin);
|
|
17
|
+
bubble.style.top = `${String(Math.round(top))}px`;
|
|
18
|
+
bubble.style.left = `${String(Math.round(left))}px`;
|
|
19
|
+
bubble.dataset.side = canPlaceBelow ? "below" : "above";
|
|
20
|
+
const pointerLeft = clamp(rect.left + rect.width / 2 - left - 8, 10, bubbleWidth - 22);
|
|
21
|
+
bubble.style.setProperty("--pointer-left", `${String(Math.round(pointerLeft))}px`);
|
|
22
|
+
}
|
|
23
|
+
export function renderWideIntroArrows(bubble, arrowLayer, targets) {
|
|
24
|
+
arrowLayer.replaceChildren();
|
|
25
|
+
if (targets.length === 0)
|
|
26
|
+
return;
|
|
27
|
+
const bubbleRect = bubble.getBoundingClientRect();
|
|
28
|
+
const bubbleCenterX = bubbleRect.left + bubbleRect.width / 2;
|
|
29
|
+
const bubbleCenterY = bubbleRect.top + bubbleRect.height / 2;
|
|
30
|
+
const edgePadding = 12;
|
|
31
|
+
const sideInset = 8;
|
|
32
|
+
const spread = 12;
|
|
33
|
+
const side = bubble.dataset.side;
|
|
34
|
+
const pointerLeftRaw = Number.parseFloat(bubble.style.getPropertyValue("--pointer-left"));
|
|
35
|
+
const pointerCenterX = Number.isFinite(pointerLeftRaw)
|
|
36
|
+
? bubbleRect.left + pointerLeftRaw + 8
|
|
37
|
+
: bubbleCenterX;
|
|
38
|
+
const pointerTipY = side === "below"
|
|
39
|
+
? bubbleRect.top - sideInset
|
|
40
|
+
: side === "above"
|
|
41
|
+
? bubbleRect.bottom + sideInset
|
|
42
|
+
: bubbleCenterY;
|
|
43
|
+
for (const [index, target] of targets.entries()) {
|
|
44
|
+
const rect = target.getBoundingClientRect();
|
|
45
|
+
// Point to the middle of each target element.
|
|
46
|
+
const endX = rect.left + rect.width / 2;
|
|
47
|
+
const endY = rect.top + rect.height / 2;
|
|
48
|
+
const toTargetX = endX - bubbleCenterX;
|
|
49
|
+
const toTargetY = endY - bubbleCenterY;
|
|
50
|
+
const horizontalDominant = Math.abs(toTargetX) >= Math.abs(toTargetY);
|
|
51
|
+
const spreadOffset = index - (targets.length - 1) / 2;
|
|
52
|
+
let startX;
|
|
53
|
+
let startY;
|
|
54
|
+
if (targets.length === 1 && (side === "below" || side === "above")) {
|
|
55
|
+
// Single-target tours look cleaner when the arrow starts from the bubble pointer notch.
|
|
56
|
+
startX = pointerCenterX;
|
|
57
|
+
startY = pointerTipY;
|
|
58
|
+
}
|
|
59
|
+
else if (horizontalDominant) {
|
|
60
|
+
startX = toTargetX >= 0 ? bubbleRect.right + sideInset : bubbleRect.left - sideInset;
|
|
61
|
+
startY = clamp(endY + spreadOffset * spread, bubbleRect.top + edgePadding, bubbleRect.bottom - edgePadding);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
startY = toTargetY >= 0 ? bubbleRect.bottom + sideInset : bubbleRect.top - sideInset;
|
|
65
|
+
startX = clamp(endX + spreadOffset * spread, bubbleRect.left + edgePadding, bubbleRect.right - edgePadding);
|
|
66
|
+
}
|
|
67
|
+
const dx = endX - startX;
|
|
68
|
+
const dy = endY - startY;
|
|
69
|
+
const length = Math.hypot(dx, dy);
|
|
70
|
+
if (!Number.isFinite(length) || length < 12)
|
|
71
|
+
continue;
|
|
72
|
+
const arrow = document.createElement("span");
|
|
73
|
+
arrow.className = "commentray-wide-intro-arrow";
|
|
74
|
+
arrow.style.left = `${String(Math.round(startX))}px`;
|
|
75
|
+
arrow.style.top = `${String(Math.round(startY))}px`;
|
|
76
|
+
arrow.style.width = `${String(Math.round(length))}px`;
|
|
77
|
+
arrow.style.setProperty("--wide-intro-arrow-angle", `${String(Math.atan2(dy, dx))}rad`);
|
|
78
|
+
const head = document.createElement("span");
|
|
79
|
+
head.className = "commentray-wide-intro-arrow-head";
|
|
80
|
+
arrow.appendChild(head);
|
|
81
|
+
arrowLayer.appendChild(arrow);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=code-browser-wide-intro-layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-browser-wide-intro-layout.js","sourceRoot":"","sources":["../src/code-browser-wide-intro-layout.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type WideIntroStep = {
|
|
2
|
+
targetSelector?: string;
|
|
3
|
+
targetSelectors?: string[];
|
|
4
|
+
title: string;
|
|
5
|
+
body: string;
|
|
6
|
+
fallbackActionLabel?: string;
|
|
7
|
+
fallbackAction?: () => void;
|
|
8
|
+
};
|
|
9
|
+
export declare function wideIntroStepsForShell(shell: HTMLElement, isNarrowViewport: boolean): WideIntroStep[];
|
|
10
|
+
export declare function wideIntroVisibleTargetsForCurrentStep(steps: WideIntroStep[], current: number): HTMLElement[];
|
|
11
|
+
//# sourceMappingURL=code-browser-wide-intro-steps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-browser-wide-intro-steps.d.ts","sourceRoot":"","sources":["../src/code-browser-wide-intro-steps.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;CAC7B,CAAC;AAEF,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,WAAW,EAClB,gBAAgB,EAAE,OAAO,GACxB,aAAa,EAAE,CA2EjB;AA8BD,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,aAAa,EAAE,EACtB,OAAO,EAAE,MAAM,GACd,WAAW,EAAE,CAIf"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
export function wideIntroStepsForShell(shell, isNarrowViewport) {
|
|
2
|
+
const introTargetSelector = isNarrowViewport ? "#mobile-pane-flip" : "#shell";
|
|
3
|
+
const shellSelector = shell.id.trim().length > 0 && typeof globalThis.CSS?.escape === "function"
|
|
4
|
+
? `#${globalThis.CSS.escape(shell.id)}`
|
|
5
|
+
: "#shell";
|
|
6
|
+
const shellOrIntroTargetSelector = introTargetSelector === "#shell" ? shellSelector : introTargetSelector;
|
|
7
|
+
return [
|
|
8
|
+
{
|
|
9
|
+
targetSelectors: isNarrowViewport
|
|
10
|
+
? [shellOrIntroTargetSelector]
|
|
11
|
+
: ["#code-pane", "#doc-pane"],
|
|
12
|
+
title: "Welcome",
|
|
13
|
+
body: "Welcome to commentray, a system to create and view commentaries next to the source tree. Angles are different aspects of these commentaries, so switch between them and keep scrolling while both panes stay aligned.",
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
targetSelectors: isNarrowViewport
|
|
17
|
+
? [shellOrIntroTargetSelector]
|
|
18
|
+
: ["#code-pane", "#doc-pane"],
|
|
19
|
+
title: "Two views",
|
|
20
|
+
body: isNarrowViewport
|
|
21
|
+
? "You are in narrow view now. Use the pane flip to switch code and commentary. Wide view shows both panes side by side."
|
|
22
|
+
: "You are in wide view now. It shows code and commentary side by side. Narrow view uses one pane and a flip control.",
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
targetSelectors: isNarrowViewport
|
|
26
|
+
? ["#mobile-pane-flip", "#doc-pane"]
|
|
27
|
+
: ["#code-pane", "#doc-pane"],
|
|
28
|
+
title: isNarrowViewport ? "Scroll and toggle" : "Scroll both panes",
|
|
29
|
+
body: isNarrowViewport
|
|
30
|
+
? "Try scrolling commentary, then use the pane flip to switch to source and keep exploring."
|
|
31
|
+
: "Try scrolling in either pane. Source and commentary stay aligned while you read side by side.",
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
targetSelector: "#search-q",
|
|
35
|
+
title: "Search quickly",
|
|
36
|
+
body: "Use this search input to jump to documented source lines and markdown snippets.",
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
targetSelector: "#angle-select",
|
|
40
|
+
title: "Angle switch",
|
|
41
|
+
body: "Change the Commentray angle to view a different narrative for this same source file.",
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
targetSelector: "#source-markdown-pane-flip",
|
|
45
|
+
title: "Source view mode",
|
|
46
|
+
body: "Toggle between raw source and rendered markdown in the source pane.",
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
targetSelector: "#wrap-lines",
|
|
50
|
+
title: "Readability controls",
|
|
51
|
+
body: "Wrap lines to reduce horizontal scrolling in both source and commentary panes.",
|
|
52
|
+
fallbackActionLabel: "Switch to markdown source",
|
|
53
|
+
fallbackAction: () => {
|
|
54
|
+
const sourceModeFlip = document.getElementById("source-markdown-pane-flip");
|
|
55
|
+
if (sourceModeFlip instanceof HTMLButtonElement)
|
|
56
|
+
sourceModeFlip.click();
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
targetSelector: "#commentray-theme-trigger",
|
|
61
|
+
title: "Appearance",
|
|
62
|
+
body: "Change theme mode from this trigger (menu on left-click, quick cycle on right-click).",
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
targetSelector: "#commentray-share-link",
|
|
66
|
+
title: "Share this view",
|
|
67
|
+
body: "Use this link button to copy a shareable permalink to the exact page and state you are viewing.",
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
targetSelector: "#commentray-help-tour",
|
|
71
|
+
title: "Need a refresher?",
|
|
72
|
+
body: "You can always go back to this tutorial via the help button.",
|
|
73
|
+
},
|
|
74
|
+
];
|
|
75
|
+
}
|
|
76
|
+
function wideIntroTargetsForCurrentStep(steps, current) {
|
|
77
|
+
const step = steps[current];
|
|
78
|
+
if (!step)
|
|
79
|
+
return [];
|
|
80
|
+
const selectors = Array.isArray(step.targetSelectors) && step.targetSelectors.length > 0
|
|
81
|
+
? step.targetSelectors
|
|
82
|
+
: step.targetSelector
|
|
83
|
+
? [step.targetSelector]
|
|
84
|
+
: [];
|
|
85
|
+
const targets = [];
|
|
86
|
+
const seen = new Set();
|
|
87
|
+
for (const selector of selectors) {
|
|
88
|
+
const found = document.querySelector(selector);
|
|
89
|
+
if (!(found instanceof HTMLElement) || seen.has(found))
|
|
90
|
+
continue;
|
|
91
|
+
seen.add(found);
|
|
92
|
+
targets.push(found);
|
|
93
|
+
}
|
|
94
|
+
return targets;
|
|
95
|
+
}
|
|
96
|
+
function isWideIntroTargetVisible(target) {
|
|
97
|
+
if (target.hidden)
|
|
98
|
+
return false;
|
|
99
|
+
const style = globalThis.getComputedStyle(target);
|
|
100
|
+
if (style.display === "none" || style.visibility === "hidden")
|
|
101
|
+
return false;
|
|
102
|
+
const rect = target.getBoundingClientRect();
|
|
103
|
+
return rect.width > 0 && rect.height > 0;
|
|
104
|
+
}
|
|
105
|
+
export function wideIntroVisibleTargetsForCurrentStep(steps, current) {
|
|
106
|
+
return wideIntroTargetsForCurrentStep(steps, current).filter((target) => isWideIntroTargetVisible(target));
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=code-browser-wide-intro-steps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-browser-wide-intro-steps.js","sourceRoot":"","sources":["../src/code-browser-wide-intro-steps.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type WideIntroElements = {
|
|
2
|
+
bubble: HTMLElement;
|
|
3
|
+
arrowLayer: HTMLElement;
|
|
4
|
+
titleEl: HTMLElement;
|
|
5
|
+
bodyEl: HTMLElement;
|
|
6
|
+
stepActionBtn: HTMLButtonElement;
|
|
7
|
+
progressEl: HTMLElement;
|
|
8
|
+
backBtn: HTMLButtonElement;
|
|
9
|
+
nextBtn: HTMLButtonElement;
|
|
10
|
+
skipBtn: HTMLButtonElement;
|
|
11
|
+
};
|
|
12
|
+
export declare function clearOpenWideModeIntroTourUi(): void;
|
|
13
|
+
export declare function createWideIntroElements(): WideIntroElements | null;
|
|
14
|
+
//# sourceMappingURL=code-browser-wide-intro-ui.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-browser-wide-intro-ui.d.ts","sourceRoot":"","sources":["../src/code-browser-wide-intro-ui.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,WAAW,CAAC;IACxB,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,WAAW,CAAC;IACpB,aAAa,EAAE,iBAAiB,CAAC;IACjC,UAAU,EAAE,WAAW,CAAC;IACxB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,OAAO,EAAE,iBAAiB,CAAC;CAC5B,CAAC;AAEF,wBAAgB,4BAA4B,IAAI,IAAI,CAQnD;AAED,wBAAgB,uBAAuB,IAAI,iBAAiB,GAAG,IAAI,CAyDlE"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export function clearOpenWideModeIntroTourUi() {
|
|
2
|
+
for (const el of Array.from(document.querySelectorAll(".commentray-wide-intro-target"))) {
|
|
3
|
+
if (el instanceof HTMLElement)
|
|
4
|
+
el.classList.remove("commentray-wide-intro-target");
|
|
5
|
+
}
|
|
6
|
+
const open = document.getElementById("commentray-wide-intro");
|
|
7
|
+
if (open instanceof HTMLElement)
|
|
8
|
+
open.remove();
|
|
9
|
+
const arrows = document.getElementById("commentray-wide-intro-arrows");
|
|
10
|
+
if (arrows instanceof HTMLElement)
|
|
11
|
+
arrows.remove();
|
|
12
|
+
}
|
|
13
|
+
export function createWideIntroElements() {
|
|
14
|
+
const arrowLayer = document.createElement("div");
|
|
15
|
+
arrowLayer.id = "commentray-wide-intro-arrows";
|
|
16
|
+
arrowLayer.setAttribute("aria-hidden", "true");
|
|
17
|
+
document.body.appendChild(arrowLayer);
|
|
18
|
+
const bubble = document.createElement("section");
|
|
19
|
+
bubble.id = "commentray-wide-intro";
|
|
20
|
+
bubble.setAttribute("role", "dialog");
|
|
21
|
+
bubble.setAttribute("aria-live", "polite");
|
|
22
|
+
bubble.innerHTML = `
|
|
23
|
+
<span class="commentray-wide-intro-pointer" aria-hidden="true"></span>
|
|
24
|
+
<p class="commentray-wide-intro-title"></p>
|
|
25
|
+
<p class="commentray-wide-intro-body"></p>
|
|
26
|
+
<button type="button" class="commentray-wide-intro-step-action" hidden></button>
|
|
27
|
+
<div class="commentray-wide-intro-footer">
|
|
28
|
+
<span class="commentray-wide-intro-progress"></span>
|
|
29
|
+
<div class="commentray-wide-intro-actions">
|
|
30
|
+
<button type="button" data-wide-intro="back">Back</button>
|
|
31
|
+
<button type="button" data-wide-intro="next">Next</button>
|
|
32
|
+
<button type="button" data-wide-intro="skip">Skip</button>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
`;
|
|
36
|
+
document.body.appendChild(bubble);
|
|
37
|
+
const titleEl = bubble.querySelector(".commentray-wide-intro-title");
|
|
38
|
+
const bodyEl = bubble.querySelector(".commentray-wide-intro-body");
|
|
39
|
+
const stepActionBtn = bubble.querySelector(".commentray-wide-intro-step-action");
|
|
40
|
+
const progressEl = bubble.querySelector(".commentray-wide-intro-progress");
|
|
41
|
+
const backBtn = bubble.querySelector('button[data-wide-intro="back"]');
|
|
42
|
+
const nextBtn = bubble.querySelector('button[data-wide-intro="next"]');
|
|
43
|
+
const skipBtn = bubble.querySelector('button[data-wide-intro="skip"]');
|
|
44
|
+
if (!(titleEl instanceof HTMLElement) ||
|
|
45
|
+
!(bodyEl instanceof HTMLElement) ||
|
|
46
|
+
!(stepActionBtn instanceof HTMLButtonElement) ||
|
|
47
|
+
!(progressEl instanceof HTMLElement) ||
|
|
48
|
+
!(backBtn instanceof HTMLButtonElement) ||
|
|
49
|
+
!(nextBtn instanceof HTMLButtonElement) ||
|
|
50
|
+
!(skipBtn instanceof HTMLButtonElement)) {
|
|
51
|
+
arrowLayer.remove();
|
|
52
|
+
bubble.remove();
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
bubble,
|
|
57
|
+
arrowLayer,
|
|
58
|
+
titleEl,
|
|
59
|
+
bodyEl,
|
|
60
|
+
stepActionBtn,
|
|
61
|
+
progressEl,
|
|
62
|
+
backBtn,
|
|
63
|
+
nextBtn,
|
|
64
|
+
skipBtn,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=code-browser-wide-intro-ui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-browser-wide-intro-ui.js","sourceRoot":"","sources":["../src/code-browser-wide-intro-ui.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,4BAA4B;IAC1C,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,+BAA+B,CAAC,CAAC,EAAE,CAAC;QACxF,IAAI,EAAE,YAAY,WAAW;YAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC;IACrF,CAAC;IACD,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAC;IAC9D,IAAI,IAAI,YAAY,WAAW;QAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IAC/C,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,8BAA8B,CAAC,CAAC;IACvE,IAAI,MAAM,YAAY,WAAW;QAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACjD,UAAU,CAAC,EAAE,GAAG,8BAA8B,CAAC;IAC/C,UAAU,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAC/C,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAEtC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IACjD,MAAM,CAAC,EAAE,GAAG,uBAAuB,CAAC;IACpC,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACtC,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC3C,MAAM,CAAC,SAAS,GAAG;;;;;;;;;;;;;GAalB,CAAC;IACF,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAElC,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,8BAA8B,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,6BAA6B,CAAC,CAAC;IACnE,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,oCAAoC,CAAC,CAAC;IACjF,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,CAAC,iCAAiC,CAAC,CAAC;IAC3E,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,gCAAgC,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,gCAAgC,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,gCAAgC,CAAC,CAAC;IACvE,IACE,CAAC,CAAC,OAAO,YAAY,WAAW,CAAC;QACjC,CAAC,CAAC,MAAM,YAAY,WAAW,CAAC;QAChC,CAAC,CAAC,aAAa,YAAY,iBAAiB,CAAC;QAC7C,CAAC,CAAC,UAAU,YAAY,WAAW,CAAC;QACpC,CAAC,CAAC,OAAO,YAAY,iBAAiB,CAAC;QACvC,CAAC,CAAC,OAAO,YAAY,iBAAiB,CAAC;QACvC,CAAC,CAAC,OAAO,YAAY,iBAAiB,CAAC,EACvC,CAAC;QACD,UAAU,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO;QACL,MAAM;QACN,UAAU;QACV,OAAO;QACP,MAAM;QACN,aAAa;QACb,UAAU;QACV,OAAO;QACP,OAAO;QACP,OAAO;KACR,CAAC;AACJ,CAAC"}
|
package/dist/code-browser.d.ts
CHANGED
|
@@ -8,10 +8,18 @@ export type CodeBrowserMultiAngleSpec = {
|
|
|
8
8
|
commentrayPathRel: string;
|
|
9
9
|
commentrayOnGithubUrl?: string;
|
|
10
10
|
/**
|
|
11
|
-
* When the static site emits
|
|
12
|
-
*
|
|
11
|
+
* When the static site emits per-pair browse pages, same-tab navigation for the Doc toolbar
|
|
12
|
+
* (preferred over {@link commentrayOnGithubUrl} on the hub). Typical values are hub-relative
|
|
13
|
+
* `./browse/<human-path>/index.html` or `./browse/<source>@<angle>.html`; opaque `./browse/<hash>.html`
|
|
14
|
+
* remains valid for the canonical HTML file on disk.
|
|
13
15
|
*/
|
|
14
16
|
staticBrowseUrl?: string;
|
|
17
|
+
/**
|
|
18
|
+
* When set, `blockStretchRows.commentrayPathRel` must equal this angle’s {@link commentrayPathRel}
|
|
19
|
+
* and `blockStretchRows.sourceRelative` must equal the page primary {@link CodeBrowserPageOptions.filePath}
|
|
20
|
+
* (repo-relative, normalized the same way as the index). Otherwise scroll links are omitted so one
|
|
21
|
+
* angle never inherits another angle’s index slice.
|
|
22
|
+
*/
|
|
15
23
|
blockStretchRows?: {
|
|
16
24
|
index: CommentrayIndex;
|
|
17
25
|
sourceRelative: string;
|
|
@@ -113,8 +121,8 @@ export type CodeBrowserPageOptions = {
|
|
|
113
121
|
*/
|
|
114
122
|
commentrayOnGithubUrl?: string;
|
|
115
123
|
/**
|
|
116
|
-
* When set (e.g. `./browse/<
|
|
117
|
-
* opens this URL on the **same origin** instead of GitHub.
|
|
124
|
+
* When set (e.g. `./browse/…/index.html` or `./browse/<hash>.html` from the static Pages build),
|
|
125
|
+
* the Doc toolbar icon opens this URL on the **same origin** instead of GitHub.
|
|
118
126
|
*/
|
|
119
127
|
commentrayStaticBrowseUrl?: string;
|
|
120
128
|
/**
|
|
@@ -133,6 +141,12 @@ export type CodeBrowserPageOptions = {
|
|
|
133
141
|
* an Angle selector, embeds each rendered Markdown body, and disables stretch layout.
|
|
134
142
|
*/
|
|
135
143
|
multiAngleBrowsing?: CodeBrowserMultiAngleBrowsing;
|
|
144
|
+
/**
|
|
145
|
+
* When set to a valid Git object id (7–40 hex digits, e.g. CI `github.sha`), appended to the
|
|
146
|
+
* page footer after the build time so published static output is traceable to a commit.
|
|
147
|
+
* Omit for local builds.
|
|
148
|
+
*/
|
|
149
|
+
pagesBuildCommitSha?: string;
|
|
136
150
|
};
|
|
137
151
|
/**
|
|
138
152
|
* Static HTML shell for a minimal “code browser”: code + rendered commentray,
|