@screenbook/ui 0.0.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.
Files changed (101) hide show
  1. package/.astro/content-assets.mjs +1 -0
  2. package/.astro/content-modules.mjs +1 -0
  3. package/.astro/content.d.ts +199 -0
  4. package/.astro/data-store.json +1 -0
  5. package/.astro/settings.json +5 -0
  6. package/.astro/types.d.ts +2 -0
  7. package/.prettierrc +15 -0
  8. package/.screenbook/coverage.json +37 -0
  9. package/.screenbook/screens.json +90 -0
  10. package/LICENSE +21 -0
  11. package/astro.config.mjs +18 -0
  12. package/dist/client/_astro/_baseUniq.BGai4mcc.js +1 -0
  13. package/dist/client/_astro/arc.DUp0dfXj.js +1 -0
  14. package/dist/client/_astro/architectureDiagram-VXUJARFQ.De_Gt-YC.js +36 -0
  15. package/dist/client/_astro/blockDiagram-VD42YOAC.BBt_VNhR.js +122 -0
  16. package/dist/client/_astro/c4Diagram-YG6GDRKO.DfgUlHvt.js +10 -0
  17. package/dist/client/_astro/channel.CNyr52v1.js +1 -0
  18. package/dist/client/_astro/chunk-4BX2VUAB.BL0ar6du.js +1 -0
  19. package/dist/client/_astro/chunk-55IACEB6.CI6SkZkY.js +1 -0
  20. package/dist/client/_astro/chunk-B4BG7PRW.Z25N80K6.js +165 -0
  21. package/dist/client/_astro/chunk-DI55MBZ5.BqjPVmi1.js +220 -0
  22. package/dist/client/_astro/chunk-FMBD7UC4.bZ9DWnFm.js +15 -0
  23. package/dist/client/_astro/chunk-QN33PNHL.BkzuUgWB.js +1 -0
  24. package/dist/client/_astro/chunk-QZHKN3VN.C__d68N_.js +1 -0
  25. package/dist/client/_astro/chunk-TZMSLE5B.BIpu8bMn.js +1 -0
  26. package/dist/client/_astro/classDiagram-2ON5EDUG.CxT3aW-h.js +1 -0
  27. package/dist/client/_astro/classDiagram-v2-WZHVMYZB.CxT3aW-h.js +1 -0
  28. package/dist/client/_astro/clone.U_lSZ6fe.js +1 -0
  29. package/dist/client/_astro/cose-bilkent-S5V4N54A.D48yfMll.js +1 -0
  30. package/dist/client/_astro/coverage.CKIVg4LY.css +1 -0
  31. package/dist/client/_astro/coverage.DDJMzKCq.css +1 -0
  32. package/dist/client/_astro/cytoscape.esm.DtBltrT8.js +331 -0
  33. package/dist/client/_astro/dagre-6UL2VRFP.LKVH7b30.js +4 -0
  34. package/dist/client/_astro/defaultLocale.C4B-KCzX.js +1 -0
  35. package/dist/client/_astro/diagram-PSM6KHXK.AHgUjH56.js +24 -0
  36. package/dist/client/_astro/diagram-QEK2KX5R.DvS33xWZ.js +43 -0
  37. package/dist/client/_astro/diagram-S2PKOQOG.BWisaYrQ.js +24 -0
  38. package/dist/client/_astro/erDiagram-Q2GNP2WA.B7oID6oT.js +60 -0
  39. package/dist/client/_astro/flowDiagram-NV44I4VS.Bb1qJLxr.js +162 -0
  40. package/dist/client/_astro/ganttDiagram-JELNMOA3.3vGHETyo.js +267 -0
  41. package/dist/client/_astro/gitGraphDiagram-NY62KEGX.Co2SKcif.js +65 -0
  42. package/dist/client/_astro/graph.B5fevUwB.js +1 -0
  43. package/dist/client/_astro/graph.astro_astro_type_script_index_0_lang.1HlATQ1g.js +1 -0
  44. package/dist/client/_astro/impact.Cvhl64u1.css +1 -0
  45. package/dist/client/_astro/impact.astro_astro_type_script_index_0_lang.D4cAR9AL.js +6 -0
  46. package/dist/client/_astro/infoDiagram-WHAUD3N6.B6ULtps1.js +2 -0
  47. package/dist/client/_astro/init.Gi6I4Gst.js +1 -0
  48. package/dist/client/_astro/journeyDiagram-XKPGCS4Q.BSOCzWmw.js +139 -0
  49. package/dist/client/_astro/kanban-definition-3W4ZIXB7.D8KKGc1o.js +89 -0
  50. package/dist/client/_astro/katex.XbL3y5x-.js +261 -0
  51. package/dist/client/_astro/layout.8vv24qEg.js +1 -0
  52. package/dist/client/_astro/linear.B6O9ymuK.js +1 -0
  53. package/dist/client/_astro/mermaid.core.CReXU7YN.js +256 -0
  54. package/dist/client/_astro/min.CdGMGVU0.js +1 -0
  55. package/dist/client/_astro/mindmap-definition-VGOIOE7T.G14HgtDw.js +68 -0
  56. package/dist/client/_astro/ordinal.BYWQX77i.js +1 -0
  57. package/dist/client/_astro/pieDiagram-ADFJNKIX.bC2VkyoW.js +30 -0
  58. package/dist/client/_astro/quadrantDiagram-AYHSOK5B.BlLaQQxO.js +7 -0
  59. package/dist/client/_astro/requirementDiagram-UZGBJVZJ.DHRnMofO.js +64 -0
  60. package/dist/client/_astro/sankeyDiagram-TZEHDZUN.BMuaJBmt.js +10 -0
  61. package/dist/client/_astro/sequenceDiagram-WL72ISMW.CnU62wqy.js +145 -0
  62. package/dist/client/_astro/stateDiagram-FKZM4ZOC.CewI55YO.js +1 -0
  63. package/dist/client/_astro/stateDiagram-v2-4FDKWEC3.7xUQqoNr.js +1 -0
  64. package/dist/client/_astro/timeline-definition-IT6M3QCI.D1PLRwss.js +61 -0
  65. package/dist/client/_astro/treemap-KMMF4GRG.D3VNVvXF.js +128 -0
  66. package/dist/client/_astro/xychartDiagram-PRI3JC2R.CQex0-ul.js +7 -0
  67. package/dist/client/logo.svg +5 -0
  68. package/dist/server/_@astrojs-ssr-adapter.mjs +1 -0
  69. package/dist/server/_noop-middleware.mjs +3 -0
  70. package/dist/server/chunks/_@astrojs-ssr-adapter_DgsYudHz.mjs +4385 -0
  71. package/dist/server/chunks/astro/server_m7yT4wCr.mjs +2787 -0
  72. package/dist/server/chunks/astro-designed-error-pages_BvPhMmw0.mjs +364 -0
  73. package/dist/server/chunks/fs-lite_COtHaKzy.mjs +157 -0
  74. package/dist/server/chunks/impactAnalysis_Bz5lMdmy.mjs +188 -0
  75. package/dist/server/chunks/loadScreens_DJf-tycc.mjs +39 -0
  76. package/dist/server/chunks/node_DoTkMCOi.mjs +1673 -0
  77. package/dist/server/chunks/remote_B3W5fv4r.mjs +188 -0
  78. package/dist/server/chunks/sharp_DHNfMLYY.mjs +99 -0
  79. package/dist/server/entry.mjs +47 -0
  80. package/dist/server/manifest_-V1HEnR8.mjs +101 -0
  81. package/dist/server/noop-entrypoint.mjs +3 -0
  82. package/dist/server/pages/_image.astro.mjs +2 -0
  83. package/dist/server/pages/coverage.astro.mjs +65 -0
  84. package/dist/server/pages/graph.astro.mjs +107 -0
  85. package/dist/server/pages/impact.astro.mjs +52 -0
  86. package/dist/server/pages/index.astro.mjs +28 -0
  87. package/dist/server/pages/screen/_id_.astro.mjs +52 -0
  88. package/dist/server/renderers.mjs +3 -0
  89. package/package.json +42 -0
  90. package/public/logo.svg +5 -0
  91. package/src/layouts/Layout.astro +60 -0
  92. package/src/pages/coverage.astro +399 -0
  93. package/src/pages/graph.astro +330 -0
  94. package/src/pages/impact.astro +459 -0
  95. package/src/pages/index.astro +167 -0
  96. package/src/pages/screen/[id].astro +186 -0
  97. package/src/styles/global.css +862 -0
  98. package/src/utils/impactAnalysis.ts +297 -0
  99. package/src/utils/loadCoverage.ts +30 -0
  100. package/src/utils/loadScreens.ts +18 -0
  101. package/tsconfig.json +9 -0
