irgen 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +113 -0
- package/LICENSE +21 -0
- package/README.md +161 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +312 -0
- package/dist/cli.js.map +1 -0
- package/dist/dsl/aggregator.d.ts +8 -0
- package/dist/dsl/aggregator.d.ts.map +1 -0
- package/dist/dsl/aggregator.js +64 -0
- package/dist/dsl/aggregator.js.map +1 -0
- package/dist/dsl/frontend-runtime.d.ts +486 -0
- package/dist/dsl/frontend-runtime.d.ts.map +1 -0
- package/dist/dsl/frontend-runtime.js +232 -0
- package/dist/dsl/frontend-runtime.js.map +1 -0
- package/dist/dsl/runtime.d.ts +33 -0
- package/dist/dsl/runtime.d.ts.map +1 -0
- package/dist/dsl/runtime.js +120 -0
- package/dist/dsl/runtime.js.map +1 -0
- package/dist/emit/backend/adapters.d.ts +11 -0
- package/dist/emit/backend/adapters.d.ts.map +1 -0
- package/dist/emit/backend/adapters.js +374 -0
- package/dist/emit/backend/adapters.js.map +1 -0
- package/dist/emit/backend/backend-tsmorph.d.ts +5 -0
- package/dist/emit/backend/backend-tsmorph.d.ts.map +1 -0
- package/dist/emit/backend/backend-tsmorph.js +858 -0
- package/dist/emit/backend/backend-tsmorph.js.map +1 -0
- package/dist/emit/backend/fake-backend.d.ts +2 -0
- package/dist/emit/backend/fake-backend.d.ts.map +1 -0
- package/dist/emit/backend/fake-backend.js +19 -0
- package/dist/emit/backend/fake-backend.js.map +1 -0
- package/dist/emit/backend/packaging.d.ts +3 -0
- package/dist/emit/backend/packaging.d.ts.map +1 -0
- package/dist/emit/backend/packaging.js +71 -0
- package/dist/emit/backend/packaging.js.map +1 -0
- package/dist/emit/backend/server.d.ts +4 -0
- package/dist/emit/backend/server.d.ts.map +1 -0
- package/dist/emit/backend/server.js +169 -0
- package/dist/emit/backend/server.js.map +1 -0
- package/dist/emit/cli/cli-fake.d.ts +2 -0
- package/dist/emit/cli/cli-fake.d.ts.map +1 -0
- package/dist/emit/cli/cli-fake.js +33 -0
- package/dist/emit/cli/cli-fake.js.map +1 -0
- package/dist/emit/electron/electron-shell.d.ts +3 -0
- package/dist/emit/electron/electron-shell.d.ts.map +1 -0
- package/dist/emit/electron/electron-shell.js +454 -0
- package/dist/emit/electron/electron-shell.js.map +1 -0
- package/dist/emit/engine.d.ts +14 -0
- package/dist/emit/engine.d.ts.map +1 -0
- package/dist/emit/engine.js +25 -0
- package/dist/emit/engine.js.map +1 -0
- package/dist/emit/format.d.ts +2 -0
- package/dist/emit/format.d.ts.map +1 -0
- package/dist/emit/format.js +23 -0
- package/dist/emit/format.js.map +1 -0
- package/dist/emit/frontend/frontend-react.d.ts +4 -0
- package/dist/emit/frontend/frontend-react.d.ts.map +1 -0
- package/dist/emit/frontend/frontend-react.js +2021 -0
- package/dist/emit/frontend/frontend-react.js.map +1 -0
- package/dist/emit/frontend/registry.d.ts +20 -0
- package/dist/emit/frontend/registry.d.ts.map +1 -0
- package/dist/emit/frontend/registry.js +46 -0
- package/dist/emit/frontend/registry.js.map +1 -0
- package/dist/emit/frontend/runtime-emitter.d.ts +4 -0
- package/dist/emit/frontend/runtime-emitter.d.ts.map +1 -0
- package/dist/emit/frontend/runtime-emitter.js +435 -0
- package/dist/emit/frontend/runtime-emitter.js.map +1 -0
- package/dist/emit/frontend/runtime-template.d.ts +28 -0
- package/dist/emit/frontend/runtime-template.d.ts.map +1 -0
- package/dist/emit/frontend/runtime-template.js +218 -0
- package/dist/emit/frontend/runtime-template.js.map +1 -0
- package/dist/emit/frontend/ssg.d.ts +8 -0
- package/dist/emit/frontend/ssg.d.ts.map +1 -0
- package/dist/emit/frontend/ssg.js +219 -0
- package/dist/emit/frontend/ssg.js.map +1 -0
- package/dist/emit/registry.d.ts +17 -0
- package/dist/emit/registry.d.ts.map +1 -0
- package/dist/emit/registry.js +38 -0
- package/dist/emit/registry.js.map +1 -0
- package/dist/emit/static-site/css.d.ts +5 -0
- package/dist/emit/static-site/css.d.ts.map +1 -0
- package/dist/emit/static-site/css.js +872 -0
- package/dist/emit/static-site/css.js.map +1 -0
- package/dist/emit/static-site/enhancements.d.ts +11 -0
- package/dist/emit/static-site/enhancements.d.ts.map +1 -0
- package/dist/emit/static-site/enhancements.js +266 -0
- package/dist/emit/static-site/enhancements.js.map +1 -0
- package/dist/emit/static-site/static-site-html.d.ts +3 -0
- package/dist/emit/static-site/static-site-html.d.ts.map +1 -0
- package/dist/emit/static-site/static-site-html.js +1172 -0
- package/dist/emit/static-site/static-site-html.js.map +1 -0
- package/dist/emit/utils/sdk.d.ts +15 -0
- package/dist/emit/utils/sdk.d.ts.map +1 -0
- package/dist/emit/utils/sdk.js +34 -0
- package/dist/emit/utils/sdk.js.map +1 -0
- package/dist/extensions/context.d.ts +23 -0
- package/dist/extensions/context.d.ts.map +1 -0
- package/dist/extensions/context.js +43 -0
- package/dist/extensions/context.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +135 -0
- package/dist/index.js.map +1 -0
- package/dist/ir/decl/backend.raw.schema.d.ts +128 -0
- package/dist/ir/decl/backend.raw.schema.d.ts.map +1 -0
- package/dist/ir/decl/backend.raw.schema.js +24 -0
- package/dist/ir/decl/backend.raw.schema.js.map +1 -0
- package/dist/ir/decl/bundle.d.ts +15 -0
- package/dist/ir/decl/bundle.d.ts.map +1 -0
- package/dist/ir/decl/bundle.js +8 -0
- package/dist/ir/decl/bundle.js.map +1 -0
- package/dist/ir/decl/cli.raw.schema.d.ts +133 -0
- package/dist/ir/decl/cli.raw.schema.d.ts.map +1 -0
- package/dist/ir/decl/cli.raw.schema.js +20 -0
- package/dist/ir/decl/cli.raw.schema.js.map +1 -0
- package/dist/ir/decl/frontend.raw.schema.d.ts +6631 -0
- package/dist/ir/decl/frontend.raw.schema.d.ts.map +1 -0
- package/dist/ir/decl/frontend.raw.schema.js +272 -0
- package/dist/ir/decl/frontend.raw.schema.js.map +1 -0
- package/dist/ir/decl/index.d.ts +6 -0
- package/dist/ir/decl/index.d.ts.map +1 -0
- package/dist/ir/decl/index.js +6 -0
- package/dist/ir/decl/index.js.map +1 -0
- package/dist/ir/decl/normalize.schema.d.ts +9154 -0
- package/dist/ir/decl/normalize.schema.d.ts.map +1 -0
- package/dist/ir/decl/normalize.schema.js +71 -0
- package/dist/ir/decl/normalize.schema.js.map +1 -0
- package/dist/ir/domain/backend.d.ts +19 -0
- package/dist/ir/domain/backend.d.ts.map +1 -0
- package/dist/ir/domain/backend.js +3 -0
- package/dist/ir/domain/backend.js.map +1 -0
- package/dist/ir/domain/cli.d.ts +18 -0
- package/dist/ir/domain/cli.d.ts.map +1 -0
- package/dist/ir/domain/cli.js +2 -0
- package/dist/ir/domain/cli.js.map +1 -0
- package/dist/ir/domain/frontend/index.d.ts +190 -0
- package/dist/ir/domain/frontend/index.d.ts.map +1 -0
- package/dist/ir/domain/frontend/index.js +2 -0
- package/dist/ir/domain/frontend/index.js.map +1 -0
- package/dist/ir/domain/frontend.d.ts +2 -0
- package/dist/ir/domain/frontend.d.ts.map +1 -0
- package/dist/ir/domain/frontend.js +3 -0
- package/dist/ir/domain/frontend.js.map +1 -0
- package/dist/ir/frontend-contract.d.ts +187 -0
- package/dist/ir/frontend-contract.d.ts.map +1 -0
- package/dist/ir/frontend-contract.js +6 -0
- package/dist/ir/frontend-contract.js.map +1 -0
- package/dist/ir/target/backend.d.ts +11 -0
- package/dist/ir/target/backend.d.ts.map +1 -0
- package/dist/ir/target/backend.js +2 -0
- package/dist/ir/target/backend.js.map +1 -0
- package/dist/ir/target/backend.policy.d.ts +896 -0
- package/dist/ir/target/backend.policy.d.ts.map +1 -0
- package/dist/ir/target/backend.policy.js +106 -0
- package/dist/ir/target/backend.policy.js.map +1 -0
- package/dist/ir/target/cli.d.ts +3 -0
- package/dist/ir/target/cli.d.ts.map +1 -0
- package/dist/ir/target/cli.js +2 -0
- package/dist/ir/target/cli.js.map +1 -0
- package/dist/ir/target/electron.d.ts +99 -0
- package/dist/ir/target/electron.d.ts.map +1 -0
- package/dist/ir/target/electron.js +2 -0
- package/dist/ir/target/electron.js.map +1 -0
- package/dist/ir/target/electron.policy.d.ts +7015 -0
- package/dist/ir/target/electron.policy.d.ts.map +1 -0
- package/dist/ir/target/electron.policy.js +119 -0
- package/dist/ir/target/electron.policy.js.map +1 -0
- package/dist/ir/target/frontend.d.ts +12 -0
- package/dist/ir/target/frontend.d.ts.map +1 -0
- package/dist/ir/target/frontend.js +2 -0
- package/dist/ir/target/frontend.js.map +1 -0
- package/dist/ir/target/frontend.policy.d.ts +268 -0
- package/dist/ir/target/frontend.policy.d.ts.map +1 -0
- package/dist/ir/target/frontend.policy.js +33 -0
- package/dist/ir/target/frontend.policy.js.map +1 -0
- package/dist/ir/target/index.d.ts +6 -0
- package/dist/ir/target/index.d.ts.map +1 -0
- package/dist/ir/target/index.js +6 -0
- package/dist/ir/target/index.js.map +1 -0
- package/dist/ir/target/static-site.d.ts +18 -0
- package/dist/ir/target/static-site.d.ts.map +1 -0
- package/dist/ir/target/static-site.js +2 -0
- package/dist/ir/target/static-site.js.map +1 -0
- package/dist/ir/target/static-site.policy.d.ts +2911 -0
- package/dist/ir/target/static-site.policy.d.ts.map +1 -0
- package/dist/ir/target/static-site.policy.js +127 -0
- package/dist/ir/target/static-site.policy.js.map +1 -0
- package/dist/lowering/backend.d.ts +4 -0
- package/dist/lowering/backend.d.ts.map +1 -0
- package/dist/lowering/backend.js +57 -0
- package/dist/lowering/backend.js.map +1 -0
- package/dist/lowering/cli.d.ts +4 -0
- package/dist/lowering/cli.d.ts.map +1 -0
- package/dist/lowering/cli.js +22 -0
- package/dist/lowering/cli.js.map +1 -0
- package/dist/lowering/engine.d.ts +18 -0
- package/dist/lowering/engine.d.ts.map +1 -0
- package/dist/lowering/engine.js +47 -0
- package/dist/lowering/engine.js.map +1 -0
- package/dist/lowering/frontend.d.ts +9 -0
- package/dist/lowering/frontend.d.ts.map +1 -0
- package/dist/lowering/frontend.js +246 -0
- package/dist/lowering/frontend.js.map +1 -0
- package/dist/lowering/targets/to-backend.d.ts +9 -0
- package/dist/lowering/targets/to-backend.d.ts.map +1 -0
- package/dist/lowering/targets/to-backend.js +55 -0
- package/dist/lowering/targets/to-backend.js.map +1 -0
- package/dist/lowering/targets/to-cli.d.ts +4 -0
- package/dist/lowering/targets/to-cli.d.ts.map +1 -0
- package/dist/lowering/targets/to-cli.js +11 -0
- package/dist/lowering/targets/to-cli.js.map +1 -0
- package/dist/lowering/targets/to-electron.d.ts +30 -0
- package/dist/lowering/targets/to-electron.d.ts.map +1 -0
- package/dist/lowering/targets/to-electron.js +87 -0
- package/dist/lowering/targets/to-electron.js.map +1 -0
- package/dist/lowering/targets/to-frontend.d.ts +4 -0
- package/dist/lowering/targets/to-frontend.d.ts.map +1 -0
- package/dist/lowering/targets/to-frontend.js +30 -0
- package/dist/lowering/targets/to-frontend.js.map +1 -0
- package/dist/lowering/targets/to-static-site.d.ts +16 -0
- package/dist/lowering/targets/to-static-site.d.ts.map +1 -0
- package/dist/lowering/targets/to-static-site.js +30 -0
- package/dist/lowering/targets/to-static-site.js.map +1 -0
- package/dist/mappers/index.d.ts +12 -0
- package/dist/mappers/index.d.ts.map +1 -0
- package/dist/mappers/index.js +60 -0
- package/dist/mappers/index.js.map +1 -0
- package/dist/types/extension.d.ts +3 -0
- package/dist/types/extension.d.ts.map +1 -0
- package/dist/types/extension.js +2 -0
- package/dist/types/extension.js.map +1 -0
- package/dist/utils/array.d.ts +2 -0
- package/dist/utils/array.d.ts.map +1 -0
- package/dist/utils/array.js +4 -0
- package/dist/utils/array.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/string.d.ts +13 -0
- package/dist/utils/string.d.ts.map +1 -0
- package/dist/utils/string.js +56 -0
- package/dist/utils/string.js.map +1 -0
- package/package.json +112 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css.js","sourceRoot":"","sources":["../../../src/emit/static-site/css.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAElC,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA60BhB,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAc,EACd,OAAkC;IAElC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC9C,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,OAAO,EAAE,WAAW;QACpC,CAAC,CAAC,uBAAuB,OAAO,CAAC,WAAW,OAAO;QACnD,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,GAAG,QAAQ,GAAG,SAAS,EAAE,EAAE,OAAO,CAAC,CAAC;AAC5F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAAc,EAAE,aAAqB;IACzE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAClD,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,CAAC,CAAC;IAE/C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAG,uBAAuB,OAAO,IAAI,CAAC;QACjD,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,oDAAoD,aAAa,EAAE,CAAC,CAAC;IACpF,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
type EnhancementCaps = {
|
|
2
|
+
sidebarToggle: boolean;
|
|
3
|
+
copyCode: boolean;
|
|
4
|
+
themeToggle: boolean;
|
|
5
|
+
tocScrollSpy: boolean;
|
|
6
|
+
search: boolean;
|
|
7
|
+
mermaid: boolean;
|
|
8
|
+
};
|
|
9
|
+
export declare function emitEnhancements(outDir: string, caps: EnhancementCaps): Promise<void>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=enhancements.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enhancements.d.ts","sourceRoot":"","sources":["../../../src/emit/static-site/enhancements.ts"],"names":[],"mappings":"AAGA,KAAK,eAAe,GAAG;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAkQF,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAM3F"}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import fs from "node:fs/promises";
|
|
3
|
+
function buildEnhancementsJs(caps) {
|
|
4
|
+
return `
|
|
5
|
+
(() => {
|
|
6
|
+
const root = document.documentElement;
|
|
7
|
+
const CAP_SIDEBAR = ${caps.sidebarToggle};
|
|
8
|
+
const CAP_COPY = ${caps.copyCode};
|
|
9
|
+
const CAP_THEME = ${caps.themeToggle};
|
|
10
|
+
const CAP_TOC = ${caps.tocScrollSpy};
|
|
11
|
+
const CAP_SEARCH = ${caps.search};
|
|
12
|
+
const CAP_MERMAID = ${caps.mermaid};
|
|
13
|
+
|
|
14
|
+
function on(el, ev, fn) {
|
|
15
|
+
if (!el) return;
|
|
16
|
+
el.addEventListener(ev, fn);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function toggleSidebar(btn) {
|
|
20
|
+
const isCollapsed = root.getAttribute("data-irgen-sidebar") === "collapsed";
|
|
21
|
+
const next = isCollapsed ? "" : "collapsed";
|
|
22
|
+
if (next) root.setAttribute("data-irgen-sidebar", next);
|
|
23
|
+
else root.removeAttribute("data-irgen-sidebar");
|
|
24
|
+
btn.setAttribute("aria-expanded", String(!isCollapsed));
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function setupSidebarToggle() {
|
|
28
|
+
const btn = document.querySelector("[data-irgen-sidebar-toggle]");
|
|
29
|
+
on(btn, "click", () => toggleSidebar(btn));
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function readThemePref() {
|
|
33
|
+
try {
|
|
34
|
+
return localStorage.getItem("irgen-theme");
|
|
35
|
+
} catch (_) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function writeThemePref(value) {
|
|
41
|
+
try {
|
|
42
|
+
localStorage.setItem("irgen-theme", value);
|
|
43
|
+
} catch (_) {
|
|
44
|
+
// ignore
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function detectSystemTheme() {
|
|
49
|
+
return window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches
|
|
50
|
+
? "dark"
|
|
51
|
+
: "light";
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function applyTheme(value) {
|
|
55
|
+
root.setAttribute("data-theme", value);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function setupThemeToggle() {
|
|
59
|
+
const btn = document.querySelector("[data-irgen-theme-toggle]");
|
|
60
|
+
if (!btn) return;
|
|
61
|
+
const pref = readThemePref();
|
|
62
|
+
const initial = pref || detectSystemTheme();
|
|
63
|
+
applyTheme(initial);
|
|
64
|
+
btn.setAttribute("aria-pressed", String(initial === "dark"));
|
|
65
|
+
on(btn, "click", () => {
|
|
66
|
+
const current = root.getAttribute("data-theme") === "dark" ? "dark" : "light";
|
|
67
|
+
const next = current === "dark" ? "light" : "dark";
|
|
68
|
+
applyTheme(next);
|
|
69
|
+
writeThemePref(next);
|
|
70
|
+
btn.setAttribute("aria-pressed", String(next === "dark"));
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function setupTocScrollSpy() {
|
|
75
|
+
const toc = document.querySelector("[data-irgen-toc]");
|
|
76
|
+
if (!toc) return;
|
|
77
|
+
const links = Array.from(document.querySelectorAll("[data-irgen-toc-link]"));
|
|
78
|
+
if (!links.length) return;
|
|
79
|
+
const targets = links.map((link) => {
|
|
80
|
+
const id = link.getAttribute("data-irgen-toc-link");
|
|
81
|
+
const el = id ? document.getElementById(id) : null;
|
|
82
|
+
return { link, el, id };
|
|
83
|
+
}).filter((t) => t.el);
|
|
84
|
+
|
|
85
|
+
if (!targets.length) return;
|
|
86
|
+
|
|
87
|
+
const observer = new IntersectionObserver((entries) => {
|
|
88
|
+
let activeId = null;
|
|
89
|
+
for (const entry of entries) {
|
|
90
|
+
if (entry.isIntersecting) {
|
|
91
|
+
activeId = entry.target.getAttribute("id");
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (!activeId) return;
|
|
96
|
+
targets.forEach((t) => {
|
|
97
|
+
if (!t.id) return;
|
|
98
|
+
t.link.classList.toggle("is-active", t.id === activeId);
|
|
99
|
+
});
|
|
100
|
+
}, { rootMargin: "0px 0px -70% 0px", threshold: [0, 1] });
|
|
101
|
+
|
|
102
|
+
targets.forEach((t) => observer.observe(t.el));
|
|
103
|
+
links.forEach((link) => {
|
|
104
|
+
on(link, "click", (e) => {
|
|
105
|
+
const href = link.getAttribute("href") || "";
|
|
106
|
+
if (!href.startsWith("#")) return;
|
|
107
|
+
const target = document.getElementById(href.slice(1));
|
|
108
|
+
if (!target) return;
|
|
109
|
+
e.preventDefault();
|
|
110
|
+
target.scrollIntoView({ behavior: "smooth", block: "start" });
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
function copyText(text) {
|
|
115
|
+
if (navigator.clipboard && navigator.clipboard.writeText) {
|
|
116
|
+
return navigator.clipboard.writeText(text);
|
|
117
|
+
}
|
|
118
|
+
const textarea = document.createElement("textarea");
|
|
119
|
+
textarea.value = text;
|
|
120
|
+
textarea.style.position = "fixed";
|
|
121
|
+
textarea.style.opacity = "0";
|
|
122
|
+
document.body.appendChild(textarea);
|
|
123
|
+
textarea.select();
|
|
124
|
+
document.execCommand("copy");
|
|
125
|
+
textarea.remove();
|
|
126
|
+
return Promise.resolve();
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function setupCopyCode() {
|
|
130
|
+
const buttons = document.querySelectorAll("[data-irgen-copy-code]");
|
|
131
|
+
buttons.forEach((btn) => {
|
|
132
|
+
on(btn, "click", async () => {
|
|
133
|
+
const container = btn.closest(".irgen-code");
|
|
134
|
+
const code = container ? container.querySelector("code") : null;
|
|
135
|
+
const text = code ? code.textContent || "" : "";
|
|
136
|
+
if (!text) return;
|
|
137
|
+
const label = btn.querySelector(".irgen-button-label");
|
|
138
|
+
const setLabel = (value) => {
|
|
139
|
+
if (label) {
|
|
140
|
+
label.textContent = value;
|
|
141
|
+
} else {
|
|
142
|
+
btn.textContent = value;
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
try {
|
|
146
|
+
await copyText(text);
|
|
147
|
+
setLabel("Copied");
|
|
148
|
+
setTimeout(() => { setLabel("Copy"); }, 1200);
|
|
149
|
+
} catch (_) {
|
|
150
|
+
setLabel("Failed");
|
|
151
|
+
setTimeout(() => { setLabel("Copy"); }, 1200);
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
function setupCopyAnchors() {
|
|
158
|
+
const buttons = document.querySelectorAll("[data-irgen-copy-anchor]");
|
|
159
|
+
buttons.forEach((btn) => {
|
|
160
|
+
btn.addEventListener("click", async () => {
|
|
161
|
+
const anchor = btn.getAttribute("data-irgen-copy-anchor");
|
|
162
|
+
if (!anchor) return;
|
|
163
|
+
try {
|
|
164
|
+
const url = new URL(anchor, window.location.href).href;
|
|
165
|
+
await copyText(url);
|
|
166
|
+
btn.classList.add("is-copied");
|
|
167
|
+
setTimeout(() => { btn.classList.remove("is-copied"); }, 1200);
|
|
168
|
+
} catch (_) {
|
|
169
|
+
// no-op
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
async function setupSearch() {
|
|
176
|
+
const root = document.querySelector("[data-irgen-search]");
|
|
177
|
+
if (!root) return;
|
|
178
|
+
const input = root.querySelector("[data-irgen-search-input]");
|
|
179
|
+
const results = root.querySelector("[data-irgen-search-results]");
|
|
180
|
+
if (!input || !results) return;
|
|
181
|
+
const indexUrl = root.getAttribute("data-irgen-search-index") || "assets/search-index.json";
|
|
182
|
+
let index = null;
|
|
183
|
+
let mini = null;
|
|
184
|
+
try {
|
|
185
|
+
const resp = await fetch(indexUrl);
|
|
186
|
+
if (!resp.ok) return;
|
|
187
|
+
index = await resp.json();
|
|
188
|
+
} catch (_) {
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
if (window.MiniSearch && index && Array.isArray(index.items)) {
|
|
193
|
+
mini = new window.MiniSearch({
|
|
194
|
+
fields: ["title", "description", "content"],
|
|
195
|
+
storeFields: ["title", "description", "url"],
|
|
196
|
+
});
|
|
197
|
+
mini.addAll(index.items);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
function render(items) {
|
|
201
|
+
if (!items.length) {
|
|
202
|
+
results.innerHTML = "";
|
|
203
|
+
results.classList.remove("is-open");
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
const html = items.slice(0, 8).map((it) => {
|
|
207
|
+
const title = (it.title || "").toString();
|
|
208
|
+
const desc = (it.description || "").toString();
|
|
209
|
+
return \`<a class="irgen-search-item" href="\${it.url}"><strong>\${title}</strong><span>\${desc}</span></a>\`;
|
|
210
|
+
}).join("");
|
|
211
|
+
results.innerHTML = html;
|
|
212
|
+
results.classList.add("is-open");
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
input.addEventListener("input", () => {
|
|
216
|
+
const q = input.value.trim().toLowerCase();
|
|
217
|
+
if (!q || !index || !Array.isArray(index.items)) {
|
|
218
|
+
render([]);
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
if (mini) {
|
|
222
|
+
const matches = mini.search(q, { prefix: true, fuzzy: 0.2 });
|
|
223
|
+
render(matches);
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
const matches = index.items.filter((it) => {
|
|
227
|
+
const hay = \`\${it.title} \${it.description} \${it.content}\`.toLowerCase();
|
|
228
|
+
return hay.includes(q);
|
|
229
|
+
});
|
|
230
|
+
render(matches);
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
function setupMermaid() {
|
|
235
|
+
if (!window.mermaid) return;
|
|
236
|
+
const theme = root.getAttribute("data-theme") === "dark" ? "dark" : "default";
|
|
237
|
+
window.mermaid.initialize({ startOnLoad: false, theme });
|
|
238
|
+
const nodes = document.querySelectorAll(".mermaid");
|
|
239
|
+
if (nodes.length) {
|
|
240
|
+
window.mermaid.run({ nodes });
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
document.addEventListener("DOMContentLoaded", () => {
|
|
245
|
+
if (CAP_SIDEBAR) setupSidebarToggle();
|
|
246
|
+
if (CAP_COPY) {
|
|
247
|
+
setupCopyCode();
|
|
248
|
+
setupCopyAnchors();
|
|
249
|
+
}
|
|
250
|
+
if (CAP_THEME) setupThemeToggle();
|
|
251
|
+
if (CAP_TOC) setupTocScrollSpy();
|
|
252
|
+
if (CAP_SEARCH) setupSearch();
|
|
253
|
+
if (CAP_MERMAID) setupMermaid();
|
|
254
|
+
});
|
|
255
|
+
})();
|
|
256
|
+
`.trim();
|
|
257
|
+
}
|
|
258
|
+
export async function emitEnhancements(outDir, caps) {
|
|
259
|
+
const assetsDir = path.join(outDir, "assets");
|
|
260
|
+
await fs.mkdir(assetsDir, { recursive: true });
|
|
261
|
+
if (!caps.sidebarToggle && !caps.copyCode && !caps.themeToggle && !caps.tocScrollSpy && !caps.search && !caps.mermaid)
|
|
262
|
+
return;
|
|
263
|
+
const js = buildEnhancementsJs(caps);
|
|
264
|
+
await fs.writeFile(path.join(assetsDir, "app.js"), `${js}\n`, "utf-8");
|
|
265
|
+
}
|
|
266
|
+
//# sourceMappingURL=enhancements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enhancements.js","sourceRoot":"","sources":["../../../src/emit/static-site/enhancements.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAWlC,SAAS,mBAAmB,CAAC,IAAqB;IAChD,OAAO;;;wBAGe,IAAI,CAAC,aAAa;qBACrB,IAAI,CAAC,QAAQ;sBACZ,IAAI,CAAC,WAAW;oBAClB,IAAI,CAAC,YAAY;uBACd,IAAI,CAAC,MAAM;wBACV,IAAI,CAAC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoPnC,CAAC,IAAI,EAAE,CAAC;AACT,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAc,EAAE,IAAqB;IAC1E,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC9C,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO;QAAE,OAAO;IAC9H,MAAM,EAAE,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static-site-html.d.ts","sourceRoot":"","sources":["../../../src/emit/static-site/static-site-html.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAmlCzE,wBAAsB,cAAc,CAAC,EAAE,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2J1F"}
|