@@ -0,0 +1,188 @@
1
+ function appendForwardSlash(path) {
2
+ return path.endsWith("/") ? path : path + "/";
3
+ }
4
+ function prependForwardSlash(path) {
5
+ return path[0] === "/" ? path : "/" + path;
6
+ }
7
+ const MANY_TRAILING_SLASHES = /\/{2,}$/g;
8
+ function collapseDuplicateTrailingSlashes(path, trailingSlash) {
9
+ if (!path) {
10
+ return path;
11
+ }
12
+ return path.replace(MANY_TRAILING_SLASHES, trailingSlash ? "/" : "") || "/";
13
+ }
14
+ function removeTrailingForwardSlash(path) {
15
+ return path.endsWith("/") ? path.slice(0, path.length - 1) : path;
16
+ }
17
+ function removeLeadingForwardSlash(path) {
18
+ return path.startsWith("/") ? path.substring(1) : path;
19
+ }
20
+ function trimSlashes(path) {
21
+ return path.replace(/^\/|\/$/g, "");
22
+ }
23
+ function isString(path) {
24
+ return typeof path === "string" || path instanceof String;
25
+ }
26
+ const INTERNAL_PREFIXES = /* @__PURE__ */ new Set(["/_", "/@", "/.", "//"]);
27
+ const JUST_SLASHES = /^\/{2,}$/;
28
+ function isInternalPath(path) {
29
+ return INTERNAL_PREFIXES.has(path.slice(0, 2)) && !JUST_SLASHES.test(path);
30
+ }
31
+ function joinPaths(...paths) {
32
+ return paths.filter(isString).map((path, i) => {
33
+ if (i === 0) {
34
+ return removeTrailingForwardSlash(path);
35
+ } else if (i === paths.length - 1) {
36
+ return removeLeadingForwardSlash(path);
37
+ } else {
38
+ return trimSlashes(path);
39
+ }
40
+ }).join("/");
41
+ }
42
+ function removeQueryString(path) {
43
+ const index = path.lastIndexOf("?");
44
+ return index > 0 ? path.substring(0, index) : path;
45
+ }
46
+ function isRemotePath(src) {
47
+ if (!src) return false;
48
+ const trimmed = src.trim();
49
+ if (!trimmed) return false;
50
+ let decoded = trimmed;
51
+ let previousDecoded = "";
52
+ let maxIterations = 10;
53
+ while (decoded !== previousDecoded && maxIterations > 0) {
54
+ previousDecoded = decoded;
55
+ try {
56
+ decoded = decodeURIComponent(decoded);
57
+ } catch {
58
+ break;
59
+ }
60
+ maxIterations--;
61
+ }
62
+ if (/^[a-zA-Z]:/.test(decoded)) {
63
+ return false;
64
+ }
65
+ if (decoded[0] === "/" && decoded[1] !== "/" && decoded[1] !== "\\") {
66
+ return false;
67
+ }
68
+ if (decoded[0] === "\\") {
69
+ return true;
70
+ }
71
+ if (decoded.startsWith("//")) {
72
+ return true;
73
+ }
74
+ try {
75
+ const url = new URL(decoded, "http://n");
76
+ if (url.username || url.password) {
77
+ return true;
78
+ }
79
+ if (decoded.includes("@") && !url.pathname.includes("@") && !url.search.includes("@")) {
80
+ return true;
81
+ }
82
+ if (url.origin !== "http://n") {
83
+ const protocol = url.protocol.toLowerCase();
84
+ if (protocol === "file:") {
85
+ return false;
86
+ }
87
+ return true;
88
+ }
89
+ if (URL.canParse(decoded)) {
90
+ return true;
91
+ }
92
+ return false;
93
+ } catch {
94
+ return true;
95
+ }
96
+ }
97
+ function isParentDirectory(parentPath, childPath) {
98
+ if (!parentPath || !childPath) {
99
+ return false;
100
+ }
101
+ if (parentPath.includes("://") || childPath.includes("://")) {
102
+ return false;
103
+ }
104
+ if (isRemotePath(parentPath) || isRemotePath(childPath)) {
105
+ return false;
106
+ }
107
+ if (parentPath.includes("..") || childPath.includes("..")) {
108
+ return false;
109
+ }
110
+ if (parentPath.includes("\0") || childPath.includes("\0")) {
111
+ return false;
112
+ }
113
+ const normalizedParent = appendForwardSlash(slash(parentPath).toLowerCase());
114
+ const normalizedChild = slash(childPath).toLowerCase();
115
+ if (normalizedParent === normalizedChild || normalizedParent === normalizedChild + "/") {
116
+ return false;
117
+ }
118
+ return normalizedChild.startsWith(normalizedParent);
119
+ }
120
+ function slash(path) {
121
+ return path.replace(/\\/g, "/");
122
+ }
123
+ function fileExtension(path) {
124
+ const ext = path.split(".").pop();
125
+ return ext !== path ? `.${ext}` : "";
126
+ }
127
+ const WITH_FILE_EXT = /\/[^/]+\.\w+$/;
128
+ function hasFileExtension(path) {
129
+ return WITH_FILE_EXT.test(path);
130
+ }
131
+
132
+ function matchPattern(url, remotePattern) {
133
+ return matchProtocol(url, remotePattern.protocol) && matchHostname(url, remotePattern.hostname, true) && matchPort(url, remotePattern.port) && matchPathname(url, remotePattern.pathname, true);
134
+ }
135
+ function matchPort(url, port) {
136
+ return !port || port === url.port;
137
+ }
138
+ function matchProtocol(url, protocol) {
139
+ return !protocol || protocol === url.protocol.slice(0, -1);
140
+ }
141
+ function matchHostname(url, hostname, allowWildcard = false) {
142
+ if (!hostname) {
143
+ return true;
144
+ } else if (!allowWildcard || !hostname.startsWith("*")) {
145
+ return hostname === url.hostname;
146
+ } else if (hostname.startsWith("**.")) {
147
+ const slicedHostname = hostname.slice(2);
148
+ return slicedHostname !== url.hostname && url.hostname.endsWith(slicedHostname);
149
+ } else if (hostname.startsWith("*.")) {
150
+ const slicedHostname = hostname.slice(1);
151
+ if (!url.hostname.endsWith(slicedHostname)) {
152
+ return false;
153
+ }
154
+ const subdomainWithDot = url.hostname.slice(0, -(slicedHostname.length - 1));
155
+ return subdomainWithDot.endsWith(".") && !subdomainWithDot.slice(0, -1).includes(".");
156
+ }
157
+ return false;
158
+ }
159
+ function matchPathname(url, pathname, allowWildcard = false) {
160
+ if (!pathname) {
161
+ return true;
162
+ } else if (!allowWildcard || !pathname.endsWith("*")) {
163
+ return pathname === url.pathname;
164
+ } else if (pathname.endsWith("/**")) {
165
+ const slicedPathname = pathname.slice(0, -2);
166
+ return slicedPathname !== url.pathname && url.pathname.startsWith(slicedPathname);
167
+ } else if (pathname.endsWith("/*")) {
168
+ const slicedPathname = pathname.slice(0, -1);
169
+ const additionalPathChunks = url.pathname.replace(slicedPathname, "").split("/").filter(Boolean);
170
+ return additionalPathChunks.length === 1;
171
+ }
172
+ return false;
173
+ }
174
+ function isRemoteAllowed(src, {
175
+ domains,
176
+ remotePatterns
177
+ }) {
178
+ if (!URL.canParse(src)) {
179
+ return false;
180
+ }
181
+ const url = new URL(src);
182
+ if (!["http:", "https:", "data:"].includes(url.protocol)) {
183
+ return false;
184
+ }
185
+ return domains.some((domain) => matchHostname(url, domain)) || remotePatterns.some((remotePattern) => matchPattern(url, remotePattern));
186
+ }
187
+
188
+ export { isRemotePath as a, isParentDirectory as b, appendForwardSlash as c, removeTrailingForwardSlash as d, isInternalPath as e, fileExtension as f, collapseDuplicateTrailingSlashes as g, hasFileExtension as h, isRemoteAllowed as i, joinPaths as j, matchPattern as m, prependForwardSlash as p, removeQueryString as r, slash as s, trimSlashes as t };
@@ -0,0 +1,99 @@
1
+ import { A as AstroError, ao as MissingSharp } from './astro/server_m7yT4wCr.mjs';
2
+ import { b as baseService, p as parseQuality } from './node_DoTkMCOi.mjs';
3
+
4
+ let sharp;
5
+ const qualityTable = {
6
+ low: 25,
7
+ mid: 50,
8
+ high: 80,
9
+ max: 100
10
+ };
11
+ async function loadSharp() {
12
+ let sharpImport;
13
+ try {
14
+ sharpImport = (await import('sharp')).default;
15
+ } catch {
16
+ throw new AstroError(MissingSharp);
17
+ }
18
+ sharpImport.cache(false);
19
+ return sharpImport;
20
+ }
21
+ const fitMap = {
22
+ fill: "fill",
23
+ contain: "inside",
24
+ cover: "cover",
25
+ none: "outside",
26
+ "scale-down": "inside",
27
+ outside: "outside",
28
+ inside: "inside"
29
+ };
30
+ const sharpService = {
31
+ validateOptions: baseService.validateOptions,
32
+ getURL: baseService.getURL,
33
+ parseURL: baseService.parseURL,
34
+ getHTMLAttributes: baseService.getHTMLAttributes,
35
+ getSrcSet: baseService.getSrcSet,
36
+ async transform(inputBuffer, transformOptions, config) {
37
+ if (!sharp) sharp = await loadSharp();
38
+ const transform = transformOptions;
39
+ if (transform.format === "svg") return { data: inputBuffer, format: "svg" };
40
+ const result = sharp(inputBuffer, {
41
+ failOnError: false,
42
+ pages: -1,
43
+ limitInputPixels: config.service.config.limitInputPixels
44
+ });
45
+ result.rotate();
46
+ const withoutEnlargement = Boolean(transform.fit);
47
+ if (transform.width && transform.height && transform.fit) {
48
+ const fit = fitMap[transform.fit] ?? "inside";
49
+ result.resize({
50
+ width: Math.round(transform.width),
51
+ height: Math.round(transform.height),
52
+ fit,
53
+ position: transform.position,
54
+ withoutEnlargement
55
+ });
56
+ } else if (transform.height && !transform.width) {
57
+ result.resize({
58
+ height: Math.round(transform.height),
59
+ withoutEnlargement
60
+ });
61
+ } else if (transform.width) {
62
+ result.resize({
63
+ width: Math.round(transform.width),
64
+ withoutEnlargement
65
+ });
66
+ }
67
+ if (transform.format) {
68
+ let quality = void 0;
69
+ if (transform.quality) {
70
+ const parsedQuality = parseQuality(transform.quality);
71
+ if (typeof parsedQuality === "number") {
72
+ quality = parsedQuality;
73
+ } else {
74
+ quality = transform.quality in qualityTable ? qualityTable[transform.quality] : void 0;
75
+ }
76
+ }
77
+ const isGifInput = inputBuffer[0] === 71 && // 'G'
78
+ inputBuffer[1] === 73 && // 'I'
79
+ inputBuffer[2] === 70 && // 'F'
80
+ inputBuffer[3] === 56 && // '8'
81
+ (inputBuffer[4] === 57 || inputBuffer[4] === 55) && // '9' or '7'
82
+ inputBuffer[5] === 97;
83
+ if (transform.format === "webp" && isGifInput) {
84
+ result.webp({ quality: typeof quality === "number" ? quality : void 0, loop: 0 });
85
+ } else {
86
+ result.toFormat(transform.format, { quality });
87
+ }
88
+ }
89
+ const { data, info } = await result.toBuffer({ resolveWithObject: true });
90
+ const needsCopy = "buffer" in data && data.buffer instanceof SharedArrayBuffer;
91
+ return {
92
+ data: needsCopy ? new Uint8Array(data) : data,
93
+ format: info.format
94
+ };
95
+ }
96
+ };
97
+ var sharp_default = sharpService;
98
+
99
+ export { sharp_default as default };
@@ -0,0 +1,47 @@
1
+ import { renderers } from './renderers.mjs';
2
+ import { c as createExports, s as serverEntrypointModule } from './chunks/_@astrojs-ssr-adapter_DgsYudHz.mjs';
3
+ import { manifest } from './manifest_-V1HEnR8.mjs';
4
+
5
+ const serverIslandMap = new Map();;
6
+
7
+ const _page0 = () => import('./pages/_image.astro.mjs');
8
+ const _page1 = () => import('./pages/coverage.astro.mjs');
9
+ const _page2 = () => import('./pages/graph.astro.mjs');
10
+ const _page3 = () => import('./pages/impact.astro.mjs');
11
+ const _page4 = () => import('./pages/screen/_id_.astro.mjs');
12
+ const _page5 = () => import('./pages/index.astro.mjs');
13
+ const pageMap = new Map([
14
+ ["../../node_modules/.pnpm/astro@5.16.6_@types+node@25.0.3_jiti@2.6.1_lightningcss@1.30.2_rollup@4.54.0_typescript@5.9.3/node_modules/astro/dist/assets/endpoint/node.js", _page0],
15
+ ["src/pages/coverage.astro", _page1],
16
+ ["src/pages/graph.astro", _page2],
17
+ ["src/pages/impact.astro", _page3],
18
+ ["src/pages/screen/[id].astro", _page4],
19
+ ["src/pages/index.astro", _page5]
20
+ ]);
21
+
22
+ const _manifest = Object.assign(manifest, {
23
+ pageMap,
24
+ serverIslandMap,
25
+ renderers,
26
+ actions: () => import('./noop-entrypoint.mjs'),
27
+ middleware: () => import('./_noop-middleware.mjs')
28
+ });
29
+ const _args = {
30
+ "mode": "standalone",
31
+ "client": "file:///Users/wadakatu/www/experiments/screenbook/packages/ui/dist/client/",
32
+ "server": "file:///Users/wadakatu/www/experiments/screenbook/packages/ui/dist/server/",
33
+ "host": false,
34
+ "port": 4321,
35
+ "assets": "_astro",
36
+ "experimentalStaticHeaders": false
37
+ };
38
+ const _exports = createExports(_manifest, _args);
39
+ const handler = _exports['handler'];
40
+ const startServer = _exports['startServer'];
41
+ const options = _exports['options'];
42
+ const _start = 'start';
43
+ if (Object.prototype.hasOwnProperty.call(serverEntrypointModule, _start)) {
44
+ serverEntrypointModule[_start](_manifest, _args);
45
+ }
46
+
47
+ export { handler, options, pageMap, startServer };
@@ -0,0 +1,101 @@
1
+ import 'piccolore';
2
+ import { q as decodeKey } from './chunks/astro/server_m7yT4wCr.mjs';
3
+ import 'clsx';
4
+ import { N as NOOP_MIDDLEWARE_FN } from './chunks/astro-designed-error-pages_BvPhMmw0.mjs';
5
+ import 'es-module-lexer';
6
+
7
+ function sanitizeParams(params) {
8
+ return Object.fromEntries(
9
+ Object.entries(params).map(([key, value]) => {
10
+ if (typeof value === "string") {
11
+ return [key, value.normalize().replace(/#/g, "%23").replace(/\?/g, "%3F")];
12
+ }
13
+ return [key, value];
14
+ })
15
+ );
16
+ }
17
+ function getParameter(part, params) {
18
+ if (part.spread) {
19
+ return params[part.content.slice(3)] || "";
20
+ }
21
+ if (part.dynamic) {
22
+ if (!params[part.content]) {
23
+ throw new TypeError(`Missing parameter: ${part.content}`);
24
+ }
25
+ return params[part.content];
26
+ }
27
+ return part.content.normalize().replace(/\?/g, "%3F").replace(/#/g, "%23").replace(/%5B/g, "[").replace(/%5D/g, "]");
28
+ }
29
+ function getSegment(segment, params) {
30
+ const segmentPath = segment.map((part) => getParameter(part, params)).join("");
31
+ return segmentPath ? "/" + segmentPath : "";
32
+ }
33
+ function getRouteGenerator(segments, addTrailingSlash) {
34
+ return (params) => {
35
+ const sanitizedParams = sanitizeParams(params);
36
+ let trailing = "";
37
+ if (addTrailingSlash === "always" && segments.length) {
38
+ trailing = "/";
39
+ }
40
+ const path = segments.map((segment) => getSegment(segment, sanitizedParams)).join("") + trailing;
41
+ return path || "/";
42
+ };
43
+ }
44
+
45
+ function deserializeRouteData(rawRouteData) {
46
+ return {
47
+ route: rawRouteData.route,
48
+ type: rawRouteData.type,
49
+ pattern: new RegExp(rawRouteData.pattern),
50
+ params: rawRouteData.params,
51
+ component: rawRouteData.component,
52
+ generate: getRouteGenerator(rawRouteData.segments, rawRouteData._meta.trailingSlash),
53
+ pathname: rawRouteData.pathname || void 0,
54
+ segments: rawRouteData.segments,
55
+ prerender: rawRouteData.prerender,
56
+ redirect: rawRouteData.redirect,
57
+ redirectRoute: rawRouteData.redirectRoute ? deserializeRouteData(rawRouteData.redirectRoute) : void 0,
58
+ fallbackRoutes: rawRouteData.fallbackRoutes.map((fallback) => {
59
+ return deserializeRouteData(fallback);
60
+ }),
61
+ isIndex: rawRouteData.isIndex,
62
+ origin: rawRouteData.origin
63
+ };
64
+ }
65
+
66
+ function deserializeManifest(serializedManifest) {
67
+ const routes = [];
68
+ for (const serializedRoute of serializedManifest.routes) {
69
+ routes.push({
70
+ ...serializedRoute,
71
+ routeData: deserializeRouteData(serializedRoute.routeData)
72
+ });
73
+ const route = serializedRoute;
74
+ route.routeData = deserializeRouteData(serializedRoute.routeData);
75
+ }
76
+ const assets = new Set(serializedManifest.assets);
77
+ const componentMetadata = new Map(serializedManifest.componentMetadata);
78
+ const inlinedScripts = new Map(serializedManifest.inlinedScripts);
79
+ const clientDirectives = new Map(serializedManifest.clientDirectives);
80
+ const serverIslandNameMap = new Map(serializedManifest.serverIslandNameMap);
81
+ const key = decodeKey(serializedManifest.key);
82
+ return {
83
+ // in case user middleware exists, this no-op middleware will be reassigned (see plugin-ssr.ts)
84
+ middleware() {
85
+ return { onRequest: NOOP_MIDDLEWARE_FN };
86
+ },
87
+ ...serializedManifest,
88
+ assets,
89
+ componentMetadata,
90
+ inlinedScripts,
91
+ clientDirectives,
92
+ routes,
93
+ serverIslandNameMap,
94
+ key
95
+ };
96
+ }
97
+
98
+ const manifest = deserializeManifest({"hrefRoot":"file:///Users/wadakatu/www/experiments/screenbook/packages/ui/","cacheDir":"file:///Users/wadakatu/www/experiments/screenbook/packages/ui/node_modules/.astro/","outDir":"file:///Users/wadakatu/www/experiments/screenbook/packages/ui/dist/","srcDir":"file:///Users/wadakatu/www/experiments/screenbook/packages/ui/src/","publicDir":"file:///Users/wadakatu/www/experiments/screenbook/packages/ui/public/","buildClientDir":"file:///Users/wadakatu/www/experiments/screenbook/packages/ui/dist/client/","buildServerDir":"file:///Users/wadakatu/www/experiments/screenbook/packages/ui/dist/server/","adapterName":"@astrojs/node","routes":[{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"type":"page","component":"_server-islands.astro","params":["name"],"segments":[[{"content":"_server-islands","dynamic":false,"spread":false}],[{"content":"name","dynamic":true,"spread":false}]],"pattern":"^\\/_server-islands\\/([^/]+?)\\/?$","prerender":false,"isIndex":false,"fallbackRoutes":[],"route":"/_server-islands/[name]","origin":"internal","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"type":"endpoint","isIndex":false,"route":"/_image","pattern":"^\\/_image\\/?$","segments":[[{"content":"_image","dynamic":false,"spread":false}]],"params":[],"component":"../../node_modules/.pnpm/astro@5.16.6_@types+node@25.0.3_jiti@2.6.1_lightningcss@1.30.2_rollup@4.54.0_typescript@5.9.3/node_modules/astro/dist/assets/endpoint/node.js","pathname":"/_image","prerender":false,"fallbackRoutes":[],"origin":"internal","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[{"type":"external","src":"/_astro/coverage.DDJMzKCq.css"},{"type":"external","src":"/_astro/coverage.CKIVg4LY.css"}],"routeData":{"route":"/coverage","isIndex":false,"type":"page","pattern":"^\\/coverage\\/?$","segments":[[{"content":"coverage","dynamic":false,"spread":false}]],"params":[],"component":"src/pages/coverage.astro","pathname":"/coverage","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[{"type":"external","src":"/_astro/coverage.DDJMzKCq.css"},{"type":"inline","content":".graph-controls[data-astro-cid-oy34yelw]{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px;flex-wrap:wrap;gap:16px}.view-toggle[data-astro-cid-oy34yelw]{display:flex;gap:8px;background:var(--color-surface);padding:4px;border-radius:var(--radius-lg);border:1px solid var(--color-border)}.toggle-btn[data-astro-cid-oy34yelw]{display:flex;align-items:center;gap:8px;padding:8px 16px;border:none;background:transparent;color:var(--color-text-muted);font-size:var(--text-sm);font-weight:500;border-radius:var(--radius-md);cursor:pointer;transition:all .15s ease}.toggle-btn[data-astro-cid-oy34yelw]:hover{color:var(--color-text)}.toggle-btn[data-astro-cid-oy34yelw].active{background:var(--color-accent);color:var(--color-bg)}.toggle-btn[data-astro-cid-oy34yelw] svg[data-astro-cid-oy34yelw]{width:16px;height:16px}.graph-stats[data-astro-cid-oy34yelw]{display:flex;gap:16px}.stat[data-astro-cid-oy34yelw]{font-size:var(--text-sm);color:var(--color-text-muted)}.hidden[data-astro-cid-oy34yelw]{display:none!important}.legend-api[data-astro-cid-oy34yelw]{background:#14b8a6!important;border-color:#5eead4!important}\n"}],"routeData":{"route":"/graph","isIndex":false,"type":"page","pattern":"^\\/graph\\/?$","segments":[[{"content":"graph","dynamic":false,"spread":false}]],"params":[],"component":"src/pages/graph.astro","pathname":"/graph","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[{"type":"external","src":"/_astro/coverage.DDJMzKCq.css"},{"type":"external","src":"/_astro/impact.Cvhl64u1.css"}],"routeData":{"route":"/impact","isIndex":false,"type":"page","pattern":"^\\/impact\\/?$","segments":[[{"content":"impact","dynamic":false,"spread":false}]],"params":[],"component":"src/pages/impact.astro","pathname":"/impact","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[{"type":"external","src":"/_astro/coverage.DDJMzKCq.css"}],"routeData":{"route":"/screen/[id]","isIndex":false,"type":"page","pattern":"^\\/screen\\/([^/]+?)\\/?$","segments":[[{"content":"screen","dynamic":false,"spread":false}],[{"content":"id","dynamic":true,"spread":false}]],"params":["id"],"component":"src/pages/screen/[id].astro","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[{"type":"external","src":"/_astro/coverage.DDJMzKCq.css"}],"routeData":{"route":"/","isIndex":true,"type":"page","pattern":"^\\/$","segments":[],"params":[],"component":"src/pages/index.astro","pathname":"/","prerender":false,"fallbackRoutes":[],"distURL":[],"origin":"project","_meta":{"trailingSlash":"ignore"}}}],"base":"/","trailingSlash":"ignore","compressHTML":true,"componentMetadata":[["/Users/wadakatu/www/experiments/screenbook/packages/ui/src/pages/coverage.astro",{"propagation":"none","containsHead":true}],["/Users/wadakatu/www/experiments/screenbook/packages/ui/src/pages/graph.astro",{"propagation":"none","containsHead":true}],["/Users/wadakatu/www/experiments/screenbook/packages/ui/src/pages/impact.astro",{"propagation":"none","containsHead":true}],["/Users/wadakatu/www/experiments/screenbook/packages/ui/src/pages/index.astro",{"propagation":"none","containsHead":true}],["/Users/wadakatu/www/experiments/screenbook/packages/ui/src/pages/screen/[id].astro",{"propagation":"none","containsHead":true}]],"renderers":[],"clientDirectives":[["idle","(()=>{var l=(n,t)=>{let i=async()=>{await(await n())()},e=typeof t.value==\"object\"?t.value:void 0,s={timeout:e==null?void 0:e.timeout};\"requestIdleCallback\"in window?window.requestIdleCallback(i,s):setTimeout(i,s.timeout||200)};(self.Astro||(self.Astro={})).idle=l;window.dispatchEvent(new Event(\"astro:idle\"));})();"],["load","(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).load=e;window.dispatchEvent(new Event(\"astro:load\"));})();"],["media","(()=>{var n=(a,t)=>{let i=async()=>{await(await a())()};if(t.value){let e=matchMedia(t.value);e.matches?i():e.addEventListener(\"change\",i,{once:!0})}};(self.Astro||(self.Astro={})).media=n;window.dispatchEvent(new Event(\"astro:media\"));})();"],["only","(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).only=e;window.dispatchEvent(new Event(\"astro:only\"));})();"],["visible","(()=>{var a=(s,i,o)=>{let r=async()=>{await(await s())()},t=typeof i.value==\"object\"?i.value:void 0,c={rootMargin:t==null?void 0:t.rootMargin},n=new IntersectionObserver(e=>{for(let l of e)if(l.isIntersecting){n.disconnect(),r();break}},c);for(let e of o.children)n.observe(e)};(self.Astro||(self.Astro={})).visible=a;window.dispatchEvent(new Event(\"astro:visible\"));})();"]],"entryModules":{"\u0000noop-middleware":"_noop-middleware.mjs","\u0000virtual:astro:actions/noop-entrypoint":"noop-entrypoint.mjs","\u0000@astro-page:src/pages/coverage@_@astro":"pages/coverage.astro.mjs","\u0000@astro-page:src/pages/graph@_@astro":"pages/graph.astro.mjs","\u0000@astro-page:src/pages/impact@_@astro":"pages/impact.astro.mjs","\u0000@astro-page:src/pages/screen/[id]@_@astro":"pages/screen/_id_.astro.mjs","\u0000@astro-page:src/pages/index@_@astro":"pages/index.astro.mjs","\u0000@astrojs-ssr-virtual-entry":"entry.mjs","\u0000@astro-renderers":"renderers.mjs","\u0000@astro-page:../../node_modules/.pnpm/astro@5.16.6_@types+node@25.0.3_jiti@2.6.1_lightningcss@1.30.2_rollup@4.54.0_typescript@5.9.3/node_modules/astro/dist/assets/endpoint/node@_@js":"pages/_image.astro.mjs","\u0000@astrojs-ssr-adapter":"_@astrojs-ssr-adapter.mjs","\u0000@astrojs-manifest":"manifest_-V1HEnR8.mjs","/Users/wadakatu/www/experiments/screenbook/node_modules/.pnpm/unstorage@1.17.3/node_modules/unstorage/drivers/fs-lite.mjs":"chunks/fs-lite_COtHaKzy.mjs","/Users/wadakatu/www/experiments/screenbook/node_modules/.pnpm/astro@5.16.6_@types+node@25.0.3_jiti@2.6.1_lightningcss@1.30.2_rollup@4.54.0_typescript@5.9.3/node_modules/astro/dist/assets/services/sharp.js":"chunks/sharp_DHNfMLYY.mjs","/Users/wadakatu/www/experiments/screenbook/packages/ui/src/pages/impact.astro?astro&type=script&index=0&lang.ts":"_astro/impact.astro_astro_type_script_index_0_lang.D4cAR9AL.js","/Users/wadakatu/www/experiments/screenbook/packages/ui/src/pages/index.astro?astro&type=script&index=0&lang.ts":"_astro/index.astro_astro_type_script_index_0_lang.BbG2FEsf.js","/Users/wadakatu/www/experiments/screenbook/packages/ui/src/pages/graph.astro?astro&type=script&index=0&lang.ts":"_astro/graph.astro_astro_type_script_index_0_lang.1HlATQ1g.js","/Users/wadakatu/www/experiments/screenbook/node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/chunks/mermaid.core/c4Diagram-YG6GDRKO.mjs":"_astro/c4Diagram-YG6GDRKO.DfgUlHvt.js","/Users/wadakatu/www/experiments/screenbook/node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/chunks/mermaid.core/flowDiagram-NV44I4VS.mjs":"_astro/flowDiagram-NV44I4VS.Bb1qJLxr.js","/Users/wadakatu/www/experiments/screenbook/node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/chunks/mermaid.core/erDiagram-Q2GNP2WA.mjs":"_astro/erDiagram-Q2GNP2WA.B7oID6oT.js","/Users/wadakatu/www/experiments/screenbook/node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/chunks/mermaid.core/gitGraphDiagram-NY62KEGX.mjs":"_astro/gitGraphDiagram-NY62KEGX.Co2SKcif.js","/Users/wadakatu/www/experiments/screenbook/node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/chunks/mermaid.core/infoDiagram-WHAUD3N6.mjs":"_astro/infoDiagram-WHAUD3N6.B6ULtps1.js","/Users/wadakatu/www/experiments/screenbook/node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/chunks/mermaid.core/quadrantDiagram-AYHSOK5B.mjs":"_astro/quadrantDiagram-AYHSOK5B.BlLaQQxO.js","/Users/wadakatu/www/experiments/screenbook/node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/chunks/mermaid.core/requirementDiagram-UZGBJVZJ.mjs":"_astro/requirementDiagram-UZGBJVZJ.DHRnMofO.js","/Users/wadakatu/www/experiments/screenbook/node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/chunks/mermaid.core/sequenceDiagram-WL72ISMW.mjs":"_astro/sequenceDiagram-WL72ISMW.CnU62wqy.js","/Users/wadakatu/www/experiments/screenbook/node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/chunks/mermaid.core/classDiagram-2ON5EDUG.mjs":"_astro/classDiagram-2ON5EDUG.CxT3aW-h.js","/Users/wadakatu/www/experiments/screenbook/node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/chunks/mermaid.core/classDiagram-v2-WZHVMYZB.mjs":"_astro/classDiagram-v2-WZHVMYZB.CxT3aW-h.js","/Users/wadakatu/www/experiments/screenbook/node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/chunks/mermaid.core/stateDiagram-FKZM4ZOC.mjs":"_astro/stateDiagram-FKZM4ZOC.CewI55YO.js","/Users/wadakatu/www/experiments/screenbook/node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/chunks/mermaid.core/stateDiagram-v2-4FDKWEC3.mjs":"_astro/stateDiagram-v2-4FDKWEC3.7xUQqoNr.js","/Users/wadakatu/www/experiments/screenbook/node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/chunks/mermaid.core/journeyDiagram-XKPGCS4Q.mjs":"_astro/journeyDiagram-XKPGCS4Q.BSOCzWmw.js","/Users/wadakatu/www/experiments/screenbook/node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/chunks/mermaid.core/timeline-definition-IT6M3QCI.mjs":"_astro/timeline-definition-IT6M3QCI.D1PLRwss.js","/Users/wadakatu/www/experiments/screenbook/node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/chunks/mermaid.core/kanban-definition-3W4ZIXB7.mjs":"_astro/kanban-definition-3W4ZIXB7.D8KKGc1o.js","/Users/wadakatu/www/experiments/screenbook/node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/chunks/mermaid.core/diagram-S2PKOQOG.mjs":"_astro/diagram-S2PKOQOG.BWisaYrQ.js","/Users/wadakatu/www/experiments/screenbook/node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/chunks/mermaid.core/diagram-QEK2KX5R.mjs":"_astro/diagram-QEK2KX5R.DvS33xWZ.js","/Users/wadakatu/www/experiments/screenbook/node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/chunks/mermaid.core/blockDiagram-VD42YOAC.mjs":"_astro/blockDiagram-VD42YOAC.BBt_VNhR.js","/Users/wadakatu/www/experiments/screenbook/node_modules/.pnpm/katex@0.16.27/node_modules/katex/dist/katex.mjs":"_astro/katex.XbL3y5x-.js","/Users/wadakatu/www/experiments/screenbook/node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/chunks/mermaid.core/dagre-6UL2VRFP.mjs":"_astro/dagre-6UL2VRFP.LKVH7b30.js","/Users/wadakatu/www/experiments/screenbook/node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/chunks/mermaid.core/xychartDiagram-PRI3JC2R.mjs":"_astro/xychartDiagram-PRI3JC2R.CQex0-ul.js","/Users/wadakatu/www/experiments/screenbook/node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/chunks/mermaid.core/pieDiagram-ADFJNKIX.mjs":"_astro/pieDiagram-ADFJNKIX.bC2VkyoW.js","/Users/wadakatu/www/experiments/screenbook/node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/chunks/mermaid.core/mindmap-definition-VGOIOE7T.mjs":"_astro/mindmap-definition-VGOIOE7T.G14HgtDw.js","/Users/wadakatu/www/experiments/screenbook/node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/chunks/mermaid.core/architectureDiagram-VXUJARFQ.mjs":"_astro/architectureDiagram-VXUJARFQ.De_Gt-YC.js","/Users/wadakatu/www/experiments/screenbook/node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/chunks/mermaid.core/cose-bilkent-S5V4N54A.mjs":"_astro/cose-bilkent-S5V4N54A.D48yfMll.js","/Users/wadakatu/www/experiments/screenbook/node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/chunks/mermaid.core/sankeyDiagram-TZEHDZUN.mjs":"_astro/sankeyDiagram-TZEHDZUN.BMuaJBmt.js","/Users/wadakatu/www/experiments/screenbook/node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/chunks/mermaid.core/diagram-PSM6KHXK.mjs":"_astro/diagram-PSM6KHXK.AHgUjH56.js","/Users/wadakatu/www/experiments/screenbook/node_modules/.pnpm/mermaid@11.12.2/node_modules/mermaid/dist/chunks/mermaid.core/ganttDiagram-JELNMOA3.mjs":"_astro/ganttDiagram-JELNMOA3.3vGHETyo.js","astro:scripts/before-hydration.js":""},"inlinedScripts":[["/Users/wadakatu/www/experiments/screenbook/packages/ui/src/pages/index.astro?astro&type=script&index=0&lang.ts","const n=document.getElementById(\"search\"),g=document.getElementById(\"screen-list\"),a=document.querySelectorAll(\".tag\");let s=null;function l(){const e=n?.value.toLowerCase()??\"\";g?.querySelectorAll(\".card-link\")?.forEach(t=>{const o=t.dataset.title??\"\",i=t.dataset.id??\"\",d=t.dataset.tags??\"\",r=o.includes(e)||i.includes(e),u=!s||d.includes(s);t.style.display=r&&u?\"block\":\"none\"})}n?.addEventListener(\"input\",l);a.forEach(e=>{e.addEventListener(\"click\",()=>{const c=e.dataset.tag;s===c?(s=null,a.forEach(t=>t.classList.remove(\"active\"))):(a.forEach(t=>t.classList.remove(\"active\")),s=c??null,e.classList.add(\"active\")),l()})});"]],"assets":["/_astro/coverage.DDJMzKCq.css","/_astro/coverage.CKIVg4LY.css","/_astro/impact.Cvhl64u1.css","/logo.svg","/_astro/_baseUniq.BGai4mcc.js","/_astro/arc.DUp0dfXj.js","/_astro/architectureDiagram-VXUJARFQ.De_Gt-YC.js","/_astro/blockDiagram-VD42YOAC.BBt_VNhR.js","/_astro/c4Diagram-YG6GDRKO.DfgUlHvt.js","/_astro/channel.CNyr52v1.js","/_astro/chunk-4BX2VUAB.BL0ar6du.js","/_astro/chunk-55IACEB6.CI6SkZkY.js","/_astro/chunk-B4BG7PRW.Z25N80K6.js","/_astro/chunk-DI55MBZ5.BqjPVmi1.js","/_astro/chunk-FMBD7UC4.bZ9DWnFm.js","/_astro/chunk-QN33PNHL.BkzuUgWB.js","/_astro/chunk-QZHKN3VN.C__d68N_.js","/_astro/chunk-TZMSLE5B.BIpu8bMn.js","/_astro/classDiagram-2ON5EDUG.CxT3aW-h.js","/_astro/classDiagram-v2-WZHVMYZB.CxT3aW-h.js","/_astro/clone.U_lSZ6fe.js","/_astro/cose-bilkent-S5V4N54A.D48yfMll.js","/_astro/cytoscape.esm.DtBltrT8.js","/_astro/dagre-6UL2VRFP.LKVH7b30.js","/_astro/defaultLocale.C4B-KCzX.js","/_astro/diagram-PSM6KHXK.AHgUjH56.js","/_astro/diagram-QEK2KX5R.DvS33xWZ.js","/_astro/diagram-S2PKOQOG.BWisaYrQ.js","/_astro/erDiagram-Q2GNP2WA.B7oID6oT.js","/_astro/flowDiagram-NV44I4VS.Bb1qJLxr.js","/_astro/ganttDiagram-JELNMOA3.3vGHETyo.js","/_astro/gitGraphDiagram-NY62KEGX.Co2SKcif.js","/_astro/graph.B5fevUwB.js","/_astro/graph.astro_astro_type_script_index_0_lang.1HlATQ1g.js","/_astro/impact.astro_astro_type_script_index_0_lang.D4cAR9AL.js","/_astro/infoDiagram-WHAUD3N6.B6ULtps1.js","/_astro/init.Gi6I4Gst.js","/_astro/journeyDiagram-XKPGCS4Q.BSOCzWmw.js","/_astro/kanban-definition-3W4ZIXB7.D8KKGc1o.js","/_astro/katex.XbL3y5x-.js","/_astro/layout.8vv24qEg.js","/_astro/linear.B6O9ymuK.js","/_astro/mermaid.core.CReXU7YN.js","/_astro/min.CdGMGVU0.js","/_astro/mindmap-definition-VGOIOE7T.G14HgtDw.js","/_astro/ordinal.BYWQX77i.js","/_astro/pieDiagram-ADFJNKIX.bC2VkyoW.js","/_astro/quadrantDiagram-AYHSOK5B.BlLaQQxO.js","/_astro/requirementDiagram-UZGBJVZJ.DHRnMofO.js","/_astro/sankeyDiagram-TZEHDZUN.BMuaJBmt.js","/_astro/sequenceDiagram-WL72ISMW.CnU62wqy.js","/_astro/stateDiagram-FKZM4ZOC.CewI55YO.js","/_astro/stateDiagram-v2-4FDKWEC3.7xUQqoNr.js","/_astro/timeline-definition-IT6M3QCI.D1PLRwss.js","/_astro/treemap-KMMF4GRG.D3VNVvXF.js","/_astro/xychartDiagram-PRI3JC2R.CQex0-ul.js"],"buildFormat":"directory","checkOrigin":true,"allowedDomains":[],"serverIslandNameMap":[],"key":"5gqhc0kelPRYxBSGO7sG0mfz9J2FqzbzjNNe/945t0s=","sessionConfig":{"driver":"fs-lite","options":{"base":"/Users/wadakatu/www/experiments/screenbook/packages/ui/node_modules/.astro/sessions"}}});
99
+ if (manifest.sessionConfig) manifest.sessionConfig.driverModule = () => import('./chunks/fs-lite_COtHaKzy.mjs');
100
+
101
+ export { manifest };
@@ -0,0 +1,3 @@
1
+ const server = {};
2
+
3
+ export { server };
@@ -0,0 +1,2 @@
1
+ export { a as page } from '../chunks/node_DoTkMCOi.mjs';
2
+ export { renderers } from '../renderers.mjs';
@@ -0,0 +1,65 @@
1
+ import { e as createComponent, k as renderComponent, r as renderTemplate, m as maybeRenderHead, l as Fragment, h as addAttribute } from '../chunks/astro/server_m7yT4wCr.mjs';
2
+ import 'piccolore';
3
+ import { l as loadScreens, $ as $$Layout } from '../chunks/loadScreens_DJf-tycc.mjs';
4
+ import { existsSync, readFileSync } from 'node:fs';
5
+ import { join } from 'node:path';
6
+ /* empty css */
7
+ export { renderers } from '../renderers.mjs';
8
+
9
+ function loadCoverage() {
10
+ const coveragePath = join(process.cwd(), ".screenbook", "coverage.json");
11
+ if (!existsSync(coveragePath)) {
12
+ return null;
13
+ }
14
+ try {
15
+ const content = readFileSync(coveragePath, "utf-8");
16
+ return JSON.parse(content);
17
+ } catch {
18
+ return null;
19
+ }
20
+ }
21
+
22
+ const $$Coverage = createComponent(($$result, $$props, $$slots) => {
23
+ const coverage = loadCoverage();
24
+ loadScreens();
25
+ function getPercentageColor(percentage) {
26
+ if (percentage >= 80) return "text-green-400";
27
+ if (percentage >= 50) return "text-yellow-400";
28
+ return "text-red-400";
29
+ }
30
+ function getPercentageBg(percentage) {
31
+ if (percentage >= 80) return "bg-green-500/20 border-green-500/30";
32
+ if (percentage >= 50) return "bg-yellow-500/20 border-yellow-500/30";
33
+ return "bg-red-500/20 border-red-500/30";
34
+ }
35
+ return renderTemplate`${renderComponent($$result, "Layout", $$Layout, { "title": "Coverage", "currentPage": "coverage", "data-astro-cid-vq7rje7m": true }, { "default": ($$result2) => renderTemplate` ${maybeRenderHead()}<div class="container" data-astro-cid-vq7rje7m> <div class="page-header" data-astro-cid-vq7rje7m> <h1 class="page-title" data-astro-cid-vq7rje7m>Coverage Dashboard</h1> <p class="page-description" data-astro-cid-vq7rje7m>
36
+ Track documentation coverage across your screens.
37
+ </p> </div> ${!coverage ? renderTemplate`<div class="empty-state" data-astro-cid-vq7rje7m> <svg class="empty-state-icon" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5" data-astro-cid-vq7rje7m> <path stroke-linecap="round" stroke-linejoin="round" d="M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 013 19.875v-6.75zM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 01-1.125-1.125V8.625zM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 01-1.125-1.125V4.125z" data-astro-cid-vq7rje7m></path> </svg> <h2 class="empty-state-title" data-astro-cid-vq7rje7m>No coverage data</h2> <p class="empty-state-description" data-astro-cid-vq7rje7m>
38
+ Run the build command to generate coverage data.
39
+ </p> <code class="empty-state-code" data-astro-cid-vq7rje7m> <span class="prompt" data-astro-cid-vq7rje7m>$</span> screenbook build
40
+ </code> </div>` : renderTemplate`${renderComponent($$result2, "Fragment", Fragment, { "data-astro-cid-vq7rje7m": true }, { "default": ($$result3) => renderTemplate`<div class="coverage-hero" data-astro-cid-vq7rje7m> <div${addAttribute(`coverage-percentage ${getPercentageBg(coverage.percentage)}`, "class")} data-astro-cid-vq7rje7m> <span${addAttribute(`percentage-value ${getPercentageColor(coverage.percentage)}`, "class")} data-astro-cid-vq7rje7m> ${coverage.percentage}%
41
+ </span> <span class="percentage-label" data-astro-cid-vq7rje7m>Coverage</span> </div> <div class="coverage-stats" data-astro-cid-vq7rje7m> <div class="stat-card" data-astro-cid-vq7rje7m> <div class="stat-value" data-astro-cid-vq7rje7m>${coverage.covered}</div> <div class="stat-label" data-astro-cid-vq7rje7m>Documented</div> </div> <div class="stat-card" data-astro-cid-vq7rje7m> <div class="stat-value" data-astro-cid-vq7rje7m>${coverage.total}</div> <div class="stat-label" data-astro-cid-vq7rje7m>Total Routes</div> </div> <div class="stat-card" data-astro-cid-vq7rje7m> <div class="stat-value" data-astro-cid-vq7rje7m>${coverage.missing.length}</div> <div class="stat-label" data-astro-cid-vq7rje7m>Missing</div> </div> </div> </div> <div class="coverage-grid" data-astro-cid-vq7rje7m> <div class="coverage-section" data-astro-cid-vq7rje7m> <h2 class="section-title" data-astro-cid-vq7rje7m> <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" data-astro-cid-vq7rje7m> <path stroke-linecap="round" stroke-linejoin="round" d="M15 19.128a9.38 9.38 0 002.625.372 9.337 9.337 0 004.121-.952 4.125 4.125 0 00-7.533-2.493M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.318 12.318 0 018.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0111.964-3.07M12 6.375a3.375 3.375 0 11-6.75 0 3.375 3.375 0 016.75 0zm8.25 2.25a2.625 2.625 0 11-5.25 0 2.625 2.625 0 015.25 0z" data-astro-cid-vq7rje7m></path> </svg>
42
+ By Owner
43
+ </h2> <div class="owner-list" data-astro-cid-vq7rje7m> ${Object.entries(coverage.byOwner).map(([owner, data]) => renderTemplate`<div class="owner-item" data-astro-cid-vq7rje7m> <div class="owner-info" data-astro-cid-vq7rje7m> <span class="owner-name" data-astro-cid-vq7rje7m>${owner}</span> <span class="owner-count" data-astro-cid-vq7rje7m>${data.count} screen${data.count > 1 ? "s" : ""}</span> </div> <div class="owner-bar" data-astro-cid-vq7rje7m> <div class="owner-bar-fill"${addAttribute(`width: ${Math.round(data.count / coverage.covered * 100)}%`, "style")} data-astro-cid-vq7rje7m></div> </div> </div>`)} </div> </div> <div class="coverage-section" data-astro-cid-vq7rje7m> <h2 class="section-title" data-astro-cid-vq7rje7m> <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" data-astro-cid-vq7rje7m> <path stroke-linecap="round" stroke-linejoin="round" d="M9.568 3H5.25A2.25 2.25 0 003 5.25v4.318c0 .597.237 1.17.659 1.591l9.581 9.581c.699.699 1.78.872 2.607.33a18.095 18.095 0 005.223-5.223c.542-.827.369-1.908-.33-2.607L11.16 3.66A2.25 2.25 0 009.568 3z" data-astro-cid-vq7rje7m></path> <path stroke-linecap="round" stroke-linejoin="round" d="M6 6h.008v.008H6V6z" data-astro-cid-vq7rje7m></path> </svg>
44
+ By Tag
45
+ </h2> <div class="tags-grid" data-astro-cid-vq7rje7m> ${Object.entries(coverage.byTag).sort(([, a], [, b]) => b - a).map(([tag, count]) => renderTemplate`<a${addAttribute(`/?tag=${encodeURIComponent(tag)}`, "href")} class="tag-card" data-astro-cid-vq7rje7m> <span class="tag-name" data-astro-cid-vq7rje7m>${tag}</span> <span class="tag-count" data-astro-cid-vq7rje7m>${count}</span> </a>`)} </div> </div> </div> ${coverage.missing.length > 0 && renderTemplate`<div class="coverage-section missing-section" data-astro-cid-vq7rje7m> <h2 class="section-title" data-astro-cid-vq7rje7m> <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" data-astro-cid-vq7rje7m> <path stroke-linecap="round" stroke-linejoin="round" d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z" data-astro-cid-vq7rje7m></path> </svg>
46
+ Missing Documentation (${coverage.missing.length})
47
+ </h2> <p class="section-description" data-astro-cid-vq7rje7m>
48
+ These routes don't have a <code data-astro-cid-vq7rje7m>screen.meta.ts</code> file yet.
49
+ </p> <div class="missing-list" data-astro-cid-vq7rje7m> ${coverage.missing.map((item) => renderTemplate`<div class="missing-item" data-astro-cid-vq7rje7m> <div class="missing-route" data-astro-cid-vq7rje7m> <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" data-astro-cid-vq7rje7m> <path stroke-linecap="round" stroke-linejoin="round" d="M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z" data-astro-cid-vq7rje7m></path> </svg> <span data-astro-cid-vq7rje7m>${item.route}</span> </div> <div class="missing-action" data-astro-cid-vq7rje7m> <code class="suggested-path" data-astro-cid-vq7rje7m>${item.suggestedPath}</code> </div> </div>`)} </div> </div>`}<div class="coverage-footer" data-astro-cid-vq7rje7m> <p class="timestamp" data-astro-cid-vq7rje7m>
50
+ Last updated: ${new Date(coverage.timestamp).toLocaleString()} </p> </div> ` })}`} </div> ` })} `;
51
+ }, "/Users/wadakatu/www/experiments/screenbook/packages/ui/src/pages/coverage.astro", void 0);
52
+
53
+ const $$file = "/Users/wadakatu/www/experiments/screenbook/packages/ui/src/pages/coverage.astro";
54
+ const $$url = "/coverage";
55
+
56
+ const _page = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
57
+ __proto__: null,
58
+ default: $$Coverage,
59
+ file: $$file,
60
+ url: $$url
61
+ }, Symbol.toStringTag, { value: 'Module' }));
62
+
63
+ const page = () => _page;
64
+
65
+ export { page };