reviw 1.1.0 → 1.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/dist/server/server.js +750 -325
- package/dist/ui/ui.js +1813 -922
- package/package.json +2 -2
package/dist/server/server.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { dirname as dirname$
|
|
3
|
-
import { spawnSync as spawnSync$
|
|
4
|
-
import { createHash as createHash$
|
|
5
|
-
import { createServer as createServer$
|
|
6
|
-
import { tmpdir as tmpdir$
|
|
7
|
-
import { statSync as statSync$
|
|
2
|
+
import { dirname as dirname$2163, join as join$2143, resolve as resolve$2182, extname as extname$2170, basename as basename$2180 } from "node:path";
|
|
3
|
+
import { spawnSync as spawnSync$2259, execSync as execSync$2224, spawn as spawn$2254 } from "node:child_process";
|
|
4
|
+
import { createHash as createHash$2206 } from "node:crypto";
|
|
5
|
+
import { createServer as createServer$2187 } from "node:http";
|
|
6
|
+
import { tmpdir as tmpdir$2229, homedir as homedir$2148 } from "node:os";
|
|
7
|
+
import { statSync as statSync$2274, unwatchFile as unwatchFile$2212, readdirSync as readdirSync$2239, existsSync as existsSync$2140, rmSync as rmSync$2248, mkdtempSync as mkdtempSync$2228, createReadStream as createReadStream$2278, unlinkSync as unlinkSync$2156, writeFileSync as writeFileSync$2159, readFileSync as readFileSync$2146, watchFile as watchFile$2315, mkdirSync as mkdirSync$2151 } from "node:fs";
|
|
8
8
|
class $PanicError extends Error {}
|
|
9
9
|
function $panic() {
|
|
10
10
|
throw new $PanicError();
|
|
@@ -61,13 +61,16 @@ const _M0FP36kazuph5reviw6server16get__script__dir = () => {
|
|
|
61
61
|
};
|
|
62
62
|
const _M0FP36kazuph5reviw6server13get__env__var = (name) => process.env[name] || "";
|
|
63
63
|
const _M0FP36kazuph5reviw6server22mkdir__recursive__opts = () => ({ recursive: true });
|
|
64
|
+
const _M0FP36kazuph5reviw6server15process__exists = (pid) => { try { process.kill(pid, 0); return true; } catch(e) { return false; } };
|
|
65
|
+
const _M0FP36kazuph5reviw6server17try__call__string = (fn, fb) => { try { return fn(); } catch(e) { return fb; } };
|
|
66
|
+
const _M0FP36kazuph5reviw6server12process__pid = () => process.pid;
|
|
64
67
|
const _M0FP36kazuph5reviw6server12console__log = (msg) => console.log(msg);
|
|
65
68
|
const _M0FP36kazuph5reviw6server9get__argv = () => process.argv;
|
|
66
69
|
const _M0FP36kazuph5reviw6server20parse__json__version = (s) => { try { return JSON.parse(s).version || "unknown"; } catch { return "unknown"; } };
|
|
67
|
-
const _M0FP36kazuph5reviw6server17try__call__string = (fn, fb) => { try { return fn(); } catch(e) { return fb; } };
|
|
68
70
|
const _M0FP36kazuph5reviw6server14is__stdin__tty = () => process.stdin.isTTY || false;
|
|
69
71
|
const _M0FP36kazuph5reviw6server19on__process__signal = (sig, handler) => process.on(sig, handler);
|
|
70
72
|
const _M0FP36kazuph5reviw6server13process__exit = (code) => process.exit(code);
|
|
73
|
+
const _M0FP36kazuph5reviw6server8js__null = () => null;
|
|
71
74
|
const _M0FP36kazuph5reviw6server14decode__buffer = (buf, enc) => {
|
|
72
75
|
try {
|
|
73
76
|
if (enc === "utf-8" || enc === "utf8") return buf.toString("utf-8");
|
|
@@ -79,6 +82,9 @@ const _M0FP36kazuph5reviw6server10buffer__at = (buf, idx) => buf[idx];
|
|
|
79
82
|
const _M0FP36kazuph5reviw6server14buffer__length = (buf) => buf.length;
|
|
80
83
|
const _M0FP36kazuph5reviw6server9sse__send = (res, event, data) => res.write(`event: ${event}\ndata: ${data}\n\n`);
|
|
81
84
|
const _M0FP36kazuph5reviw6server11error__code = (err) => err.code || "";
|
|
85
|
+
const _M0FP36kazuph5reviw6server19json__parse__string = (key, s) => { try { return JSON.parse(s)[key] || ""; } catch(e) { return ""; } };
|
|
86
|
+
const _M0FP36kazuph5reviw6server14clear__timeout = (timer) => { if (timer != null) clearTimeout(timer); };
|
|
87
|
+
const _M0FP36kazuph5reviw6server15js__is__nullish = (value) => value == null;
|
|
82
88
|
const _M0FP36kazuph5reviw6server20buffer__from__base64 = (data) => Buffer.from(data, "base64");
|
|
83
89
|
const _M0FP36kazuph5reviw6server21extract__base64__data = (data) => {
|
|
84
90
|
const m = data.match(/^data:image\/(\w+);base64,(.+)$/);
|
|
@@ -96,11 +102,17 @@ const _M0FP36kazuph5reviw6server21json__parse__comments = (s) => {
|
|
|
96
102
|
} catch(e) { return []; }
|
|
97
103
|
};
|
|
98
104
|
const _M0FP36kazuph5reviw6server19json__parse__images = (s) => { try { return JSON.parse(s).summaryImages || []; } catch(e) { return []; } };
|
|
99
|
-
const
|
|
105
|
+
const _M0FP36kazuph5reviw6server28json__parse__mermaid__errors = (s) => {
|
|
106
|
+
try {
|
|
107
|
+
const obj = JSON.parse(s);
|
|
108
|
+
return (obj.mermaidErrors || []).map(e => [String(e.line || 0), e.message || ""]);
|
|
109
|
+
} catch(e) { return []; }
|
|
110
|
+
};
|
|
100
111
|
const _M0FP36kazuph5reviw6server22process__stdout__write = (data) => process.stdout.write(data);
|
|
101
112
|
const _M0FP36kazuph5reviw6server11chmod__sync = (path, mode) => { try { import("node:fs").then(fs => fs.chmodSync(path, mode)); } catch(e) {} };
|
|
102
113
|
const _M0FP36kazuph5reviw6server27hash__update__digest__hex16 = (h, d) => h.update(d).digest("hex").slice(0, 16);
|
|
103
114
|
const _M0FP36kazuph5reviw6server15try__call__void = (fn) => { try { fn(); } catch(e) {} };
|
|
115
|
+
const _M0FP36kazuph5reviw6server12set__timeout = (cb, ms) => setTimeout(cb, ms);
|
|
104
116
|
const _M0FP36kazuph5reviw6server15js__stdio__pipe = () => ({ stdio: "pipe" });
|
|
105
117
|
const _M0FP36kazuph5reviw6server15try__call__bool = (fn) => { try { return fn(); } catch(e) { return false; } };
|
|
106
118
|
const _M0FP36kazuph5reviw6server30on__spawn__close__with__stderr = (proc, handler) => {
|
|
@@ -184,146 +196,147 @@ const _M0FP36kazuph5reviw6server22child__spawn__detached = (cmd, args) => {
|
|
|
184
196
|
};
|
|
185
197
|
const _M0FP36kazuph5reviw6server13get__platform = () => process.platform;
|
|
186
198
|
const _M0FP36kazuph5reviw6server21js__spawn__opts__utf8 = () => ({ encoding: "utf8", timeout: 3000 });
|
|
187
|
-
const _M0FP36kazuph5reviw6server14server__listen = (server, port, cb) => server.listen(port,
|
|
199
|
+
const _M0FP36kazuph5reviw6server14server__listen = (server, port, host, cb) => server.listen(port, host, cb);
|
|
188
200
|
const _M0FP36kazuph5reviw6server17server__on__error = (server, cb) => server.on("error", cb);
|
|
189
201
|
const _M0FP36kazuph5reviw6server13set__interval = (cb, ms) => setInterval(cb, ms);
|
|
190
202
|
const _M0FP095_40moonbitlang_2fcore_2fbuiltin_2eStringBuilder_24as_24_40moonbitlang_2fcore_2fbuiltin_2eLogger = { method_0: _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string, method_1: _M0IP016_24default__implP311moonbitlang4core7builtin6Logger16write__substringGRP311moonbitlang4core7builtin13StringBuilderE, method_2: _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger11write__view, method_3: _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger11write__char };
|
|
191
|
-
const
|
|
192
|
-
const
|
|
193
|
-
const
|
|
194
|
-
const
|
|
195
|
-
const
|
|
196
|
-
const
|
|
197
|
-
const
|
|
198
|
-
const
|
|
199
|
-
const
|
|
200
|
-
const
|
|
201
|
-
const
|
|
202
|
-
const
|
|
203
|
-
const
|
|
204
|
-
const
|
|
205
|
-
const
|
|
206
|
-
const
|
|
207
|
-
const
|
|
208
|
-
const
|
|
209
|
-
const
|
|
210
|
-
const
|
|
211
|
-
const
|
|
212
|
-
const
|
|
213
|
-
const
|
|
214
|
-
const
|
|
215
|
-
const
|
|
216
|
-
const
|
|
217
|
-
const
|
|
218
|
-
const
|
|
219
|
-
const
|
|
220
|
-
const
|
|
221
|
-
const
|
|
222
|
-
const
|
|
223
|
-
const
|
|
224
|
-
const
|
|
225
|
-
const
|
|
226
|
-
const
|
|
227
|
-
const
|
|
228
|
-
const
|
|
229
|
-
const
|
|
230
|
-
const
|
|
231
|
-
const
|
|
232
|
-
const
|
|
233
|
-
const
|
|
234
|
-
const
|
|
235
|
-
const
|
|
236
|
-
const
|
|
237
|
-
const
|
|
238
|
-
const
|
|
239
|
-
const
|
|
240
|
-
const
|
|
241
|
-
const
|
|
242
|
-
const
|
|
243
|
-
const
|
|
244
|
-
const
|
|
245
|
-
const
|
|
246
|
-
const
|
|
247
|
-
const
|
|
248
|
-
const
|
|
249
|
-
const
|
|
250
|
-
const
|
|
251
|
-
const
|
|
252
|
-
const
|
|
253
|
-
const
|
|
254
|
-
const
|
|
255
|
-
const
|
|
256
|
-
const
|
|
257
|
-
const
|
|
258
|
-
const
|
|
259
|
-
const
|
|
260
|
-
const
|
|
261
|
-
const
|
|
262
|
-
const
|
|
263
|
-
const
|
|
264
|
-
const
|
|
265
|
-
const
|
|
266
|
-
const
|
|
267
|
-
const
|
|
268
|
-
const
|
|
269
|
-
const
|
|
270
|
-
const
|
|
271
|
-
const
|
|
272
|
-
const
|
|
273
|
-
const
|
|
274
|
-
const
|
|
275
|
-
const
|
|
276
|
-
const
|
|
277
|
-
const
|
|
278
|
-
const
|
|
279
|
-
const
|
|
280
|
-
const
|
|
281
|
-
const
|
|
282
|
-
const
|
|
283
|
-
const
|
|
284
|
-
const
|
|
285
|
-
const
|
|
286
|
-
const
|
|
287
|
-
const
|
|
288
|
-
const
|
|
289
|
-
const
|
|
290
|
-
const
|
|
291
|
-
const
|
|
292
|
-
const
|
|
293
|
-
const
|
|
294
|
-
const
|
|
295
|
-
const
|
|
296
|
-
const
|
|
297
|
-
const
|
|
298
|
-
const
|
|
299
|
-
const
|
|
300
|
-
const
|
|
301
|
-
const
|
|
302
|
-
const
|
|
303
|
-
const
|
|
304
|
-
const
|
|
305
|
-
const
|
|
306
|
-
const
|
|
203
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c657 = ":";
|
|
204
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c658 = "#";
|
|
205
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c659 = "'";
|
|
206
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c660 = "\"";
|
|
207
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c661 = "\n";
|
|
208
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c662 = "[";
|
|
209
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c663 = "]";
|
|
210
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c664 = "{";
|
|
211
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c665 = "}";
|
|
212
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c666 = ",";
|
|
213
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c667 = "&";
|
|
214
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c668 = "*";
|
|
215
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c669 = "!";
|
|
216
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c670 = "|";
|
|
217
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c671 = ">";
|
|
218
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c672 = "%";
|
|
219
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c673 = "@";
|
|
220
|
+
const _M0FP36kazuph5reviw4core32split__to__lines_2e_2abind_7c702 = "\n";
|
|
221
|
+
const _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c715 = "- ";
|
|
222
|
+
const _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c716 = " -";
|
|
223
|
+
const _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c717 = " ";
|
|
224
|
+
const _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c718 = " ";
|
|
225
|
+
const _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c720 = "- ";
|
|
226
|
+
const _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c721 = " ";
|
|
227
|
+
const _M0FP36kazuph5reviw4core39parse__reviw__questions_2e_2abind_7c725 = "- ";
|
|
228
|
+
const _M0FP36kazuph5reviw4core39parse__reviw__questions_2e_2abind_7c726 = " ";
|
|
229
|
+
const _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c741 = "<details";
|
|
230
|
+
const _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c742 = "<div";
|
|
231
|
+
const _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c743 = "<section";
|
|
232
|
+
const _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c744 = "<article";
|
|
233
|
+
const _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c745 = "<aside";
|
|
234
|
+
const _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c746 = "<nav";
|
|
235
|
+
const _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c747 = "<header";
|
|
236
|
+
const _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c748 = "<footer";
|
|
237
|
+
const _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c750 = "#";
|
|
238
|
+
const _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c751 = "```";
|
|
239
|
+
const _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c752 = ">";
|
|
240
|
+
const _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c753 = "- ";
|
|
241
|
+
const _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c754 = "* ";
|
|
242
|
+
const _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c755 = "<";
|
|
243
|
+
const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c756 = "graph ";
|
|
244
|
+
const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c757 = "flowchart ";
|
|
245
|
+
const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c758 = "sequenceDiagram";
|
|
246
|
+
const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c759 = "classDiagram";
|
|
247
|
+
const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c760 = "stateDiagram";
|
|
248
|
+
const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c761 = "erDiagram";
|
|
249
|
+
const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c762 = "journey";
|
|
250
|
+
const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c763 = "gantt";
|
|
251
|
+
const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c764 = "pie";
|
|
252
|
+
const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c765 = "gitGraph";
|
|
253
|
+
const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c766 = "mindmap";
|
|
254
|
+
const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c767 = "timeline";
|
|
255
|
+
const _M0FP36kazuph5reviw4core36is__table__separator_2e_2abind_7c768 = "|";
|
|
256
|
+
const _M0FP36kazuph5reviw4core36is__table__separator_2e_2abind_7c769 = "-";
|
|
257
|
+
const _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c782 = "|";
|
|
258
|
+
const _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c783 = "|";
|
|
259
|
+
const _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c784 = "|";
|
|
260
|
+
const _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c781 = "|";
|
|
261
|
+
const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c785 = ".mp4";
|
|
262
|
+
const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c786 = ".webm";
|
|
263
|
+
const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c787 = ".mov";
|
|
264
|
+
const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c788 = ".avi";
|
|
265
|
+
const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c789 = ".mkv";
|
|
266
|
+
const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c790 = ".m4v";
|
|
267
|
+
const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c791 = ".ogv";
|
|
268
|
+
const _M0FP36kazuph5reviw4core30render__inline_2e_2abind_7c797 = "javascript:";
|
|
269
|
+
const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c810 = "expression(";
|
|
270
|
+
const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c811 = "url(";
|
|
271
|
+
const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c812 = "-moz-binding";
|
|
272
|
+
const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c813 = "behavior:";
|
|
273
|
+
const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c814 = "behaviour:";
|
|
274
|
+
const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c815 = "javascript:";
|
|
275
|
+
const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c816 = "vbscript:";
|
|
276
|
+
const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c817 = "@import";
|
|
277
|
+
const _M0FP36kazuph5reviw4core40is__event__handler__attr_2e_2abind_7c818 = "on";
|
|
278
|
+
const _M0FP36kazuph5reviw4core29is__safe__url_2e_2abind_7c819 = "javascript:";
|
|
279
|
+
const _M0FP36kazuph5reviw4core29is__safe__url_2e_2abind_7c820 = "data:text/html";
|
|
280
|
+
const _M0FP36kazuph5reviw4core30sanitize__html_2e_2abind_7c836 = ">";
|
|
281
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c838 = "<";
|
|
282
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c840 = "<summary>";
|
|
283
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c841 = "</details>";
|
|
284
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c843 = "</details>";
|
|
285
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c844 = "<details";
|
|
286
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c848 = "#";
|
|
287
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c849 = "```";
|
|
288
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c851 = "```";
|
|
289
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c852 = ">";
|
|
290
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c854 = ">";
|
|
291
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c857 = "- ";
|
|
292
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c858 = "* ";
|
|
293
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c863 = "- ";
|
|
294
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c864 = "* ";
|
|
295
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c860 = "[ ] ";
|
|
296
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c861 = "[x] ";
|
|
297
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c862 = "[X] ";
|
|
298
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c871 = "|";
|
|
299
|
+
const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c956 = "@@ ";
|
|
300
|
+
const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c958 = "@@ ";
|
|
301
|
+
const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c959 = "diff ";
|
|
302
|
+
const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c960 = "--- ";
|
|
303
|
+
const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c961 = "+";
|
|
304
|
+
const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c962 = "-";
|
|
305
|
+
const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c963 = " ";
|
|
306
|
+
const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c964 = "diff ";
|
|
307
|
+
const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c965 = "--- ";
|
|
308
|
+
const _M0FP36kazuph5reviw4core35strip__diff__prefix_2e_2abind_7c967 = "a/";
|
|
309
|
+
const _M0FP36kazuph5reviw4core35strip__diff__prefix_2e_2abind_7c968 = "b/";
|
|
310
|
+
const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c970 = "diff --git ";
|
|
311
|
+
const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c972 = "new file mode";
|
|
312
|
+
const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c973 = "deleted file mode";
|
|
313
|
+
const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c974 = "Binary files";
|
|
314
|
+
const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c975 = "index ";
|
|
315
|
+
const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c976 = "--- ";
|
|
316
|
+
const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c977 = "+++ ";
|
|
317
|
+
const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c978 = "--- ";
|
|
318
|
+
const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c979 = "+++ ";
|
|
307
319
|
const _M0FP36kazuph5reviw6server15active__servers = [];
|
|
308
320
|
const _M0FP36kazuph5reviw6server12all__results = [];
|
|
309
|
-
const
|
|
310
|
-
const
|
|
311
|
-
const
|
|
312
|
-
const
|
|
313
|
-
const
|
|
314
|
-
const
|
|
315
|
-
const
|
|
316
|
-
const
|
|
317
|
-
const
|
|
318
|
-
const
|
|
319
|
-
const
|
|
320
|
-
const
|
|
321
|
-
const
|
|
322
|
-
const
|
|
321
|
+
const _M0FP36kazuph5reviw6server26print__usage_2eusage_7c449 = "Usage: reviw <file...> [options]\n\nOptions:\n --port <n> Base port (default: 4989)\n --host <addr> Bind address (default: 127.0.0.1, use 0.0.0.0 for remote)\n --no-open Don't open browser\n -e, --encoding <enc> Force encoding (e.g. shift-jis, euc-jp)\n -h, --help Show help\n -v, --version Show version\n\nSupported formats: CSV, TSV, Markdown, Diff, Plain text\nPipe stdin for diff: git diff | reviw";
|
|
322
|
+
const _M0FP36kazuph5reviw6server28detect__mode_2e_2abind_7c497 = ".";
|
|
323
|
+
const _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c539 = "..";
|
|
324
|
+
const _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c542 = "scene_";
|
|
325
|
+
const _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c543 = ".jpg";
|
|
326
|
+
const _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c572 = "/";
|
|
327
|
+
const _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c570 = "..";
|
|
328
|
+
const _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c571 = "video/";
|
|
329
|
+
const _M0FP36kazuph5reviw6server41serve__static__file__head_2e_2abind_7c574 = "/";
|
|
330
|
+
const _M0FP36kazuph5reviw6server41serve__static__file__head_2e_2abind_7c573 = "..";
|
|
331
|
+
const _M0FP36kazuph5reviw6server31handle__request_2e_2abind_7c575 = "/video-timeline?";
|
|
332
|
+
const _M0FP36kazuph5reviw6server44try__activate__existing__tab_2e_2abind_7c576 = "true";
|
|
333
|
+
const _M0FP36kazuph5reviw6server44try__activate__existing__tab_2e_2abind_7c577 = "true";
|
|
334
|
+
const _M0FP36kazuph5reviw6server26_2ainit_2a_2e_2abind_7c589 = "-";
|
|
323
335
|
const _M0FP36kazuph5reviw6server15expected__count = _M0MP311moonbitlang4core3ref3Ref3newGiE(0);
|
|
324
336
|
const _M0FP36kazuph5reviw6server18encoding__override = _M0MP311moonbitlang4core3ref3Ref3newGsE("");
|
|
325
|
-
const
|
|
326
|
-
const
|
|
337
|
+
const _M0FP311moonbitlang4core7builtin33brute__force__find_2econstr_2f247 = 0;
|
|
338
|
+
const _M0FP311moonbitlang4core7builtin43boyer__moore__horspool__find_2econstr_2f233 = 0;
|
|
339
|
+
const _M0FP36kazuph5reviw6server10bind__host = _M0MP311moonbitlang4core3ref3Ref3newGsE("127.0.0.1");
|
|
327
340
|
const _M0FP36kazuph5reviw6server13ui__js__cache = _M0MP311moonbitlang4core3ref3Ref3newGsE("");
|
|
328
341
|
const _M0FP311moonbitlang4core7builtin4seed = _M0FP311moonbitlang4core7builtin12random__seed();
|
|
329
342
|
const _M0FP36kazuph5reviw4core16heading__counter = _M0MP311moonbitlang4core3ref3Ref3newGiE(0);
|
|
@@ -333,6 +346,9 @@ function _M0FP311moonbitlang4core5abort5abortGRP311moonbitlang4core6string10Stri
|
|
|
333
346
|
function _M0FP311moonbitlang4core5abort5abortGRP36kazuph5reviw6server7JsValueE(msg) {
|
|
334
347
|
return $panic();
|
|
335
348
|
}
|
|
349
|
+
function _M0FP311moonbitlang4core5abort5abortGsE(msg) {
|
|
350
|
+
return $panic();
|
|
351
|
+
}
|
|
336
352
|
function _M0MP311moonbitlang4core7builtin6Hasher8consume4(self, input) {
|
|
337
353
|
const _p = (self.acc >>> 0) + ((Math.imul(input, -1028477379) | 0) >>> 0) | 0;
|
|
338
354
|
const _p$2 = 17;
|
|
@@ -348,6 +364,9 @@ function _M0FP311moonbitlang4core7builtin5abortGRP311moonbitlang4core6string10St
|
|
|
348
364
|
function _M0FP311moonbitlang4core7builtin5abortGRP36kazuph5reviw6server7JsValueE(string, loc) {
|
|
349
365
|
return _M0FP311moonbitlang4core5abort5abortGRP36kazuph5reviw6server7JsValueE(`${string}\n at ${_M0IP016_24default__implP311moonbitlang4core7builtin4Show10to__stringGRP311moonbitlang4core7builtin9SourceLocE(loc)}\n`);
|
|
350
366
|
}
|
|
367
|
+
function _M0FP311moonbitlang4core7builtin5abortGsE(string, loc) {
|
|
368
|
+
return _M0FP311moonbitlang4core5abort5abortGsE(`${string}\n at ${_M0IP016_24default__implP311moonbitlang4core7builtin4Show10to__stringGRP311moonbitlang4core7builtin9SourceLocE(loc)}\n`);
|
|
369
|
+
}
|
|
351
370
|
function _M0MP311moonbitlang4core7builtin13StringBuilder11new_2einner(size_hint) {
|
|
352
371
|
return { val: "" };
|
|
353
372
|
}
|
|
@@ -1170,7 +1189,7 @@ function _M0FP311moonbitlang4core7builtin28boyer__moore__horspool__find(haystack
|
|
|
1170
1189
|
return undefined;
|
|
1171
1190
|
}
|
|
1172
1191
|
} else {
|
|
1173
|
-
return
|
|
1192
|
+
return _M0FP311moonbitlang4core7builtin43boyer__moore__horspool__find_2econstr_2f233;
|
|
1174
1193
|
}
|
|
1175
1194
|
}
|
|
1176
1195
|
function _M0FP311moonbitlang4core7builtin18brute__force__find(haystack, needle) {
|
|
@@ -1229,7 +1248,7 @@ function _M0FP311moonbitlang4core7builtin18brute__force__find(haystack, needle)
|
|
|
1229
1248
|
return undefined;
|
|
1230
1249
|
}
|
|
1231
1250
|
} else {
|
|
1232
|
-
return
|
|
1251
|
+
return _M0FP311moonbitlang4core7builtin33brute__force__find_2econstr_2f247;
|
|
1233
1252
|
}
|
|
1234
1253
|
}
|
|
1235
1254
|
function _M0MP311moonbitlang4core6string10StringView4find(self, str) {
|
|
@@ -1432,6 +1451,9 @@ function _M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core13ReviwQ
|
|
|
1432
1451
|
function _M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core7CommentE(self, value) {
|
|
1433
1452
|
_M0MP311moonbitlang4core7builtin7JSArray4push(self, value);
|
|
1434
1453
|
}
|
|
1454
|
+
function _M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core12MermaidErrorE(self, value) {
|
|
1455
|
+
_M0MP311moonbitlang4core7builtin7JSArray4push(self, value);
|
|
1456
|
+
}
|
|
1435
1457
|
function _M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core12ReviewResultE(self, value) {
|
|
1436
1458
|
_M0MP311moonbitlang4core7builtin7JSArray4push(self, value);
|
|
1437
1459
|
}
|
|
@@ -1769,6 +1791,124 @@ function _M0MP311moonbitlang4core7builtin3Map11from__arrayGssE(arr) {
|
|
|
1769
1791
|
}
|
|
1770
1792
|
return m;
|
|
1771
1793
|
}
|
|
1794
|
+
function _M0MP311moonbitlang4core7builtin3Map3getGssE(self, key) {
|
|
1795
|
+
const hash = _M0IP016_24default__implP311moonbitlang4core7builtin4Hash4hashGsE(key);
|
|
1796
|
+
let _tmp = 0;
|
|
1797
|
+
let _tmp$2 = hash & self.capacity_mask;
|
|
1798
|
+
while (true) {
|
|
1799
|
+
const i = _tmp;
|
|
1800
|
+
const idx = _tmp$2;
|
|
1801
|
+
const _tmp$3 = self.entries;
|
|
1802
|
+
$bound_check(_tmp$3, idx);
|
|
1803
|
+
const _bind = _tmp$3[idx];
|
|
1804
|
+
if (_bind === undefined) {
|
|
1805
|
+
return undefined;
|
|
1806
|
+
} else {
|
|
1807
|
+
const _Some = _bind;
|
|
1808
|
+
const _entry = _Some;
|
|
1809
|
+
if (_entry.hash === hash && _entry.key === key) {
|
|
1810
|
+
return _entry.value;
|
|
1811
|
+
}
|
|
1812
|
+
if (i > _entry.psl) {
|
|
1813
|
+
return undefined;
|
|
1814
|
+
}
|
|
1815
|
+
_tmp = i + 1 | 0;
|
|
1816
|
+
_tmp$2 = idx + 1 & self.capacity_mask;
|
|
1817
|
+
continue;
|
|
1818
|
+
}
|
|
1819
|
+
}
|
|
1820
|
+
}
|
|
1821
|
+
function _M0MP311moonbitlang4core7builtin3Map13remove__entryGssE(self, entry) {
|
|
1822
|
+
const _bind = entry.prev;
|
|
1823
|
+
if (_bind === -1) {
|
|
1824
|
+
self.head = entry.next;
|
|
1825
|
+
} else {
|
|
1826
|
+
const _tmp = self.entries;
|
|
1827
|
+
$bound_check(_tmp, _bind);
|
|
1828
|
+
const _p = _tmp[_bind];
|
|
1829
|
+
let _tmp$2;
|
|
1830
|
+
if (_p === undefined) {
|
|
1831
|
+
_tmp$2 = $panic();
|
|
1832
|
+
} else {
|
|
1833
|
+
const _p$2 = _p;
|
|
1834
|
+
_tmp$2 = _p$2;
|
|
1835
|
+
}
|
|
1836
|
+
_tmp$2.next = entry.next;
|
|
1837
|
+
}
|
|
1838
|
+
const _bind$2 = entry.next;
|
|
1839
|
+
if (_bind$2 === undefined) {
|
|
1840
|
+
self.tail = entry.prev;
|
|
1841
|
+
return;
|
|
1842
|
+
} else {
|
|
1843
|
+
const _Some = _bind$2;
|
|
1844
|
+
const _next = _Some;
|
|
1845
|
+
_next.prev = entry.prev;
|
|
1846
|
+
return;
|
|
1847
|
+
}
|
|
1848
|
+
}
|
|
1849
|
+
function _M0MP311moonbitlang4core7builtin3Map11shift__backGssE(self, idx) {
|
|
1850
|
+
let _tmp = idx;
|
|
1851
|
+
while (true) {
|
|
1852
|
+
const idx$2 = _tmp;
|
|
1853
|
+
const next = idx$2 + 1 & self.capacity_mask;
|
|
1854
|
+
_L: {
|
|
1855
|
+
const _tmp$2 = self.entries;
|
|
1856
|
+
$bound_check(_tmp$2, next);
|
|
1857
|
+
const _bind = _tmp$2[next];
|
|
1858
|
+
if (_bind === undefined) {
|
|
1859
|
+
break _L;
|
|
1860
|
+
} else {
|
|
1861
|
+
const _Some = _bind;
|
|
1862
|
+
const _x = _Some;
|
|
1863
|
+
const _x$2 = _x.psl;
|
|
1864
|
+
if (_x$2 === 0) {
|
|
1865
|
+
break _L;
|
|
1866
|
+
} else {
|
|
1867
|
+
_x.psl = _x.psl - 1 | 0;
|
|
1868
|
+
_M0MP311moonbitlang4core7builtin3Map10set__entryGssE(self, _x, idx$2);
|
|
1869
|
+
_tmp = next;
|
|
1870
|
+
continue;
|
|
1871
|
+
}
|
|
1872
|
+
}
|
|
1873
|
+
}
|
|
1874
|
+
const _tmp$2 = self.entries;
|
|
1875
|
+
$bound_check(_tmp$2, idx$2);
|
|
1876
|
+
_tmp$2[idx$2] = undefined;
|
|
1877
|
+
return;
|
|
1878
|
+
}
|
|
1879
|
+
}
|
|
1880
|
+
function _M0MP311moonbitlang4core7builtin3Map18remove__with__hashGssE(self, key, hash) {
|
|
1881
|
+
let _tmp = 0;
|
|
1882
|
+
let _tmp$2 = hash & self.capacity_mask;
|
|
1883
|
+
while (true) {
|
|
1884
|
+
const i = _tmp;
|
|
1885
|
+
const idx = _tmp$2;
|
|
1886
|
+
const _tmp$3 = self.entries;
|
|
1887
|
+
$bound_check(_tmp$3, idx);
|
|
1888
|
+
const _bind = _tmp$3[idx];
|
|
1889
|
+
if (_bind === undefined) {
|
|
1890
|
+
break;
|
|
1891
|
+
} else {
|
|
1892
|
+
const _Some = _bind;
|
|
1893
|
+
const _entry = _Some;
|
|
1894
|
+
if (_entry.hash === hash && _entry.key === key) {
|
|
1895
|
+
_M0MP311moonbitlang4core7builtin3Map13remove__entryGssE(self, _entry);
|
|
1896
|
+
_M0MP311moonbitlang4core7builtin3Map11shift__backGssE(self, idx);
|
|
1897
|
+
self.size = self.size - 1 | 0;
|
|
1898
|
+
break;
|
|
1899
|
+
}
|
|
1900
|
+
if (i > _entry.psl) {
|
|
1901
|
+
break;
|
|
1902
|
+
}
|
|
1903
|
+
_tmp = i + 1 | 0;
|
|
1904
|
+
_tmp$2 = idx + 1 & self.capacity_mask;
|
|
1905
|
+
continue;
|
|
1906
|
+
}
|
|
1907
|
+
}
|
|
1908
|
+
}
|
|
1909
|
+
function _M0MP311moonbitlang4core7builtin3Map6removeGssE(self, key) {
|
|
1910
|
+
_M0MP311moonbitlang4core7builtin3Map18remove__with__hashGssE(self, key, _M0IP016_24default__implP311moonbitlang4core7builtin4Hash4hashGsE(key));
|
|
1911
|
+
}
|
|
1772
1912
|
function _M0MP311moonbitlang4core7builtin5Iter24nextGicE(self) {
|
|
1773
1913
|
return _M0MP311moonbitlang4core7builtin4Iter4nextGUicEE(self);
|
|
1774
1914
|
}
|
|
@@ -1935,6 +2075,16 @@ function _M0MP311moonbitlang4core5array5Array6removeGRP36kazuph5reviw6server7JsV
|
|
|
1935
2075
|
return _M0FP311moonbitlang4core7builtin5abortGRP36kazuph5reviw6server7JsValueE(`index out of bounds: the len is from 0 to ${_M0IP016_24default__implP311moonbitlang4core7builtin4Show10to__stringGiE(self.length)} but the index is ${_M0IP016_24default__implP311moonbitlang4core7builtin4Show10to__stringGiE(index)}`, "@moonbitlang/core/builtin:arraycore_js.mbt:251:5-253:6");
|
|
1936
2076
|
}
|
|
1937
2077
|
}
|
|
2078
|
+
function _M0MP311moonbitlang4core5array5Array6removeGsE(self, index) {
|
|
2079
|
+
if (index >= 0 && index < self.length) {
|
|
2080
|
+
$bound_check(self, index);
|
|
2081
|
+
const value = self[index];
|
|
2082
|
+
_M0MP311moonbitlang4core7builtin7JSArray6splice(self, index, 1);
|
|
2083
|
+
return value;
|
|
2084
|
+
} else {
|
|
2085
|
+
return _M0FP311moonbitlang4core7builtin5abortGsE(`index out of bounds: the len is from 0 to ${_M0IP016_24default__implP311moonbitlang4core7builtin4Show10to__stringGiE(self.length)} but the index is ${_M0IP016_24default__implP311moonbitlang4core7builtin4Show10to__stringGiE(index)}`, "@moonbitlang/core/builtin:arraycore_js.mbt:251:5-253:6");
|
|
2086
|
+
}
|
|
2087
|
+
}
|
|
1938
2088
|
function _M0MP311moonbitlang4core5array5Array4copyGsE(self) {
|
|
1939
2089
|
return _M0MP311moonbitlang4core7builtin7JSArray4copy(self);
|
|
1940
2090
|
}
|
|
@@ -1947,38 +2097,38 @@ function _M0MP311moonbitlang4core3ref3Ref3newGsE(x) {
|
|
|
1947
2097
|
function _M0MP311moonbitlang4core3ref3Ref3newGiE(x) {
|
|
1948
2098
|
return { val: x };
|
|
1949
2099
|
}
|
|
1950
|
-
function _M0IP36kazuph5reviw4core8FileModeP311moonbitlang4core7builtin2Eq5equal(
|
|
1951
|
-
switch (
|
|
2100
|
+
function _M0IP36kazuph5reviw4core8FileModeP311moonbitlang4core7builtin2Eq5equal(_x_571, _x_572) {
|
|
2101
|
+
switch (_x_571) {
|
|
1952
2102
|
case 0: {
|
|
1953
|
-
if (
|
|
2103
|
+
if (_x_572 === 0) {
|
|
1954
2104
|
return true;
|
|
1955
2105
|
} else {
|
|
1956
2106
|
return false;
|
|
1957
2107
|
}
|
|
1958
2108
|
}
|
|
1959
2109
|
case 1: {
|
|
1960
|
-
if (
|
|
2110
|
+
if (_x_572 === 1) {
|
|
1961
2111
|
return true;
|
|
1962
2112
|
} else {
|
|
1963
2113
|
return false;
|
|
1964
2114
|
}
|
|
1965
2115
|
}
|
|
1966
2116
|
case 2: {
|
|
1967
|
-
if (
|
|
2117
|
+
if (_x_572 === 2) {
|
|
1968
2118
|
return true;
|
|
1969
2119
|
} else {
|
|
1970
2120
|
return false;
|
|
1971
2121
|
}
|
|
1972
2122
|
}
|
|
1973
2123
|
case 3: {
|
|
1974
|
-
if (
|
|
2124
|
+
if (_x_572 === 3) {
|
|
1975
2125
|
return true;
|
|
1976
2126
|
} else {
|
|
1977
2127
|
return false;
|
|
1978
2128
|
}
|
|
1979
2129
|
}
|
|
1980
2130
|
default: {
|
|
1981
|
-
if (
|
|
2131
|
+
if (_x_572 === 4) {
|
|
1982
2132
|
return true;
|
|
1983
2133
|
} else {
|
|
1984
2134
|
return false;
|
|
@@ -1987,7 +2137,7 @@ function _M0IP36kazuph5reviw4core8FileModeP311moonbitlang4core7builtin2Eq5equal(
|
|
|
1987
2137
|
}
|
|
1988
2138
|
}
|
|
1989
2139
|
function _M0FP36kazuph5reviw4core20yaml__escape__string(s) {
|
|
1990
|
-
const needs_quote = _M0MP311moonbitlang4core6string6String8contains(s, { str:
|
|
2140
|
+
const needs_quote = _M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c657, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c657.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c658, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c658.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c659, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c659.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c660, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c660.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c661, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c661.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c662, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c662.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c663, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c663.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c664, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c664.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c665, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c665.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c666, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c666.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c667, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c667.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c668, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c668.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c669, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c669.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c670, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c670.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c671, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c671.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c672, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c672.length }) || _M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c673, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c673.length }))))))))))))))));
|
|
1991
2141
|
if (needs_quote) {
|
|
1992
2142
|
const buf = _M0MP311moonbitlang4core7builtin13StringBuilder11new_2einner(0);
|
|
1993
2143
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger11write__char(buf, 39);
|
|
@@ -2078,6 +2228,28 @@ function _M0FP36kazuph5reviw4core16review__to__yaml(result) {
|
|
|
2078
2228
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core20yaml__escape__string(result.answers));
|
|
2079
2229
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger11write__char(buf, 10);
|
|
2080
2230
|
}
|
|
2231
|
+
if (result.mermaid_errors.length > 0) {
|
|
2232
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "mermaid_errors:\n");
|
|
2233
|
+
const _arr$2 = result.mermaid_errors;
|
|
2234
|
+
const _len$2 = _arr$2.length;
|
|
2235
|
+
let _tmp$2 = 0;
|
|
2236
|
+
while (true) {
|
|
2237
|
+
const _i = _tmp$2;
|
|
2238
|
+
if (_i < _len$2) {
|
|
2239
|
+
const err = _arr$2[_i];
|
|
2240
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, " - line: ");
|
|
2241
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0MP311moonbitlang4core3int3Int18to__string_2einner(err.line, 10));
|
|
2242
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger11write__char(buf, 10);
|
|
2243
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, " error: ");
|
|
2244
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core20yaml__escape__string(err.message));
|
|
2245
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger11write__char(buf, 10);
|
|
2246
|
+
_tmp$2 = _i + 1 | 0;
|
|
2247
|
+
continue;
|
|
2248
|
+
} else {
|
|
2249
|
+
break;
|
|
2250
|
+
}
|
|
2251
|
+
}
|
|
2252
|
+
}
|
|
2081
2253
|
return buf.val;
|
|
2082
2254
|
}
|
|
2083
2255
|
function _M0FP36kazuph5reviw4core17reviews__to__yaml(results) {
|
|
@@ -2129,6 +2301,28 @@ function _M0FP36kazuph5reviw4core17reviews__to__yaml(results) {
|
|
|
2129
2301
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core20yaml__escape__string(result.answers));
|
|
2130
2302
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger11write__char(buf, 10);
|
|
2131
2303
|
}
|
|
2304
|
+
if (result.mermaid_errors.length > 0) {
|
|
2305
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, " mermaid_errors:\n");
|
|
2306
|
+
const _arr$2 = result.mermaid_errors;
|
|
2307
|
+
const _len$3 = _arr$2.length;
|
|
2308
|
+
let _tmp$3 = 0;
|
|
2309
|
+
while (true) {
|
|
2310
|
+
const _i$2 = _tmp$3;
|
|
2311
|
+
if (_i$2 < _len$3) {
|
|
2312
|
+
const err = _arr$2[_i$2];
|
|
2313
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, " - line: ");
|
|
2314
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0MP311moonbitlang4core3int3Int18to__string_2einner(err.line, 10));
|
|
2315
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger11write__char(buf, 10);
|
|
2316
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, " error: ");
|
|
2317
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core20yaml__escape__string(err.message));
|
|
2318
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger11write__char(buf, 10);
|
|
2319
|
+
_tmp$3 = _i$2 + 1 | 0;
|
|
2320
|
+
continue;
|
|
2321
|
+
} else {
|
|
2322
|
+
break;
|
|
2323
|
+
}
|
|
2324
|
+
}
|
|
2325
|
+
}
|
|
2132
2326
|
_tmp = _i + 1 | 0;
|
|
2133
2327
|
continue;
|
|
2134
2328
|
} else {
|
|
@@ -2204,7 +2398,7 @@ function _M0FP36kazuph5reviw4core16parse__int__safe(s) {
|
|
|
2204
2398
|
}
|
|
2205
2399
|
function _M0FP36kazuph5reviw4core16split__to__lines(input) {
|
|
2206
2400
|
const result = [];
|
|
2207
|
-
const _it = _M0MP311moonbitlang4core6string6String5split(input, { str:
|
|
2401
|
+
const _it = _M0MP311moonbitlang4core6string6String5split(input, { str: _M0FP36kazuph5reviw4core32split__to__lines_2e_2abind_7c702, start: 0, end: _M0FP36kazuph5reviw4core32split__to__lines_2e_2abind_7c702.length });
|
|
2208
2402
|
while (true) {
|
|
2209
2403
|
const _bind = _M0MP311moonbitlang4core7builtin4Iter4nextGRP311moonbitlang4core6string10StringViewE(_it);
|
|
2210
2404
|
if (_bind === undefined) {
|
|
@@ -2305,12 +2499,12 @@ function _M0FP36kazuph5reviw4core4trim(s) {
|
|
|
2305
2499
|
return "";
|
|
2306
2500
|
}
|
|
2307
2501
|
const buf = _M0MP311moonbitlang4core7builtin13StringBuilder11new_2einner(0);
|
|
2308
|
-
const
|
|
2309
|
-
const
|
|
2310
|
-
let _tmp =
|
|
2502
|
+
const _start454 = start;
|
|
2503
|
+
const _end455 = end;
|
|
2504
|
+
let _tmp = _start454;
|
|
2311
2505
|
while (true) {
|
|
2312
2506
|
const i = _tmp;
|
|
2313
|
-
if (i <=
|
|
2507
|
+
if (i <= _end455) {
|
|
2314
2508
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger11write__char(buf, _M0MP311moonbitlang4core5array5Array2atGcE(chars, i));
|
|
2315
2509
|
_tmp = i + 1 | 0;
|
|
2316
2510
|
continue;
|
|
@@ -2350,10 +2544,10 @@ function _M0FP36kazuph5reviw4core23parse__single__question(lines, start, end) {
|
|
|
2350
2544
|
if (i < end) {
|
|
2351
2545
|
const line = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
|
|
2352
2546
|
const trimmed = _M0FP36kazuph5reviw4core4trim(line);
|
|
2353
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(trimmed, { str:
|
|
2547
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(trimmed, { str: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c715, start: 0, end: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c715.length }) && _M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c716, start: 0, end: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c716.length })) {
|
|
2354
2548
|
break;
|
|
2355
2549
|
}
|
|
2356
|
-
if (trimmed.length === 0 || !_M0MP311moonbitlang4core6string6String11has__prefix(line, { str:
|
|
2550
|
+
if (trimmed.length === 0 || !_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c717, start: 0, end: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c717.length }) && !_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c718, start: 0, end: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c718.length })) {
|
|
2357
2551
|
break;
|
|
2358
2552
|
}
|
|
2359
2553
|
const content_colon = _M0FP36kazuph5reviw4core15index__of__char(trimmed, 58);
|
|
@@ -2378,7 +2572,7 @@ function _M0FP36kazuph5reviw4core23parse__single__question(lines, start, end) {
|
|
|
2378
2572
|
if (i < end) {
|
|
2379
2573
|
const opt_line = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
|
|
2380
2574
|
const opt_trimmed = _M0FP36kazuph5reviw4core4trim(opt_line);
|
|
2381
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(opt_trimmed, { str:
|
|
2575
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(opt_trimmed, { str: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c720, start: 0, end: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c720.length }) && _M0MP311moonbitlang4core6string6String11has__prefix(opt_line, { str: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c721, start: 0, end: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c721.length })) {
|
|
2382
2576
|
_M0MP311moonbitlang4core5array5Array4pushGsE(options, _M0FP36kazuph5reviw4core4trim(_M0FP36kazuph5reviw4core11safe__slice(opt_trimmed, 2)));
|
|
2383
2577
|
i = i + 1 | 0;
|
|
2384
2578
|
} else {
|
|
@@ -2418,12 +2612,12 @@ function _M0FP36kazuph5reviw4core23parse__reviw__questions(lines, start, end) {
|
|
|
2418
2612
|
if (i < end) {
|
|
2419
2613
|
const item_line = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
|
|
2420
2614
|
const trimmed = _M0FP36kazuph5reviw4core4trim(item_line);
|
|
2421
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(trimmed, { str:
|
|
2615
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(trimmed, { str: _M0FP36kazuph5reviw4core39parse__reviw__questions_2e_2abind_7c725, start: 0, end: _M0FP36kazuph5reviw4core39parse__reviw__questions_2e_2abind_7c725.length })) {
|
|
2422
2616
|
const q = _M0FP36kazuph5reviw4core23parse__single__question(lines, i, end);
|
|
2423
2617
|
_M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core13ReviwQuestionE(questions, q._0);
|
|
2424
2618
|
i = q._1;
|
|
2425
2619
|
} else {
|
|
2426
|
-
if (trimmed.length === 0 || !_M0MP311moonbitlang4core6string6String11has__prefix(item_line, { str:
|
|
2620
|
+
if (trimmed.length === 0 || !_M0MP311moonbitlang4core6string6String11has__prefix(item_line, { str: _M0FP36kazuph5reviw4core39parse__reviw__questions_2e_2abind_7c726, start: 0, end: _M0FP36kazuph5reviw4core39parse__reviw__questions_2e_2abind_7c726.length })) {
|
|
2427
2621
|
break;
|
|
2428
2622
|
} else {
|
|
2429
2623
|
i = i + 1 | 0;
|
|
@@ -2573,7 +2767,7 @@ function _M0FP36kazuph5reviw4core20is__horizontal__rule(line) {
|
|
|
2573
2767
|
}
|
|
2574
2768
|
function _M0FP36kazuph5reviw4core22is__html__block__start(line) {
|
|
2575
2769
|
const t = _M0FP36kazuph5reviw4core4trim(line);
|
|
2576
|
-
return _M0MP311moonbitlang4core6string6String11has__prefix(t, { str:
|
|
2770
|
+
return _M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c741, start: 0, end: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c741.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c742, start: 0, end: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c742.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c743, start: 0, end: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c743.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c744, start: 0, end: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c744.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c745, start: 0, end: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c745.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c746, start: 0, end: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c746.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c747, start: 0, end: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c747.length }) || _M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c748, start: 0, end: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c748.length })))))));
|
|
2577
2771
|
}
|
|
2578
2772
|
function _M0FP36kazuph5reviw4core23is__ordered__list__item(line) {
|
|
2579
2773
|
const chars = _M0MP311moonbitlang4core6string6String9to__array(line);
|
|
@@ -2592,15 +2786,15 @@ function _M0FP36kazuph5reviw4core23is__ordered__list__item(line) {
|
|
|
2592
2786
|
return i < (chars.length - 1 | 0) && (_M0MP311moonbitlang4core5array5Array2atGcE(chars, i) === 46 && _M0MP311moonbitlang4core5array5Array2atGcE(chars, i + 1 | 0) === 32);
|
|
2593
2787
|
}
|
|
2594
2788
|
function _M0FP36kazuph5reviw4core16is__block__start(line) {
|
|
2595
|
-
return _M0MP311moonbitlang4core6string6String11has__prefix(line, { str:
|
|
2789
|
+
return _M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c750, start: 0, end: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c750.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c751, start: 0, end: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c751.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c752, start: 0, end: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c752.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c753, start: 0, end: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c753.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c754, start: 0, end: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c754.length }) || (_M0FP36kazuph5reviw4core23is__ordered__list__item(line) || (_M0FP36kazuph5reviw4core20is__horizontal__rule(line) || _M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c755, start: 0, end: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c755.length }) && _M0FP36kazuph5reviw4core22is__html__block__start(line)))))));
|
|
2596
2790
|
}
|
|
2597
2791
|
function _M0FP36kazuph5reviw4core20is__mermaid__content(text) {
|
|
2598
2792
|
const t = _M0FP36kazuph5reviw4core4trim(text);
|
|
2599
|
-
return _M0MP311moonbitlang4core6string6String11has__prefix(t, { str:
|
|
2793
|
+
return _M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c756, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c756.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c757, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c757.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c758, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c758.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c759, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c759.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c760, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c760.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c761, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c761.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c762, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c762.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c763, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c763.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c764, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c764.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c765, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c765.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c766, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c766.length }) || _M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c767, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c767.length })))))))))));
|
|
2600
2794
|
}
|
|
2601
2795
|
function _M0FP36kazuph5reviw4core20is__table__separator(line) {
|
|
2602
2796
|
const t = _M0FP36kazuph5reviw4core4trim(line);
|
|
2603
|
-
if (!_M0MP311moonbitlang4core6string6String8contains(t, { str:
|
|
2797
|
+
if (!_M0MP311moonbitlang4core6string6String8contains(t, { str: _M0FP36kazuph5reviw4core36is__table__separator_2e_2abind_7c768, start: 0, end: _M0FP36kazuph5reviw4core36is__table__separator_2e_2abind_7c768.length }) || !_M0MP311moonbitlang4core6string6String8contains(t, { str: _M0FP36kazuph5reviw4core36is__table__separator_2e_2abind_7c769, start: 0, end: _M0FP36kazuph5reviw4core36is__table__separator_2e_2abind_7c769.length })) {
|
|
2604
2798
|
return false;
|
|
2605
2799
|
}
|
|
2606
2800
|
const chars = _M0MP311moonbitlang4core6string6String9to__array(t);
|
|
@@ -2655,8 +2849,8 @@ function _M0FP36kazuph5reviw4core18make__heading__key(text, counter) {
|
|
|
2655
2849
|
function _M0FP36kazuph5reviw4core17parse__table__row(line) {
|
|
2656
2850
|
const result = [];
|
|
2657
2851
|
const t = _M0FP36kazuph5reviw4core4trim(line);
|
|
2658
|
-
const inner = _M0MP311moonbitlang4core6string6String11has__prefix(t, { str:
|
|
2659
|
-
const _it = _M0MP311moonbitlang4core6string6String5split(inner, { str:
|
|
2852
|
+
const inner = _M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c782, start: 0, end: _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c782.length }) && _M0MP311moonbitlang4core6string6String11has__suffix(t, { str: _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c783, start: 0, end: _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c783.length }) ? _M0FP36kazuph5reviw4core18safe__slice__range(t, 1, t.length - 1 | 0) : _M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c784, start: 0, end: _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c784.length }) ? _M0FP36kazuph5reviw4core11safe__slice(t, 1) : t;
|
|
2853
|
+
const _it = _M0MP311moonbitlang4core6string6String5split(inner, { str: _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c781, start: 0, end: _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c781.length });
|
|
2660
2854
|
while (true) {
|
|
2661
2855
|
const _bind = _M0MP311moonbitlang4core7builtin4Iter4nextGRP311moonbitlang4core6string10StringViewE(_it);
|
|
2662
2856
|
if (_bind === undefined) {
|
|
@@ -2672,7 +2866,7 @@ function _M0FP36kazuph5reviw4core17parse__table__row(line) {
|
|
|
2672
2866
|
}
|
|
2673
2867
|
function _M0FP36kazuph5reviw4core14is__video__url(url) {
|
|
2674
2868
|
const lower = _M0MP311moonbitlang4core6string6String9to__lower(url);
|
|
2675
|
-
return _M0MP311moonbitlang4core6string6String11has__suffix(lower, { str:
|
|
2869
|
+
return _M0MP311moonbitlang4core6string6String11has__suffix(lower, { str: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c785, start: 0, end: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c785.length }) || (_M0MP311moonbitlang4core6string6String11has__suffix(lower, { str: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c786, start: 0, end: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c786.length }) || (_M0MP311moonbitlang4core6string6String11has__suffix(lower, { str: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c787, start: 0, end: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c787.length }) || (_M0MP311moonbitlang4core6string6String11has__suffix(lower, { str: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c788, start: 0, end: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c788.length }) || (_M0MP311moonbitlang4core6string6String11has__suffix(lower, { str: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c789, start: 0, end: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c789.length }) || (_M0MP311moonbitlang4core6string6String11has__suffix(lower, { str: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c790, start: 0, end: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c790.length }) || _M0MP311moonbitlang4core6string6String11has__suffix(lower, { str: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c791, start: 0, end: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c791.length }))))));
|
|
2676
2870
|
}
|
|
2677
2871
|
function _M0FP36kazuph5reviw4core14render__inline(text) {
|
|
2678
2872
|
const chars = _M0MP311moonbitlang4core6string6String9to__array(text);
|
|
@@ -2771,7 +2965,7 @@ function _M0FP36kazuph5reviw4core14render__inline(text) {
|
|
|
2771
2965
|
const link_text = _M0FP36kazuph5reviw4core18safe__slice__range(text, text_start, text_end);
|
|
2772
2966
|
const link_url = _M0FP36kazuph5reviw4core18safe__slice__range(text, url_start, url_end);
|
|
2773
2967
|
const lower_url = _M0MP311moonbitlang4core6string6String9to__lower(link_url);
|
|
2774
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(lower_url, { str:
|
|
2968
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(lower_url, { str: _M0FP36kazuph5reviw4core30render__inline_2e_2abind_7c797, start: 0, end: _M0FP36kazuph5reviw4core30render__inline_2e_2abind_7c797.length })) {
|
|
2775
2969
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core12escape__html(link_text));
|
|
2776
2970
|
} else {
|
|
2777
2971
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<a href=\"");
|
|
@@ -2968,18 +3162,18 @@ function _M0FP36kazuph5reviw4core17is__allowed__attr(name) {
|
|
|
2968
3162
|
}
|
|
2969
3163
|
function _M0FP36kazuph5reviw4core18is__dangerous__css(value) {
|
|
2970
3164
|
const lower = _M0MP311moonbitlang4core6string6String9to__lower(value);
|
|
2971
|
-
return _M0MP311moonbitlang4core6string6String8contains(lower, { str:
|
|
3165
|
+
return _M0MP311moonbitlang4core6string6String8contains(lower, { str: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c810, start: 0, end: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c810.length }) || (_M0MP311moonbitlang4core6string6String8contains(lower, { str: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c811, start: 0, end: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c811.length }) || (_M0MP311moonbitlang4core6string6String8contains(lower, { str: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c812, start: 0, end: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c812.length }) || (_M0MP311moonbitlang4core6string6String8contains(lower, { str: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c813, start: 0, end: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c813.length }) || (_M0MP311moonbitlang4core6string6String8contains(lower, { str: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c814, start: 0, end: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c814.length }) || (_M0MP311moonbitlang4core6string6String8contains(lower, { str: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c815, start: 0, end: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c815.length }) || (_M0MP311moonbitlang4core6string6String8contains(lower, { str: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c816, start: 0, end: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c816.length }) || _M0MP311moonbitlang4core6string6String8contains(lower, { str: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c817, start: 0, end: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c817.length })))))));
|
|
2972
3166
|
}
|
|
2973
3167
|
function _M0FP36kazuph5reviw4core24is__event__handler__attr(name) {
|
|
2974
|
-
return _M0MP311moonbitlang4core6string6String11has__prefix(name, { str:
|
|
3168
|
+
return _M0MP311moonbitlang4core6string6String11has__prefix(name, { str: _M0FP36kazuph5reviw4core40is__event__handler__attr_2e_2abind_7c818, start: 0, end: _M0FP36kazuph5reviw4core40is__event__handler__attr_2e_2abind_7c818.length });
|
|
2975
3169
|
}
|
|
2976
3170
|
function _M0FP36kazuph5reviw4core13is__safe__url(url) {
|
|
2977
3171
|
const lower = _M0MP311moonbitlang4core6string6String9to__lower(url);
|
|
2978
3172
|
const trimmed = _M0FP36kazuph5reviw4core4trim(lower);
|
|
2979
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(trimmed, { str:
|
|
3173
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(trimmed, { str: _M0FP36kazuph5reviw4core29is__safe__url_2e_2abind_7c819, start: 0, end: _M0FP36kazuph5reviw4core29is__safe__url_2e_2abind_7c819.length })) {
|
|
2980
3174
|
return false;
|
|
2981
3175
|
}
|
|
2982
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(trimmed, { str:
|
|
3176
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(trimmed, { str: _M0FP36kazuph5reviw4core29is__safe__url_2e_2abind_7c820, start: 0, end: _M0FP36kazuph5reviw4core29is__safe__url_2e_2abind_7c820.length })) {
|
|
2983
3177
|
return false;
|
|
2984
3178
|
}
|
|
2985
3179
|
return true;
|
|
@@ -3318,7 +3512,7 @@ function _M0FP36kazuph5reviw4core14sanitize__html(input) {
|
|
|
3318
3512
|
if (!_M0FP36kazuph5reviw4core16is__allowed__tag(tag_name) && tag_name.length > 0) {
|
|
3319
3513
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<");
|
|
3320
3514
|
const tag_content = _M0FP36kazuph5reviw4core18safe__slice__range(input, tag_start + 1 | 0, tag_end);
|
|
3321
|
-
const trimmed_content = _M0MP311moonbitlang4core6string6String11has__suffix(tag_content, { str:
|
|
3515
|
+
const trimmed_content = _M0MP311moonbitlang4core6string6String11has__suffix(tag_content, { str: _M0FP36kazuph5reviw4core30sanitize__html_2e_2abind_7c836, start: 0, end: _M0FP36kazuph5reviw4core30sanitize__html_2e_2abind_7c836.length }) ? _M0FP36kazuph5reviw4core18safe__slice__range(tag_content, 0, tag_content.length - 1 | 0) : tag_content;
|
|
3322
3516
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core12escape__html(trimmed_content));
|
|
3323
3517
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, ">");
|
|
3324
3518
|
i = tag_end;
|
|
@@ -3362,7 +3556,7 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
|
|
|
3362
3556
|
i = i + 1 | 0;
|
|
3363
3557
|
continue;
|
|
3364
3558
|
}
|
|
3365
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str:
|
|
3559
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c838, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c838.length }) && _M0FP36kazuph5reviw4core22is__html__block__start(line)) {
|
|
3366
3560
|
const tag_name = _M0FP36kazuph5reviw4core24extract__html__tag__name(line);
|
|
3367
3561
|
if (tag_name === "details") {
|
|
3368
3562
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<details>\n");
|
|
@@ -3370,13 +3564,13 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
|
|
|
3370
3564
|
while (true) {
|
|
3371
3565
|
if (i < len) {
|
|
3372
3566
|
const current = _M0FP36kazuph5reviw4core4trim(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i));
|
|
3373
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(current, { str:
|
|
3567
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(current, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c840, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c840.length })) {
|
|
3374
3568
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core14sanitize__html(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i)));
|
|
3375
3569
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "\n");
|
|
3376
3570
|
i = i + 1 | 0;
|
|
3377
3571
|
break;
|
|
3378
3572
|
} else {
|
|
3379
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(current, { str:
|
|
3573
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(current, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c841, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c841.length })) {
|
|
3380
3574
|
break;
|
|
3381
3575
|
}
|
|
3382
3576
|
}
|
|
@@ -3391,14 +3585,14 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
|
|
|
3391
3585
|
while (true) {
|
|
3392
3586
|
if (i < len && depth > 0) {
|
|
3393
3587
|
const current = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
|
|
3394
|
-
if (_M0MP311moonbitlang4core6string6String8contains(current, { str:
|
|
3588
|
+
if (_M0MP311moonbitlang4core6string6String8contains(current, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c843, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c843.length })) {
|
|
3395
3589
|
depth = depth - 1 | 0;
|
|
3396
3590
|
if (depth === 0) {
|
|
3397
3591
|
i = i + 1 | 0;
|
|
3398
3592
|
break;
|
|
3399
3593
|
}
|
|
3400
3594
|
}
|
|
3401
|
-
if (_M0MP311moonbitlang4core6string6String8contains(current, { str:
|
|
3595
|
+
if (_M0MP311moonbitlang4core6string6String8contains(current, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c844, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c844.length })) {
|
|
3402
3596
|
depth = depth + 1 | 0;
|
|
3403
3597
|
}
|
|
3404
3598
|
_M0MP311moonbitlang4core5array5Array4pushGsE(inner_lines, current);
|
|
@@ -3443,7 +3637,7 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
|
|
|
3443
3637
|
}
|
|
3444
3638
|
continue;
|
|
3445
3639
|
}
|
|
3446
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str:
|
|
3640
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c848, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c848.length })) {
|
|
3447
3641
|
const level = _M0FP36kazuph5reviw4core21count__heading__level(line);
|
|
3448
3642
|
if (level >= 1 && level <= 6) {
|
|
3449
3643
|
const content = _M0FP36kazuph5reviw4core4trim(_M0FP36kazuph5reviw4core11safe__slice(line, level + 1 | 0));
|
|
@@ -3469,13 +3663,14 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
|
|
|
3469
3663
|
i = i + 1 | 0;
|
|
3470
3664
|
continue;
|
|
3471
3665
|
}
|
|
3472
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str:
|
|
3666
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c849, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c849.length })) {
|
|
3473
3667
|
const lang = _M0FP36kazuph5reviw4core4trim(_M0FP36kazuph5reviw4core11safe__slice(line, 3));
|
|
3668
|
+
const code_block_start_line = i + 1 | 0;
|
|
3474
3669
|
i = i + 1 | 0;
|
|
3475
3670
|
const code_buf = _M0MP311moonbitlang4core7builtin13StringBuilder11new_2einner(0);
|
|
3476
3671
|
let code_first = true;
|
|
3477
3672
|
while (true) {
|
|
3478
|
-
if (i < len && !_M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), { str:
|
|
3673
|
+
if (i < len && !_M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c851, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c851.length })) {
|
|
3479
3674
|
if (!code_first) {
|
|
3480
3675
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(code_buf, "\n");
|
|
3481
3676
|
}
|
|
@@ -3487,13 +3682,20 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
|
|
|
3487
3682
|
break;
|
|
3488
3683
|
}
|
|
3489
3684
|
}
|
|
3685
|
+
const code_block_end_line = i < len ? i + 1 | 0 : len;
|
|
3490
3686
|
if (i < len) {
|
|
3491
3687
|
i = i + 1 | 0;
|
|
3492
3688
|
}
|
|
3493
3689
|
const code_text = code_buf.val;
|
|
3494
3690
|
if (lang === "mermaid" || _M0FP36kazuph5reviw4core20is__mermaid__content(code_text)) {
|
|
3495
|
-
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<div class=\"mermaid-container\"
|
|
3691
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<div class=\"mermaid-container\" data-source-start-line=\"");
|
|
3692
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0MP311moonbitlang4core3int3Int18to__string_2einner(code_block_start_line, 10));
|
|
3693
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "\" data-source-end-line=\"");
|
|
3694
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0MP311moonbitlang4core3int3Int18to__string_2einner(code_block_end_line, 10));
|
|
3695
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "\"><div class=\"mermaid\" data-source=\"");
|
|
3496
3696
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core12escape__html(code_text));
|
|
3697
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "\" data-source-line=\"");
|
|
3698
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0MP311moonbitlang4core3int3Int18to__string_2einner(code_block_start_line, 10));
|
|
3497
3699
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "\">");
|
|
3498
3700
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core12escape__html(code_text));
|
|
3499
3701
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "</div><button class=\"mermaid-fullscreen-btn\" title=\"Fullscreen\">⛶</button></div>\n");
|
|
@@ -3510,10 +3712,10 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
|
|
|
3510
3712
|
}
|
|
3511
3713
|
continue;
|
|
3512
3714
|
}
|
|
3513
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str:
|
|
3715
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c852, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c852.length })) {
|
|
3514
3716
|
const quote_lines = [];
|
|
3515
3717
|
while (true) {
|
|
3516
|
-
if (i < len && _M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), { str:
|
|
3718
|
+
if (i < len && _M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c854, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c854.length })) {
|
|
3517
3719
|
const content = _M0FP36kazuph5reviw4core4trim(_M0FP36kazuph5reviw4core11safe__slice(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), 1));
|
|
3518
3720
|
_M0MP311moonbitlang4core5array5Array4pushGsE(quote_lines, content);
|
|
3519
3721
|
i = i + 1 | 0;
|
|
@@ -3541,16 +3743,16 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
|
|
|
3541
3743
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "</blockquote>\n");
|
|
3542
3744
|
continue;
|
|
3543
3745
|
}
|
|
3544
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str:
|
|
3746
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c857, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c857.length }) || _M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c858, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c858.length })) {
|
|
3545
3747
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<ul>\n");
|
|
3546
3748
|
while (true) {
|
|
3547
|
-
if (i < len && (_M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), { str:
|
|
3749
|
+
if (i < len && (_M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c863, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c863.length }) || _M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c864, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c864.length }))) {
|
|
3548
3750
|
const item_text = _M0FP36kazuph5reviw4core11safe__slice(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), 2);
|
|
3549
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(item_text, { str:
|
|
3751
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(item_text, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c860, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c860.length })) {
|
|
3550
3752
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<li class=\"task-list-item\"><input type=\"checkbox\" disabled /> ");
|
|
3551
3753
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core14render__inline(_M0FP36kazuph5reviw4core11safe__slice(item_text, 4)));
|
|
3552
3754
|
} else {
|
|
3553
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(item_text, { str:
|
|
3755
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(item_text, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c861, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c861.length }) || _M0MP311moonbitlang4core6string6String11has__prefix(item_text, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c862, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c862.length })) {
|
|
3554
3756
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<li class=\"task-list-item\"><input type=\"checkbox\" checked disabled /> ");
|
|
3555
3757
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core14render__inline(_M0FP36kazuph5reviw4core11safe__slice(item_text, 4)));
|
|
3556
3758
|
} else {
|
|
@@ -3607,7 +3809,7 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
|
|
|
3607
3809
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "</tr>\n</thead>\n<tbody>\n");
|
|
3608
3810
|
i = i + 2 | 0;
|
|
3609
3811
|
while (true) {
|
|
3610
|
-
if (i < len && _M0MP311moonbitlang4core6string6String8contains(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), { str:
|
|
3812
|
+
if (i < len && _M0MP311moonbitlang4core6string6String8contains(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c871, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c871.length })) {
|
|
3611
3813
|
const cells = _M0FP36kazuph5reviw4core17parse__table__row(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i));
|
|
3612
3814
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<tr>\n");
|
|
3613
3815
|
const _len$2 = cells.length;
|
|
@@ -3674,11 +3876,11 @@ function _M0FP36kazuph5reviw4core15parse__markdown(input) {
|
|
|
3674
3876
|
let content_start = 0;
|
|
3675
3877
|
if (lines.length > 0 && _M0MP311moonbitlang4core5array5Array2atGsE(lines, 0) === "---") {
|
|
3676
3878
|
let end_idx = -1;
|
|
3677
|
-
const
|
|
3879
|
+
const _end473 = lines.length;
|
|
3678
3880
|
let _tmp = 1;
|
|
3679
3881
|
while (true) {
|
|
3680
3882
|
const i = _tmp;
|
|
3681
|
-
if (i <
|
|
3883
|
+
if (i < _end473) {
|
|
3682
3884
|
if (_M0MP311moonbitlang4core5array5Array2atGsE(lines, i) === "---") {
|
|
3683
3885
|
end_idx = i;
|
|
3684
3886
|
break;
|
|
@@ -3690,11 +3892,11 @@ function _M0FP36kazuph5reviw4core15parse__markdown(input) {
|
|
|
3690
3892
|
}
|
|
3691
3893
|
}
|
|
3692
3894
|
if (end_idx > 0) {
|
|
3693
|
-
const
|
|
3895
|
+
const _end478 = end_idx;
|
|
3694
3896
|
let _tmp$2 = 1;
|
|
3695
3897
|
while (true) {
|
|
3696
3898
|
const i = _tmp$2;
|
|
3697
|
-
if (i <
|
|
3899
|
+
if (i < _end478) {
|
|
3698
3900
|
const line = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
|
|
3699
3901
|
const colon = _M0FP36kazuph5reviw4core15index__of__char(line, 58);
|
|
3700
3902
|
if (colon >= 0) {
|
|
@@ -3714,12 +3916,12 @@ function _M0FP36kazuph5reviw4core15parse__markdown(input) {
|
|
|
3714
3916
|
}
|
|
3715
3917
|
}
|
|
3716
3918
|
const content_lines = [];
|
|
3717
|
-
const
|
|
3718
|
-
const
|
|
3719
|
-
let _tmp =
|
|
3919
|
+
const _start487 = content_start;
|
|
3920
|
+
const _end488 = lines.length;
|
|
3921
|
+
let _tmp = _start487;
|
|
3720
3922
|
while (true) {
|
|
3721
3923
|
const i = _tmp;
|
|
3722
|
-
if (i <
|
|
3924
|
+
if (i < _end488) {
|
|
3723
3925
|
_M0MP311moonbitlang4core5array5Array4pushGsE(content_lines, _M0MP311moonbitlang4core5array5Array2atGsE(lines, i));
|
|
3724
3926
|
_tmp = i + 1 | 0;
|
|
3725
3927
|
continue;
|
|
@@ -3825,19 +4027,21 @@ function _M0FP36kazuph5reviw4core24build__video__fullscreen(buf) {
|
|
|
3825
4027
|
}
|
|
3826
4028
|
function _M0FP36kazuph5reviw4core20build__comment__card(buf) {
|
|
3827
4029
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<div class=\"floating\" id=\"comment-card\">");
|
|
3828
|
-
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<
|
|
3829
|
-
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<
|
|
3830
|
-
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<
|
|
3831
|
-
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<
|
|
3832
|
-
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<button id=\"
|
|
3833
|
-
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "</div></header>");
|
|
3834
|
-
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<div id=\"cell-preview\" style=\"font-size:12px; color: var(--muted); margin-bottom:8px;\"></div>");
|
|
4030
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<button class=\"card-close-x\" id=\"close-card\" title=\"Close\">×</button>");
|
|
4031
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<header><h2 id=\"card-title\">Cell Comment</h2></header>");
|
|
4032
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<div id=\"cell-preview\" style=\"font-size:12px; color: var(--muted); margin-bottom:4px;\"></div>");
|
|
4033
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<div style=\"position:relative\">");
|
|
4034
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<button class=\"icon-only copy-btn-float\" id=\"copy-selection\" title=\"Copy selected lines\">📋</button>");
|
|
3835
4035
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<textarea id=\"comment-input\" placeholder=\"Enter your comment or note\"></textarea>");
|
|
4036
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "</div>");
|
|
3836
4037
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<div class=\"image-attach-area image-attach-small\" id=\"comment-image-area\">");
|
|
3837
4038
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<label>Image (Paste, max 1)</label>");
|
|
3838
4039
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<div class=\"image-preview-list\" id=\"comment-image-preview\"></div>");
|
|
3839
4040
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "</div>");
|
|
3840
|
-
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<div class=\"actions
|
|
4041
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<div class=\"actions card-actions-split\">");
|
|
4042
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<button class=\"danger-text\" id=\"clear-comment\">Delete</button>");
|
|
4043
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<button class=\"primary\" id=\"save-comment\">Save</button>");
|
|
4044
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "</div>");
|
|
3841
4045
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "</div>");
|
|
3842
4046
|
}
|
|
3843
4047
|
function _M0FP36kazuph5reviw4core27build__comment__list__aside(buf) {
|
|
@@ -3869,7 +4073,7 @@ function _M0FP36kazuph5reviw4core26build__page__start_2einner(buf, filename, fil
|
|
|
3869
4073
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11/build/styles/github.min.css\" id=\"hljs-theme-light\">");
|
|
3870
4074
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<script src=\"https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11/build/highlight.min.js\"></script>");
|
|
3871
4075
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<style>");
|
|
3872
|
-
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "/* Dark theme (default) */\n:root {\n color-scheme: dark;\n --bg: #0f172a;\n --bg-gradient: radial-gradient(circle at 20% 20%, #1e293b 0%, #0b1224 35%, #0b1224 60%, #0f172a 100%);\n --panel: #111827;\n --panel-alpha: rgba(15, 23, 42, 0.9);\n --panel-solid: #0b1224;\n --card-bg: rgba(11, 18, 36, 0.95);\n --input-bg: rgba(15, 23, 42, 0.6);\n --border: #1f2937;\n --accent: #60a5fa;\n --accent-2: #f472b6;\n --text: #e5e7eb;\n --text-inverse: #0b1224;\n --muted: #94a3b8;\n --comment: #0f766e;\n --badge: #22c55e;\n --table-bg: rgba(15, 23, 42, 0.7);\n --row-even: rgba(30, 41, 59, 0.4);\n --row-odd: rgba(15, 23, 42, 0.2);\n --selected-bg: rgba(96,165,250,0.15);\n --hover-bg: rgba(96,165,250,0.08);\n --shadow-color: rgba(0,0,0,0.35);\n --code-bg: #1e293b;\n --error: #dc3545;\n}\n/* Light theme */\n[data-theme=\"light\"] {\n color-scheme: light;\n --bg: #f8fafc;\n --bg-gradient: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);\n --panel: #ffffff;\n --panel-alpha: rgba(255, 255, 255, 0.95);\n --panel-solid: #ffffff;\n --card-bg: rgba(255, 255, 255, 0.98);\n --input-bg: #f1f5f9;\n --border: #e2e8f0;\n --accent: #3b82f6;\n --accent-2: #ec4899;\n --text: #1e293b;\n --text-inverse: #ffffff;\n --muted: #64748b;\n --comment: #14b8a6;\n --badge: #22c55e;\n --table-bg: #ffffff;\n --row-even: #f8fafc;\n --row-odd: #ffffff;\n --selected-bg: rgba(59,130,246,0.12);\n --hover-bg: rgba(59,130,246,0.06);\n --shadow-color: rgba(0,0,0,0.1);\n --code-bg: #f1f5f9;\n --error: #dc3545;\n}\n* { box-sizing: border-box; }\nbody {\n margin: 0;\n font-family: \"Inter\", \"Hiragino Sans\", system-ui, -apple-system, sans-serif;\n background: var(--bg-gradient);\n color: var(--text);\n min-height: 100vh;\n transition: background 200ms ease, color 200ms ease;\n}\nheader {\n position: sticky;\n top: 0;\n z-index: 5;\n padding: 12px 16px;\n background: var(--panel-alpha);\n backdrop-filter: blur(8px);\n border-bottom: 1px solid var(--border);\n display: flex;\n gap: 12px;\n align-items: center;\n justify-content: space-between;\n transition: background 200ms ease, border-color 200ms ease;\n}\nheader .meta { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }\nheader .actions { display: flex; gap: 8px; align-items: center; }\nheader h1 { display: flex; flex-direction: column; margin: 0; line-height: 1.3; }\nheader h1 .title-path { font-size: 11px; font-weight: 400; color: var(--muted); }\nheader h1 .title-file { font-size: 16px; font-weight: 700; }\nheader .badge {\n background: var(--selected-bg);\n color: var(--text);\n padding: 6px 10px;\n border-radius: 8px;\n font-size: 12px;\n border: 1px solid var(--border);\n}\nheader button {\n background: linear-gradient(135deg, #38bdf8, #6366f1);\n color: var(--text-inverse);\n border: none;\n border-radius: 10px;\n padding: 10px 14px;\n font-weight: 700;\n cursor: pointer;\n box-shadow: 0 10px 30px var(--shadow-color);\n transition: transform 120ms ease, box-shadow 120ms ease;\n}\nheader button:hover { transform: translateY(-1px); box-shadow: 0 16px 36px var(--shadow-color); }\nheader button:active { transform: translateY(0); }\n/* Theme toggle button */\n.theme-toggle {\n background: var(--selected-bg);\n color: var(--text);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 8px 10px;\n font-size: 16px;\n cursor: pointer;\n transition: background 120ms ease, transform 120ms ease;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 38px;\n height: 38px;\n}\n.theme-toggle:hover { background: var(--hover-bg); transform: scale(1.05); }\n\n.wrap { padding: 12px 16px 12px; }\n.toolbar {\n display: flex;\n gap: 12px;\n align-items: center;\n flex-wrap: wrap;\n margin: 10px 0 12px;\n color: var(--muted);\n font-size: 13px;\n}\n.toolbar button {\n background: rgba(96,165,250,0.12);\n color: var(--text);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 8px 10px;\n font-size: 13px;\n cursor: pointer;\n}\n.toolbar button:hover { background: rgba(96,165,250,0.2); }\n\n.table-box {\n background: var(--table-bg);\n border: 1px solid var(--border);\n border-radius: 12px;\n overflow: auto;\n max-height: calc(100vh - 110px);\n box-shadow: 0 20px 50px var(--shadow-color);\n transition: background 200ms ease, border-color 200ms ease;\n}\ntable {\n border-collapse: collapse;\n width: 100%;\n min-width: 540px;\n table-layout: fixed;\n}\nthead th {\n position: sticky;\n top: 0;\n z-index: 3;\n background: var(--panel-solid) !important;\n color: var(--muted);\n font-size: 12px;\n text-align: center;\n padding: 0;\n border-bottom: 1px solid var(--border);\n border-right: 1px solid var(--border);\n white-space: nowrap;\n transition: background 200ms ease;\n}\nthead th:not(.selected) {\n background: var(--panel-solid) !important;\n}\nthead th:first-child,\ntbody th {\n width: 28px;\n min-width: 28px;\n max-width: 28px;\n}\nthead th .th-inner {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n padding: 8px 6px;\n position: relative;\n height: 100%;\n}\nthead th.filtered .th-inner {\n background: linear-gradient(135deg, rgba(96,165,250,0.18), rgba(34,197,94,0.18));\n color: #e5e7eb;\n border-radius: 6px;\n box-shadow: inset 0 -1px 0 rgba(255,255,255,0.05);\n}\nthead th.filtered .th-inner::after {\n content: 'FILTER';\n font-size: 10px;\n color: #c7d2fe;\n background: rgba(99,102,241,0.24);\n border: 1px solid rgba(99,102,241,0.45);\n padding: 1px 6px;\n border-radius: 999px;\n position: absolute;\n bottom: 4px;\n right: 6px;\n}\n.resizer {\n position: absolute;\n right: 2px;\n top: 0;\n width: 6px;\n height: 100%;\n cursor: col-resize;\n user-select: none;\n touch-action: none;\n opacity: 0.6;\n}\n.resizer::after {\n content: '';\n position: absolute;\n top: 10%;\n bottom: 10%;\n left: 2px;\n width: 2px;\n background: rgba(96,165,250,0.6);\n border-radius: 2px;\n opacity: 0;\n transition: opacity 120ms ease;\n}\nthead th:hover .resizer::after { opacity: 1; }\n\n.freeze {\n position: sticky !important;\n background: var(--panel-solid);\n z-index: 4;\n}\n.freeze-row {\n position: sticky !important;\n background: var(--panel-solid);\n}\n.freeze-row.freeze {\n z-index: 6;\n}\nth.freeze-row {\n z-index: 6;\n}\ntbody th {\n position: sticky;\n left: 0;\n z-index: 2;\n background: var(--panel-solid);\n color: var(--muted);\n text-align: right;\n padding: 8px 10px;\n font-size: 12px;\n border-right: 1px solid var(--border);\n border-bottom: 1px solid var(--border);\n transition: background 200ms ease;\n}\ntd {\n padding: 10px 10px;\n border-bottom: 1px solid var(--border);\n border-right: 1px solid var(--border);\n background: var(--row-odd);\n color: var(--text);\n font-size: 13px;\n line-height: 1.45;\n cursor: pointer;\n transition: background 120ms ease, box-shadow 120ms ease;\n position: relative;\n white-space: pre-wrap;\n word-break: break-word;\n max-width: 320px;\n}\ntr:nth-child(even) td:not(.selected):not(.has-comment) { background: var(--row-even); }\ntd:hover:not(.selected) { background: var(--hover-bg); box-shadow: inset 0 0 0 1px rgba(96,165,250,0.25); }\ntd.has-comment { background: rgba(34,197,94,0.12); box-shadow: inset 0 0 0 1px rgba(34,197,94,0.35); }\ntd.selected, tbody th.selected { background: rgba(99,102,241,0.22) !important; box-shadow: inset 0 0 0 1px rgba(99,102,241,0.45); }\n.preview-highlight { background: rgba(167,139,250,0.18) !important; box-shadow: inset 0 0 0 2px rgba(139,92,246,0.35); border-radius: 4px; transition: background 150ms ease, box-shadow 150ms ease; padding-left: 8px; margin-left: -8px; }\nthead th.selected { background: #c7d2fe !important; box-shadow: inset 0 0 0 1px rgba(99,102,241,0.45); }\n[data-theme=\"dark\"] thead th.selected { background: #3730a3 !important; }\nbody.dragging { user-select: none; cursor: crosshair; }\nbody.dragging td, body.dragging tbody th { cursor: crosshair; }\ntbody th { cursor: pointer; }\ntd .dot {\n position: absolute;\n right: 6px;\n top: 6px;\n width: 8px;\n height: 8px;\n border-radius: 99px;\n background: var(--badge);\n box-shadow: 0 0 0 4px rgba(34,197,94,0.15);\n}\n.floating {\n position: absolute;\n z-index: 10;\n background: var(--panel-solid);\n border: 1px solid var(--border);\n border-radius: 12px;\n padding: 12px;\n width: min(420px, calc(100vw - 32px));\n box-shadow: 0 20px 40px var(--shadow-color);\n display: none;\n transition: background 200ms ease, border-color 200ms ease;\n}\n.floating header {\n position: static;\n background: transparent;\n backdrop-filter: none;\n border: none;\n padding: 0 0 8px 0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.floating h2 { font-size: 14px; margin: 0; color: var(--text); }\n.floating button {\n margin-left: 8px;\n background: var(--accent);\n color: var(--text-inverse);\n border: 1px solid var(--accent);\n padding: 6px 10px;\n border-radius: 8px;\n font-size: 12px;\n font-weight: 600;\n cursor: pointer;\n transition: background 120ms ease, opacity 120ms ease;\n}\n.floating button.icon-only {\n width: 32px;\n height: 32px;\n padding: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n line-height: 1;\n}\n.floating button:hover { opacity: 0.85; }\n.floating textarea {\n width: 100%;\n min-height: 110px;\n resize: vertical;\n border-radius: 8px;\n border: 1px solid var(--border);\n background: var(--input-bg);\n color: var(--text);\n padding: 10px;\n font-size: 13px;\n line-height: 1.4;\n transition: background 200ms ease, border-color 200ms ease;\n}\n.floating textarea:focus {\n outline: none;\n border-color: var(--accent);\n}\n.floating .actions {\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n margin-top: 10px;\n}\n.floating .actions button.primary {\n background: linear-gradient(135deg, #22c55e, #16a34a);\n color: var(--text-inverse);\n border: none;\n font-weight: 700;\n box-shadow: 0 10px 30px rgba(22,163,74,0.35);\n}\n.comment-list {\n position: fixed;\n right: 14px;\n bottom: 14px;\n width: 320px;\n max-height: 60vh;\n overflow: auto;\n border: 1px solid var(--border);\n border-radius: 12px;\n background: var(--card-bg);\n box-shadow: 0 18px 40px var(--shadow-color);\n padding: 12px;\n backdrop-filter: blur(6px);\n transition: opacity 120ms ease, transform 120ms ease, background 200ms ease;\n}\n.comment-list h3 { margin: 0 0 8px 0; font-size: 13px; color: var(--muted); }\n.comment-list ol {\n margin: 0;\n padding-left: 18px;\n color: var(--text);\n font-size: 13px;\n line-height: 1.45;\n}\n.comment-list li { margin-bottom: 6px; }\n.comment-list .hint { color: var(--muted); font-size: 12px; }\n.pill { display: inline-flex; align-items: center; gap: 6px; padding: 4px 8px; border-radius: 999px; background: var(--selected-bg); border: 1px solid var(--border); font-size: 12px; color: var(--text); cursor: pointer; transition: background 150ms ease, border-color 150ms ease; }\n.pill:hover { background: var(--hover-bg); border-color: var(--accent); }\n.pill strong { color: var(--text); font-weight: 700; }\n.comment-list.collapsed {\n opacity: 0;\n pointer-events: none;\n transform: translateY(8px) scale(0.98);\n}\n.md-preview {\n background: var(--input-bg);\n border: 1px solid var(--border);\n border-radius: 12px;\n padding: 14px;\n margin-bottom: 12px;\n transition: background 200ms ease, border-color 200ms ease;\n}\n.md-layout {\n display: flex;\n gap: 16px;\n align-items: stretch;\n margin-top: 8px;\n height: calc(100vh - 80px);\n}\n.md-left {\n flex: 1;\n min-width: 0;\n overflow-y: auto;\n overflow-x: auto;\n overscroll-behavior: contain;\n}\n.md-left .md-preview {\n max-height: none;\n}\n.md-right {\n flex: 1;\n min-width: 0;\n overflow-y: auto;\n overflow-x: auto;\n overscroll-behavior: contain;\n}\n.md-right .table-box {\n max-width: none;\n min-width: 0;\n max-height: none;\n overflow: visible;\n}\n/* Ensure thead is opaque in md-right to prevent content showing through */\n.md-right thead th {\n background: var(--panel-solid) !important;\n}\n.md-right thead th.selected {\n background: #c7d2fe !important;\n}\n[data-theme=\"dark\"] .md-right thead th {\n background: var(--panel-solid) !important;\n}\n[data-theme=\"dark\"] .md-right thead th.selected {\n background: #3730a3 !important;\n}\n\n/* === Media Sidebar === */\n.media-sidebar {\n display: flex;\n flex-shrink: 0;\n height: calc(100vh - 80px);\n transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n position: relative;\n z-index: 10;\n}\n.media-sidebar.hidden {\n display: none;\n}\n.media-sidebar-thumbs {\n width: 96px;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 8px;\n border-right: 1px solid var(--border);\n display: flex;\n flex-direction: column;\n gap: 8px;\n background: var(--panel);\n scrollbar-width: thin;\n scrollbar-color: var(--border) transparent;\n}\n.media-sidebar-thumbs::-webkit-scrollbar {\n width: 4px;\n}\n.media-sidebar-thumbs::-webkit-scrollbar-track {\n background: transparent;\n}\n.media-sidebar-thumbs::-webkit-scrollbar-thumb {\n background: var(--border);\n border-radius: 4px;\n}\n.media-sidebar-thumb {\n width: 80px;\n height: 60px;\n border-radius: 6px;\n border: 2px solid var(--border);\n overflow: hidden;\n cursor: pointer;\n position: relative;\n flex-shrink: 0;\n background: var(--bg);\n transition: border-color 0.2s ease, transform 0.15s ease, box-shadow 0.2s ease;\n}\n.media-sidebar-thumb:hover {\n border-color: var(--accent);\n transform: scale(1.05);\n box-shadow: 0 2px 8px var(--shadow-color);\n}\n.media-sidebar-thumb.active {\n border-color: var(--accent);\n box-shadow: 0 0 0 2px var(--accent), 0 2px 8px var(--shadow-color);\n}\n.media-sidebar-thumb img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n}\n.media-sidebar-thumb svg {\n width: 100%;\n height: 100%;\n display: block;\n}\n.media-sidebar-thumb-video {\n position: relative;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #000;\n}\n.media-sidebar-thumb-video video {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n.media-sidebar-thumb-video::after {\n content: '';\n position: absolute;\n width: 24px;\n height: 24px;\n background: rgba(255,255,255,0.85);\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.media-sidebar-thumb-video::before {\n content: '';\n position: absolute;\n z-index: 1;\n width: 0;\n height: 0;\n border-style: solid;\n border-width: 5px 0 5px 9px;\n border-color: transparent transparent transparent #000;\n margin-left: 2px;\n}\n.media-sidebar-thumb-mermaid {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n padding: 2px;\n background: var(--panel);\n overflow: hidden;\n}\n.media-sidebar-thumb-mermaid svg {\n width: 100% !important;\n height: 100% !important;\n max-width: 100%;\n max-height: 100%;\n display: block;\n}\n.media-sidebar-thumb-index {\n position: absolute;\n top: 2px;\n left: 2px;\n background: rgba(0,0,0,0.6);\n color: #fff;\n font-size: 9px;\n font-weight: 600;\n padding: 1px 4px;\n border-radius: 3px;\n line-height: 1.2;\n pointer-events: none;\n z-index: 1;\n}\n.media-sidebar-viewer {\n width: 0;\n overflow: hidden;\n transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n background: var(--bg);\n position: relative;\n}\n.media-sidebar-viewer.open {\n width: 45vw;\n overflow: hidden;\n padding: 16px;\n border-right: 1px solid var(--border);\n display: flex;\n flex-direction: column;\n}\n.media-sidebar-viewer-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n padding-top: 32px;\n}\n.media-sidebar-viewer-content img {\n max-width: 100%;\n max-height: calc(100vh - 170px);\n object-fit: contain;\n border-radius: 8px;\n}\n.media-sidebar-viewer-content video {\n max-width: 100%;\n max-height: calc(100vh - 170px);\n border-radius: 8px;\n background: #000;\n}\n.media-sidebar-viewer-content .viewer-mermaid-wrap {\n width: 100%;\n overflow: auto;\n display: flex;\n justify-content: center;\n background: var(--panel);\n border-radius: 8px;\n padding: 16px;\n}\n.media-sidebar-viewer-content .viewer-mermaid-wrap svg {\n width: 100% !important;\n height: auto !important;\n max-height: calc(100vh - 200px);\n}\n\n/* === Sidebar Rich Viewer: Mermaid zoom/pan/minimap === */\n.sidebar-mermaid-controls {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 10px;\n background: var(--panel-alpha);\n border: 1px solid var(--border);\n border-radius: 8px;\n margin-bottom: 8px;\n width: 100%;\n box-sizing: border-box;\n}\n.sidebar-mermaid-controls button {\n background: var(--selected-bg);\n border: 1px solid var(--border);\n border-radius: 5px;\n padding: 4px 10px;\n cursor: pointer;\n color: var(--text);\n font-size: 13px;\n line-height: 1;\n transition: background 0.15s ease;\n}\n.sidebar-mermaid-controls button:hover { background: var(--hover-bg); }\n.sidebar-mermaid-controls .sidebar-zoom-info {\n font-size: 11px;\n color: var(--muted);\n min-width: 40px;\n text-align: center;\n user-select: none;\n}\n.sidebar-mermaid-viewport {\n width: 100%;\n flex: 1;\n overflow: hidden;\n position: relative;\n cursor: grab;\n background: var(--panel);\n border-radius: 8px;\n border: 1px solid var(--border);\n}\n.sidebar-mermaid-viewport:active { cursor: grabbing; }\n.sidebar-mermaid-wrapper {\n position: absolute;\n transform-origin: 0 0;\n}\n.sidebar-mermaid-wrapper svg {\n display: block;\n}\n.sidebar-minimap {\n position: absolute;\n bottom: 8px;\n right: 8px;\n width: 140px;\n height: 100px;\n background: var(--panel-alpha);\n border: 1px solid var(--border);\n border-radius: 6px;\n overflow: hidden;\n box-shadow: 0 2px 8px rgba(0,0,0,0.12);\n z-index: 3;\n}\n.sidebar-minimap-content {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 6px;\n}\n.sidebar-minimap-content svg {\n max-width: 100%;\n max-height: 100%;\n opacity: 0.6;\n}\n.sidebar-minimap-viewport {\n position: absolute;\n border: 2px solid var(--accent);\n background: rgba(102, 126, 234, 0.2);\n pointer-events: none;\n border-radius: 2px;\n}\n\n/* === Sidebar Rich Viewer: Image zoom/pan === */\n.sidebar-image-viewport {\n width: 100%;\n flex: 1;\n overflow: hidden;\n position: relative;\n cursor: grab;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.sidebar-image-viewport.panning { cursor: grabbing; }\n.sidebar-image-viewport img {\n transform-origin: 0 0;\n max-width: none !important;\n max-height: none !important;\n border-radius: 0 !important;\n user-select: none;\n -webkit-user-drag: none;\n}\n.sidebar-zoom-indicator {\n position: absolute;\n bottom: 10px;\n left: 50%;\n transform: translateX(-50%);\n background: rgba(0, 0, 0, 0.65);\n color: #fff;\n font-size: 11px;\n font-weight: 600;\n padding: 3px 10px;\n border-radius: 12px;\n pointer-events: none;\n z-index: 3;\n backdrop-filter: blur(4px);\n transition: opacity 0.3s ease;\n user-select: none;\n}\n.sidebar-zoom-indicator.hidden { opacity: 0; }\n.sidebar-image-hint {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 11px;\n color: var(--muted);\n pointer-events: none;\n opacity: 0;\n transition: opacity 0.4s ease;\n text-align: center;\n z-index: 2;\n}\n\n/* === Sidebar Rich Viewer: Video container (timeline uses shared .video-timeline classes) === */\n.sidebar-video-container {\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: 0;\n}\n.sidebar-video-container video {\n width: 100%;\n border-radius: 8px 8px 0 0;\n background: #000;\n max-height: calc(100vh - 260px);\n}\n\n.media-sidebar-viewer-label {\n margin-top: 12px;\n font-size: 12px;\n color: var(--muted);\n text-align: center;\n word-break: break-all;\n}\n.media-sidebar-viewer-close {\n position: absolute;\n top: 8px;\n right: 8px;\n background: var(--panel);\n border: 1px solid var(--border);\n border-radius: 6px;\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n color: var(--text);\n font-size: 14px;\n z-index: 2;\n transition: background 0.15s ease;\n}\n.media-sidebar-viewer-close:hover {\n background: var(--hover-bg);\n}\n.sidebar-viewer-settings-btn {\n position: absolute;\n top: 8px;\n right: 44px;\n background: var(--panel);\n border: 1px solid var(--border);\n border-radius: 6px;\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n color: var(--text);\n font-size: 14px;\n z-index: 2;\n transition: background 0.15s ease;\n}\n.sidebar-viewer-settings-btn:hover {\n background: var(--hover-bg);\n}\n.sidebar-viewer-settings-btn + .video-settings-panel {\n position: absolute;\n top: 44px;\n right: 8px;\n}\n\n.media-sidebar-toggle {\n background: var(--panel);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 6px 10px;\n cursor: pointer;\n color: var(--text);\n font-size: 14px;\n transition: background 0.15s ease, border-color 0.15s ease;\n display: none;\n}\n.media-sidebar-toggle.has-media {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n.media-sidebar-toggle:hover {\n background: var(--hover-bg);\n border-color: var(--accent);\n}\n.media-sidebar-toggle .toggle-count {\n font-size: 10px;\n font-weight: 700;\n background: var(--accent);\n color: var(--text-inverse);\n padding: 1px 5px;\n border-radius: 8px;\n line-height: 1.4;\n}\n.view-toggle {\n background: var(--panel);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 6px 10px;\n cursor: pointer;\n color: var(--text);\n font-size: 14px;\n transition: background 0.15s ease, border-color 0.15s ease;\n}\n.view-toggle:hover { background: rgba(96,165,250,0.2); }\n.view-toggle.active { background: var(--accent); color: #fff; }\n@media (max-width: 1200px) {\n .media-sidebar-viewer.open {\n width: 40vw;\n }\n}\n@media (max-width: 900px) {\n .media-sidebar-thumbs {\n width: 72px;\n }\n .media-sidebar-thumb {\n width: 56px;\n height: 42px;\n }\n .media-sidebar-viewer.open {\n width: 35vw;\n }\n}\n@media (prefers-reduced-motion: reduce) {\n .media-sidebar,\n .media-sidebar-viewer,\n .media-sidebar-thumb {\n transition: none !important;\n }\n}\n\n.md-preview h1, .md-preview h2, .md-preview h3, .md-preview h4 {\n margin: 0.4em 0 0.2em;\n}\n/* Heading toggle feature */\n.md-preview .md-heading-toggle {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.md-preview .heading-toggle-icon {\n font-size: 0.6em;\n transition: transform 150ms ease;\n color: var(--muted);\n flex-shrink: 0;\n cursor: pointer;\n padding: 4px 8px;\n margin: -4px 0 -4px -8px;\n border-radius: 4px;\n}\n.md-preview .heading-toggle-icon:hover {\n background: var(--hover-bg);\n color: var(--accent);\n}\n.md-preview .md-heading-toggle.collapsed .heading-toggle-icon {\n transform: rotate(-90deg);\n}\n.md-preview details.heading-toggle {\n margin: 0.2em 0;\n}\n.md-preview details.heading-toggle > summary {\n list-style: none;\n cursor: pointer;\n}\n.md-preview details.heading-toggle > summary::-webkit-details-marker {\n display: none;\n}\n.md-preview details.heading-toggle:not([open]) > .toggle-content {\n display: none;\n}\n.md-preview .heading-section-content {\n /* Content wrapper for collapsible sections */\n}\n.md-preview .heading-section-content.hidden {\n display: none;\n}\n.md-preview p { margin: 0.3em 0; line-height: 1.5; }\n.md-preview img { max-width: 100%; height: auto; border-radius: 8px; }\n.md-preview video.video-preview { max-width: 100%; height: auto; border-radius: 8px; background: #000; }\n.md-preview table video.video-preview {\n display: block;\n width: 100%;\n height: auto;\n}\n.md-preview code { background: rgba(255,255,255,0.08); padding: 2px 4px; border-radius: 4px; }\n.md-preview pre {\n background: var(--code-bg);\n padding: 12px 16px;\n border-radius: 8px;\n overflow: auto;\n border: 1px solid var(--border);\n}\n.md-preview pre code {\n background: none;\n padding: 0;\n font-size: 13px;\n line-height: 1.5;\n}\n.md-preview pre code.hljs {\n background: transparent;\n padding: 0;\n}\n/* YAML Frontmatter table */\n.frontmatter-table {\n margin-bottom: 20px;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--border);\n background: var(--panel);\n}\n.frontmatter-table table {\n width: 100%;\n border-collapse: collapse;\n table-layout: fixed;\n}\n.frontmatter-table thead th {\n background: linear-gradient(135deg, rgba(147, 51, 234, 0.15), rgba(96, 165, 250, 0.15));\n color: var(--text);\n font-size: 12px;\n font-weight: 600;\n padding: 10px 16px;\n text-align: left;\n border-bottom: 1px solid var(--border);\n}\n.frontmatter-table tbody th {\n background: rgba(147, 51, 234, 0.08);\n color: #c084fc;\n font-weight: 500;\n font-size: 12px;\n padding: 8px 10px;\n text-align: left;\n border-bottom: 1px solid var(--border);\n vertical-align: top;\n}\n.frontmatter-table tbody td {\n padding: 8px 14px;\n font-size: 13px;\n border-bottom: 1px solid var(--border);\n word-break: break-word;\n}\n.frontmatter-table tbody tr:last-child th,\n.frontmatter-table tbody tr:last-child td {\n border-bottom: none;\n}\n.frontmatter-table .fm-tag {\n display: inline-block;\n background: rgba(96, 165, 250, 0.15);\n color: var(--accent);\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 11px;\n margin-right: 4px;\n margin-bottom: 4px;\n}\n.frontmatter-table pre {\n margin: 0;\n background: var(--code-bg);\n padding: 8px;\n border-radius: 4px;\n font-size: 11px;\n}\n/* Reviw questions preview cards */\n.reviw-questions-preview {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n.reviw-q-card {\n background: var(--code-bg);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 10px 12px;\n}\n.reviw-q-card.resolved {\n border-left: 3px solid #22c55e;\n}\n.reviw-q-card.pending {\n border-left: 3px solid #f59e0b;\n}\n.reviw-q-header {\n font-size: 12px;\n color: var(--text-dim);\n margin-bottom: 4px;\n}\n.reviw-q-header strong {\n color: var(--accent);\n}\n.reviw-q-question {\n font-size: 13px;\n color: var(--text);\n margin-bottom: 6px;\n}\n.reviw-q-options {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n margin-bottom: 6px;\n}\n.reviw-q-answer {\n font-size: 12px;\n color: #22c55e;\n background: rgba(34, 197, 94, 0.1);\n padding: 4px 8px;\n border-radius: 4px;\n}\n[data-theme=\"light\"] .frontmatter-table tbody th {\n color: #7c3aed;\n}\n/* Table scroll container and indicator */\n.table-scroll-container {\n position: relative;\n margin: 16px 0;\n}\n.table-scroll-wrapper {\n overflow-x: auto;\n border-radius: 8px;\n}\n.scroll-hint {\n text-align: right;\n font-size: 12px;\n color: var(--accent);\n padding: 4px 8px;\n margin-bottom: 4px;\n opacity: 0;\n visibility: hidden;\n transition: opacity 200ms ease;\n}\n.table-scroll-container.can-scroll .scroll-hint {\n opacity: 0.8;\n visibility: visible;\n}\n.table-scroll-container.scrolled-end .scroll-hint {\n opacity: 0;\n visibility: hidden;\n}\n/* Markdown tables in preview */\n.md-preview table:not(.frontmatter-table table) {\n min-width: 100%;\n width: max-content;\n border-collapse: collapse;\n border: 1px solid var(--border);\n border-radius: 8px;\n}\n.md-preview table:not(.frontmatter-table table) th,\n.md-preview table:not(.frontmatter-table table) td {\n padding: 10px 16px;\n text-align: left;\n border-bottom: 1px solid var(--border);\n vertical-align: top;\n word-break: break-word;\n overflow-wrap: anywhere;\n width: auto;\n}\n/* Force equal column widths when colgroup is not specified */\n.md-preview table:not(.frontmatter-table table) colgroup ~ * th,\n.md-preview table:not(.frontmatter-table table) colgroup ~ * td {\n width: auto;\n}\n.md-preview table:not(.frontmatter-table table) td:has(video),\n.md-preview table:not(.frontmatter-table table) td:has(img) {\n padding: 4px;\n line-height: 0;\n}\n.md-preview table:not(.frontmatter-table table) td video,\n.md-preview table:not(.frontmatter-table table) td img {\n width: 100%;\n max-width: 100%;\n height: auto;\n}\n.md-preview table:not(.frontmatter-table table) th {\n background: var(--panel);\n font-weight: 600;\n font-size: 13px;\n}\n.md-preview table:not(.frontmatter-table table) td {\n font-size: 13px;\n}\n.md-preview table:not(.frontmatter-table table) tr:last-child td {\n border-bottom: none;\n}\n.md-preview table:not(.frontmatter-table table) tr:hover td {\n background: var(--hover-bg);\n}\n/* Source table (右ペイン) */\n.table-box table {\n table-layout: fixed;\n width: 100%;\n}\n.table-box th,\n.table-box td {\n word-break: break-word;\n min-width: 140px;\n}\n.table-box th:first-child,\n.table-box td:first-child {\n min-width: 320px;\n max-width: 480px;\n}\n/* Image fullscreen overlay */\n.image-fullscreen-overlay {\n position: fixed;\n inset: 0;\n background: var(--bg);\n z-index: 1001;\n display: none;\n flex-direction: column;\n}\n.image-fullscreen-overlay.visible {\n display: flex;\n}\n.image-fs-content {\n flex: 1;\n overflow: hidden;\n position: relative;\n cursor: grab;\n}\n.image-fs-content:active { cursor: grabbing; }\n.image-fs-content .image-fs-wrapper {\n position: absolute;\n transform-origin: 0 0;\n}\n.image-fs-content .image-fs-wrapper img {\n display: block;\n}\n/* Video fullscreen overlay */\n.video-fullscreen-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.95);\n z-index: 1001;\n display: none;\n justify-content: center;\n align-items: center;\n}\n.video-fullscreen-overlay.visible {\n display: flex;\n}\n.video-close-btn {\n position: absolute;\n top: 14px;\n right: 14px;\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(0, 0, 0, 0.55);\n border: 1px solid rgba(255, 255, 255, 0.25);\n border-radius: 50%;\n cursor: pointer;\n color: #fff;\n font-size: 18px;\n z-index: 10;\n backdrop-filter: blur(4px);\n transition: background 120ms ease, transform 120ms ease;\n}\n.video-close-btn:hover {\n background: rgba(0, 0, 0, 0.75);\n transform: scale(1.04);\n}\n.video-container {\n width: 90vw;\n height: 90vh;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.video-container video {\n width: 100%;\n height: 100%;\n object-fit: contain;\n border-radius: 8px;\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);\n}\n/* Video Timeline - shared base styles (used by both fullscreen and sidebar) */\n.video-timeline {\n background: rgba(0, 0, 0, 0.85);\n display: flex;\n overflow-x: auto;\n backdrop-filter: blur(8px);\n height: 80px;\n padding: 8px;\n gap: 4px;\n}\n.video-timeline::-webkit-scrollbar {\n height: 6px;\n}\n.video-timeline::-webkit-scrollbar-track {\n background: rgba(255, 255, 255, 0.1);\n border-radius: 3px;\n}\n.video-timeline::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0.3);\n border-radius: 3px;\n}\n.video-timeline::-webkit-scrollbar-thumb:hover {\n background: rgba(255, 255, 255, 0.5);\n}\n/* Fullscreen-specific video timeline positioning */\n.video-container .video-timeline {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 5;\n}\n/* Sidebar-specific video timeline sizing */\n.sidebar-video-container .video-timeline {\n width: 100%;\n height: 72px;\n padding: 6px;\n gap: 3px;\n border-radius: 0 0 8px 8px;\n background: rgba(0, 0, 0, 0.88);\n}\n.sidebar-video-container .video-timeline::-webkit-scrollbar { height: 5px; }\n.sidebar-video-container .video-timeline::-webkit-scrollbar-track { background: rgba(255, 255, 255, 0.08); }\n.sidebar-video-container .video-timeline::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, 0.25); }\n.sidebar-video-container .video-timeline::-webkit-scrollbar-thumb:hover { background: rgba(255, 255, 255, 0.4); }\n.timeline-thumb {\n height: 64px;\n cursor: pointer;\n border: 2px solid transparent;\n border-radius: 4px;\n flex-shrink: 0;\n transition: border-color 0.2s, transform 0.15s;\n opacity: 0.85;\n}\n.sidebar-video-container .timeline-thumb {\n height: 52px;\n opacity: 0.8;\n}\n.timeline-thumb:hover {\n border-color: rgba(59, 130, 246, 0.5);\n opacity: 1;\n transform: scale(1.05);\n}\n.timeline-thumb.active {\n border-color: #3b82f6;\n opacity: 1;\n box-shadow: 0 0 12px rgba(59, 130, 246, 0.5);\n}\n.sidebar-video-container .timeline-thumb.active {\n box-shadow: 0 0 8px rgba(59, 130, 246, 0.4);\n}\n.timeline-loading {\n color: rgba(255, 255, 255, 0.6);\n font-size: 12px;\n padding: 8px 12px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.sidebar-video-container .timeline-loading {\n font-size: 11px;\n padding: 6px 10px;\n gap: 6px;\n color: rgba(255, 255, 255, 0.5);\n}\n.timeline-loading::before {\n content: '';\n width: 14px;\n height: 14px;\n border: 2px solid rgba(255, 255, 255, 0.3);\n border-top-color: #3b82f6;\n border-radius: 50%;\n animation: timeline-spin 0.8s linear infinite;\n}\n.sidebar-video-container .timeline-loading::before {\n width: 12px;\n height: 12px;\n border-width: 2px;\n border-color: rgba(255, 255, 255, 0.25);\n border-top-color: #3b82f6;\n}\n@keyframes timeline-spin {\n to { transform: rotate(360deg); }\n}\n.timeline-time {\n position: absolute;\n bottom: 2px;\n right: 4px;\n font-size: 9px;\n color: #fff;\n background: rgba(0, 0, 0, 0.7);\n padding: 1px 4px;\n border-radius: 2px;\n pointer-events: none;\n}\n.sidebar-video-container .timeline-time {\n font-size: 8px;\n right: 3px;\n padding: 1px 3px;\n}\n.timeline-thumb-wrapper {\n position: relative;\n flex-shrink: 0;\n}\n/* Video threshold settings panel */\n.video-settings-btn {\n position: absolute;\n top: 14px;\n right: 64px;\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(0, 0, 0, 0.55);\n border: 1px solid rgba(255, 255, 255, 0.25);\n border-radius: 50%;\n cursor: pointer;\n color: #fff;\n font-size: 18px;\n z-index: 10;\n backdrop-filter: blur(4px);\n transition: background 120ms ease, transform 120ms ease;\n}\n.video-settings-btn:hover {\n background: rgba(0, 0, 0, 0.75);\n transform: scale(1.04);\n}\n.video-settings-panel {\n position: absolute;\n top: 60px;\n right: 14px;\n background: rgba(0, 0, 0, 0.9);\n border: 1px solid rgba(255, 255, 255, 0.2);\n border-radius: 12px;\n padding: 16px;\n z-index: 15;\n min-width: 280px;\n display: none;\n backdrop-filter: blur(8px);\n}\n.video-settings-panel.visible {\n display: block;\n}\n.video-settings-panel h4 {\n margin: 0 0 8px;\n color: #fff;\n font-size: 14px;\n font-weight: 500;\n}\n.video-settings-desc {\n margin: 0 0 12px;\n color: rgba(255, 255, 255, 0.6);\n font-size: 11px;\n line-height: 1.4;\n}\n.video-settings-buttons {\n display: flex;\n gap: 6px;\n margin-bottom: 12px;\n}\n.video-settings-buttons button {\n flex: 1;\n padding: 8px 4px;\n border: 1px solid rgba(255, 255, 255, 0.2);\n border-radius: 6px;\n background: rgba(255, 255, 255, 0.1);\n color: rgba(255, 255, 255, 0.8);\n font-size: 11px;\n cursor: pointer;\n transition: all 120ms ease;\n}\n.video-settings-buttons button:hover {\n background: rgba(255, 255, 255, 0.2);\n border-color: rgba(255, 255, 255, 0.3);\n}\n.video-settings-buttons button.selected {\n background: #3b82f6;\n border-color: #3b82f6;\n color: #fff;\n}\n.video-settings-actions {\n display: flex;\n gap: 8px;\n margin-top: 8px;\n}\n.video-settings-actions button {\n flex: 1;\n padding: 8px 12px;\n border: none;\n border-radius: 6px;\n font-size: 12px;\n cursor: pointer;\n transition: background 120ms ease;\n}\n.video-settings-actions .reset-btn {\n background: rgba(255, 255, 255, 0.15);\n color: #fff;\n}\n.video-settings-actions .reset-btn:hover {\n background: rgba(255, 255, 255, 0.25);\n}\n/* Video Shortcuts Help */\n.video-shortcuts-help {\n opacity: 0.85;\n transition: opacity 0.2s;\n}\n.video-shortcuts-help:hover {\n opacity: 1;\n}\n.video-shortcuts-help .shortcuts-title {\n font-weight: 600;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 10px;\n color: rgba(255, 255, 255, 0.7);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.video-shortcuts-help .shortcuts-title::before {\n content: '\\u2328';\n font-size: 14px;\n}\n.video-shortcuts-help .shortcut-item {\n margin-bottom: 6px;\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n.video-shortcuts-help .shortcut-item:last-child {\n margin-bottom: 0;\n}\n.video-shortcuts-help kbd {\n display: inline-block;\n background: rgba(255, 255, 255, 0.15);\n border: 1px solid rgba(255, 255, 255, 0.25);\n border-radius: 4px;\n padding: 2px 6px;\n font-family: system-ui, -apple-system, sans-serif;\n font-size: 10px;\n font-weight: 500;\n min-width: 18px;\n text-align: center;\n margin-right: 2px;\n}\n/* Reviw Questions Modal */\n.reviw-questions-overlay {\n display: none;\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.8);\n z-index: 1100;\n justify-content: center;\n align-items: center;\n}\n.reviw-questions-overlay.visible {\n display: flex;\n}\n.reviw-questions-modal {\n background: var(--card-bg);\n border: 1px solid var(--border);\n border-radius: 16px;\n width: 90%;\n max-width: 600px;\n max-height: 80vh;\n display: flex;\n flex-direction: column;\n box-shadow: 0 25px 80px rgba(0, 0, 0, 0.5);\n}\n.reviw-questions-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n border-bottom: 1px solid var(--border);\n}\n.reviw-questions-header h2 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--text);\n}\n.reviw-questions-header h2 span {\n font-size: 14px;\n color: var(--text-dim);\n font-weight: 400;\n}\n.reviw-questions-close {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n color: var(--text-dim);\n font-size: 18px;\n cursor: pointer;\n border-radius: 8px;\n transition: all 150ms ease;\n}\n.reviw-questions-close:hover {\n background: var(--border);\n color: var(--text);\n}\n.reviw-questions-body {\n flex: 1;\n overflow-y: auto;\n padding: 16px 20px;\n}\n.reviw-questions-footer {\n padding: 12px 20px;\n border-top: 1px solid var(--border);\n display: flex;\n justify-content: flex-end;\n}\n.reviw-questions-later {\n padding: 8px 16px;\n border: 1px solid var(--border);\n background: transparent;\n color: var(--text-dim);\n border-radius: 8px;\n cursor: pointer;\n font-size: 13px;\n transition: all 150ms ease;\n}\n.reviw-questions-later:hover {\n background: var(--border);\n color: var(--text);\n}\n/* Question Item */\n.reviw-question-item {\n margin-bottom: 20px;\n padding-bottom: 20px;\n border-bottom: 1px solid var(--border);\n}\n.reviw-question-item:last-child {\n margin-bottom: 0;\n padding-bottom: 0;\n border-bottom: none;\n}\n.reviw-question-text {\n font-size: 14px;\n color: var(--text);\n margin-bottom: 12px;\n line-height: 1.5;\n}\n.reviw-question-options {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n margin-bottom: 12px;\n}\n.reviw-question-option {\n padding: 8px 14px;\n border: 1px solid var(--border);\n background: transparent;\n color: var(--text);\n border-radius: 8px;\n cursor: pointer;\n font-size: 13px;\n transition: all 150ms ease;\n}\n.reviw-question-option:hover {\n border-color: var(--accent);\n background: rgba(96, 165, 250, 0.1);\n}\n.reviw-question-option.selected {\n border-color: var(--accent);\n background: var(--accent);\n color: var(--text-inverse);\n}\n.reviw-question-input {\n width: 100%;\n padding: 10px 12px;\n border: 1px solid var(--border);\n background: var(--input-bg);\n color: var(--text);\n border-radius: 8px;\n font-size: 13px;\n resize: vertical;\n min-height: 60px;\n}\n.reviw-question-input:focus {\n outline: none;\n border-color: var(--accent);\n}\n.reviw-question-input::placeholder {\n color: var(--text-dim);\n}\n.reviw-check-mark {\n color: #22c55e;\n font-weight: bold;\n}\n.reviw-question-item.answered {\n border-color: #22c55e;\n background: rgba(34, 197, 94, 0.05);\n}\n.reviw-question-submit {\n margin-top: 10px;\n padding: 8px 16px;\n border: none;\n background: var(--accent);\n color: var(--text-inverse);\n border-radius: 8px;\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n transition: all 150ms ease;\n}\n.reviw-question-submit:hover {\n filter: brightness(1.1);\n}\n.reviw-question-submit:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n/* Resolved Section */\n.reviw-resolved-section {\n margin-top: 16px;\n border-top: 1px solid var(--border);\n padding-top: 12px;\n}\n.reviw-resolved-toggle {\n display: flex;\n align-items: center;\n gap: 8px;\n background: none;\n border: none;\n color: var(--text-dim);\n font-size: 13px;\n cursor: pointer;\n padding: 4px 0;\n}\n.reviw-resolved-toggle:hover {\n color: var(--text);\n}\n.reviw-resolved-toggle .arrow {\n transition: transform 150ms ease;\n}\n.reviw-resolved-toggle.open .arrow {\n transform: rotate(90deg);\n}\n.reviw-resolved-list {\n display: none;\n margin-top: 12px;\n}\n.reviw-resolved-list.visible {\n display: block;\n}\n.reviw-resolved-item {\n padding: 10px 12px;\n background: var(--input-bg);\n border-radius: 8px;\n margin-bottom: 8px;\n opacity: 0.7;\n}\n.reviw-resolved-item:last-child {\n margin-bottom: 0;\n}\n.reviw-resolved-q {\n font-size: 12px;\n color: var(--text-dim);\n margin-bottom: 4px;\n}\n.reviw-resolved-a {\n font-size: 13px;\n color: var(--text);\n}\n/* Notice Bar */\n.reviw-questions-bar {\n display: none;\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n background: var(--accent);\n color: var(--text-inverse);\n padding: 8px 16px;\n font-size: 13px;\n z-index: 1050;\n justify-content: center;\n align-items: center;\n gap: 12px;\n}\n.reviw-questions-bar.visible {\n display: flex;\n}\n.reviw-questions-bar button {\n padding: 4px 12px;\n border: 1px solid rgba(255, 255, 255, 0.3);\n background: rgba(255, 255, 255, 0.1);\n color: var(--text-inverse);\n border-radius: 6px;\n cursor: pointer;\n font-size: 12px;\n transition: all 150ms ease;\n}\n.reviw-questions-bar button:hover {\n background: rgba(255, 255, 255, 0.2);\n}\n/* Adjust layout when bar is visible */\nbody.has-questions-bar header {\n top: 36px;\n}\nbody.has-questions-bar .toolbar,\nbody.has-questions-bar .table-wrap {\n margin-top: 36px;\n}\n/* Copy notification toast */\n.copy-toast {\n position: fixed;\n bottom: 60px;\n left: 50%;\n transform: translateX(-50%) translateY(20px);\n background: var(--accent);\n color: var(--text-inverse);\n padding: 8px 16px;\n border-radius: 8px;\n font-size: 13px;\n opacity: 0;\n pointer-events: none;\n transition: opacity 200ms ease, transform 200ms ease;\n z-index: 1000;\n}\n.copy-toast.visible {\n opacity: 1;\n transform: translateX(-50%) translateY(0);\n}\n@media (max-width: 960px) {\n .md-layout { flex-direction: column; }\n .md-left { max-width: 100%; flex: 1 1 0; min-height: 0; }\n .md-right { display: none; }\n .media-sidebar { display: none; }\n .media-sidebar-toggle { display: none !important; }\n}\n.md-layout.preview-only .md-right { display: none; }\n.md-layout.preview-only .md-left { flex: 1 1 0; min-height: 0; max-width: 100%; }\n.filter-menu {\n position: absolute;\n background: var(--panel-solid);\n border: 1px solid var(--border);\n border-radius: 10px;\n box-shadow: 0 14px 30px var(--shadow-color);\n padding: 8px;\n display: none;\n z-index: 12;\n width: 180px;\n transition: background 200ms ease, border-color 200ms ease;\n}\n.filter-menu button {\n width: 100%;\n display: block;\n margin: 4px 0;\n padding: 8px 10px;\n background: var(--selected-bg);\n border: 1px solid var(--border);\n border-radius: 8px;\n color: var(--text);\n cursor: pointer;\n font-size: 13px;\n text-align: left;\n}\n.filter-menu button:hover { background: var(--hover-bg); }\n.modal-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0,0,0,0.6);\n display: none;\n align-items: center;\n justify-content: center;\n z-index: 100;\n}\n.modal-overlay.visible { display: flex; }\n/* Submit modal: top-right position, no blocking overlay */\n#submit-modal {\n background: transparent;\n pointer-events: none;\n align-items: flex-start;\n justify-content: flex-end;\n}\n#submit-modal.visible { display: flex; }\n#submit-modal .modal-dialog {\n pointer-events: auto;\n margin: 60px 20px 20px 20px; /* top margin avoids header button overlap */\n}\n.modal-dialog {\n background: var(--panel-solid);\n border: 1px solid var(--border);\n border-radius: 14px;\n padding: 20px;\n width: 90%;\n max-width: 480px;\n box-shadow: 0 20px 40px var(--shadow-color);\n transition: background 200ms ease, border-color 200ms ease;\n}\n.modal-dialog h3 { margin: 0 0 12px; font-size: 18px; color: var(--accent); }\n.modal-summary { color: var(--muted); font-size: 13px; margin-bottom: 12px; }\n.modal-dialog label { display: block; font-size: 13px; margin-bottom: 6px; color: var(--muted); }\n.modal-dialog textarea {\n width: 100%;\n min-height: 100px;\n background: var(--input-bg);\n border: 1px solid var(--border);\n border-radius: 8px;\n color: var(--text);\n padding: 10px;\n font-size: 14px;\n resize: vertical;\n box-sizing: border-box;\n transition: background 200ms ease, border-color 200ms ease;\n}\n.modal-dialog textarea:focus { outline: none; border-color: var(--accent); }\n.modal-actions { display: flex; gap: 10px; justify-content: flex-end; margin-top: 16px; }\n.modal-actions button {\n padding: 8px 16px;\n border-radius: 8px;\n border: 1px solid var(--border);\n background: var(--selected-bg);\n color: var(--text);\n cursor: pointer;\n font-size: 14px;\n}\n.modal-actions button:hover { background: var(--hover-bg); }\n.modal-actions button.primary { background: var(--accent); color: var(--text-inverse); border-color: var(--accent); }\n.image-attach-area { margin: 12px 0; }\n.image-attach-area label { display: block; font-size: 12px; color: var(--muted); margin-bottom: 6px; }\n.image-attach-area.image-attach-small { margin: 8px 0; }\n.image-attach-area.image-attach-small label { font-size: 11px; }\n.image-preview-list { display: flex; flex-wrap: wrap; gap: 8px; min-height: 24px; }\n.image-preview-item { position: relative; }\n.image-preview-item img { max-width: 80px; max-height: 60px; border-radius: 4px; border: 1px solid var(--border); object-fit: cover; }\n.image-preview-item .remove-image { position: absolute; top: -6px; right: -6px; width: 18px; height: 18px; border-radius: 50%; background: var(--error, #ef4444); color: #fff; border: none; cursor: pointer; font-size: 12px; line-height: 1; display: flex; align-items: center; justify-content: center; }\n.image-preview-item .remove-image:hover { background: #dc2626; }\n.modal-actions button.primary:hover { background: #7dd3fc; }\n\n.modal-checkboxes { margin: 12px 0; }\n.modal-checkboxes label {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n font-size: 12px;\n color: var(--text);\n margin-bottom: 8px;\n cursor: pointer;\n}\n.modal-checkboxes input[type=\"checkbox\"] {\n margin-top: 2px;\n accent-color: var(--accent);\n}\n\nbody.dragging { user-select: none; cursor: crosshair; }\nbody.dragging .diff-line { cursor: crosshair; }\n@media (max-width: 840px) {\n header { flex-direction: column; align-items: flex-start; }\n .comment-list { width: calc(100% - 24px); right: 12px; }\n}\n/* Mermaid diagram styles */\n.mermaid-container {\n position: relative;\n margin: 16px 0;\n background: var(--panel);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 16px;\n overflow: hidden;\n}\n.mermaid-container .mermaid {\n display: flex;\n justify-content: center;\n}\n.mermaid-container .mermaid svg {\n max-width: 100%;\n height: auto;\n cursor: pointer;\n pointer-events: auto;\n}\n.mermaid-fullscreen-btn {\n position: absolute;\n top: 8px;\n right: 8px;\n background: var(--selected-bg);\n border: 1px solid var(--border);\n border-radius: 6px;\n padding: 6px 10px;\n cursor: pointer;\n color: var(--text);\n font-size: 12px;\n z-index: 2;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n.mermaid-fullscreen-btn:hover { background: var(--hover-bg); }\n/* Fullscreen overlay */\n.fullscreen-overlay {\n position: fixed;\n inset: 0;\n background: var(--bg);\n z-index: 1000;\n display: none;\n flex-direction: column;\n}\n.fullscreen-overlay.visible { display: flex; }\n.fullscreen-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 20px;\n background: var(--panel-alpha);\n border-bottom: 1px solid var(--border);\n}\n.fullscreen-header h3 { margin: 0; font-size: 14px; }\n.fullscreen-controls { display: flex; gap: 8px; align-items: center; }\n.fullscreen-controls button {\n background: var(--selected-bg);\n border: 1px solid var(--border);\n border-radius: 6px;\n padding: 6px 12px;\n cursor: pointer;\n color: var(--text);\n font-size: 13px;\n}\n.fullscreen-controls button:hover { background: var(--hover-bg); }\n.fullscreen-controls .zoom-info { font-size: 12px; color: var(--muted); min-width: 50px; text-align: center; }\n.fullscreen-content {\n flex: 1;\n overflow: hidden;\n position: relative;\n cursor: grab;\n}\n.fullscreen-content:active { cursor: grabbing; }\n.fullscreen-content .mermaid-wrapper {\n position: absolute;\n transform-origin: 0 0;\n padding: 40px;\n}\n.fullscreen-content .mermaid svg {\n display: block;\n}\n/* Minimap */\n.minimap {\n position: absolute;\n top: 70px;\n right: 20px;\n width: 200px;\n height: 150px;\n background: var(--panel-alpha);\n border: 1px solid var(--border);\n border-radius: 8px;\n overflow: hidden;\n box-shadow: 0 4px 12px rgba(0,0,0,0.15);\n}\n.minimap-content {\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 8px;\n}\n.minimap-content svg {\n max-width: 100%;\n max-height: 100%;\n opacity: 0.6;\n}\n.minimap-viewport {\n position: absolute;\n border: 2px solid var(--accent);\n background: rgba(102, 126, 234, 0.2);\n pointer-events: none;\n border-radius: 2px;\n}\n/* Error toast */\n.mermaid-error-toast {\n position: fixed;\n bottom: 20px;\n left: 50%;\n transform: translateX(-50%);\n background: var(--error);\n color: white;\n padding: 12px 24px;\n border-radius: 8px;\n font-size: 13px;\n max-width: 80%;\n z-index: 2000;\n display: none;\n box-shadow: 0 4px 12px rgba(0,0,0,0.3);\n white-space: pre-wrap;\n font-family: monospace;\n}\n.mermaid-error-toast.visible { display: block; }\n\n/* History Panel - Push layout */\nbody { transition: margin-right 0.25s ease; }\nbody.history-open { margin-right: 320px; }\nbody.history-open header { right: 320px; }\nheader { transition: right 0.25s ease; right: 0; }\n\n.history-toggle {\n background: var(--selected-bg);\n color: var(--text);\n border: 1px solid var(--border);\n border-radius: 6px;\n padding: 6px 8px;\n font-size: 14px;\n cursor: pointer;\n width: 34px;\n height: 34px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.history-toggle:hover { background: var(--border); }\n.history-panel {\n position: fixed;\n top: 0;\n right: 0;\n width: 320px;\n height: 100vh;\n background: var(--panel-solid);\n border-left: 1px solid var(--border);\n z-index: 90;\n transform: translateX(100%);\n transition: transform 0.25s ease;\n display: flex;\n flex-direction: column;\n}\n.history-panel.open { transform: translateX(0); }\n.history-panel-header {\n padding: 16px;\n border-bottom: 1px solid var(--border);\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.history-panel-header h3 { margin: 0; font-size: 14px; font-weight: 600; }\n.history-panel-close {\n background: transparent;\n border: none;\n color: var(--muted);\n cursor: pointer;\n font-size: 18px;\n padding: 4px;\n}\n.history-panel-close:hover { color: var(--text); }\n.history-panel-body {\n flex: 1;\n overflow-y: auto;\n padding: 12px;\n}\n.history-empty {\n color: var(--muted);\n font-size: 13px;\n text-align: center;\n padding: 40px 20px;\n}\n.history-date-group { margin-bottom: 16px; }\n.history-date {\n font-size: 11px;\n font-weight: 600;\n color: var(--muted);\n margin-bottom: 8px;\n text-transform: uppercase;\n}\n.history-item {\n background: var(--bg);\n border: 1px solid var(--border);\n border-radius: 6px;\n margin-bottom: 8px;\n overflow: hidden;\n}\n.history-item-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 10px;\n background: var(--selected-bg);\n cursor: pointer;\n}\n.history-item-header:hover { background: var(--hover-bg); }\n.history-item-file {\n font-size: 12px;\n font-weight: 600;\n color: var(--text);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 180px;\n}\n.history-item-time { font-size: 10px; color: var(--muted); }\n.history-item-body {\n display: none;\n padding: 10px;\n font-size: 12px;\n border-top: 1px solid var(--border);\n}\n.history-item.expanded .history-item-body { display: block; }\n.history-summary {\n color: var(--text);\n margin-bottom: 8px;\n padding-bottom: 8px;\n border-bottom: 1px solid var(--border);\n}\n.history-summary-label {\n font-size: 10px;\n font-weight: 600;\n color: var(--muted);\n margin-bottom: 4px;\n}\n.history-summary-text { white-space: pre-wrap; line-height: 1.4; }\n.history-comments-label {\n font-size: 10px;\n font-weight: 600;\n color: var(--muted);\n margin-bottom: 6px;\n}\n.history-comment {\n padding: 6px 0;\n border-bottom: 1px solid var(--border);\n}\n.history-comment:last-child { border-bottom: none; }\n.history-comment-line {\n font-size: 10px;\n color: var(--accent);\n font-weight: 600;\n margin-bottom: 2px;\n}\n.history-comment-quote {\n background: rgba(0, 0, 0, 0.3);\n border-left: 2px solid var(--accent);\n padding: 4px 8px;\n margin: 4px 0;\n font-family: 'SF Mono', Monaco, Consolas, monospace;\n font-size: 11px;\n color: var(--muted);\n white-space: pre-wrap;\n word-break: break-all;\n max-height: 80px;\n overflow-y: auto;\n}\n.history-comment-text {\n color: var(--text);\n line-height: 1.4;\n white-space: pre-wrap;\n}\n.history-badge {\n display: inline-block;\n background: var(--accent);\n color: var(--text-inverse);\n font-size: 10px;\n padding: 2px 6px;\n border-radius: 10px;\n margin-left: 6px;\n}\n/* Table scroll container */\n.table-container {\n overflow-x: auto;\n margin: 16px 0;\n border-radius: 8px;\n border: 1px solid var(--border);\n}\n.table-container table {\n margin: 0;\n border: none;\n border-radius: 0;\n}\n.table-container::-webkit-scrollbar {\n height: 6px;\n}\n.table-container::-webkit-scrollbar-track {\n background: var(--bg);\n border-radius: 3px;\n}\n.table-container::-webkit-scrollbar-thumb {\n background: var(--border);\n border-radius: 3px;\n}\n.table-container::-webkit-scrollbar-thumb:hover {\n background: var(--muted);\n}\n/* Media sidebar */\n.media-sidebar {\n display: flex;\n flex-shrink: 0;\n height: calc(100vh - 80px);\n transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n position: relative;\n z-index: 10;\n}\n.media-sidebar.hidden { display: none; }\n.media-sidebar-thumbs {\n width: 96px;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 8px;\n border-right: 1px solid var(--border);\n display: flex;\n flex-direction: column;\n gap: 8px;\n background: var(--panel);\n scrollbar-width: thin;\n scrollbar-color: var(--border) transparent;\n}\n.media-sidebar-thumbs::-webkit-scrollbar { width: 4px; }\n.media-sidebar-thumbs::-webkit-scrollbar-track { background: transparent; }\n.media-sidebar-thumbs::-webkit-scrollbar-thumb { background: var(--border); border-radius: 4px; }\n.media-sidebar-thumb {\n width: 80px;\n height: 60px;\n border-radius: 6px;\n border: 2px solid var(--border);\n overflow: hidden;\n cursor: pointer;\n position: relative;\n flex-shrink: 0;\n background: var(--bg);\n transition: border-color 0.2s ease, transform 0.15s ease, box-shadow 0.2s ease;\n}\n.media-sidebar-thumb:hover { border-color: var(--accent); transform: scale(1.05); box-shadow: 0 2px 8px var(--shadow-color); }\n.media-sidebar-thumb.active { border-color: var(--accent); box-shadow: 0 0 0 2px var(--accent), 0 2px 8px var(--shadow-color); }\n.media-sidebar-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }\n.media-sidebar-thumb svg { width: 100%; height: 100%; display: block; }\n.media-sidebar-thumb-video {\n position: relative;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #000;\n}\n.media-sidebar-thumb-video video { width: 100%; height: 100%; object-fit: cover; }\n.media-sidebar-thumb-video::after {\n content: '';\n position: absolute;\n width: 24px;\n height: 24px;\n background: rgba(255,255,255,0.85);\n border-radius: 50%;\n}\n.media-sidebar-thumb-video::before {\n content: '';\n position: absolute;\n z-index: 1;\n width: 0;\n height: 0;\n border-style: solid;\n border-width: 5px 0 5px 9px;\n border-color: transparent transparent transparent #000;\n margin-left: 2px;\n}\n.media-sidebar-thumb-mermaid {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n padding: 2px;\n background: var(--panel);\n overflow: hidden;\n}\n.media-sidebar-thumb-mermaid svg { width: 100% !important; height: 100% !important; max-width: 100%; max-height: 100%; display: block; }\n.media-sidebar-thumb-index {\n position: absolute;\n top: 2px;\n left: 2px;\n background: rgba(0,0,0,0.6);\n color: #fff;\n font-size: 9px;\n font-weight: 600;\n padding: 1px 4px;\n border-radius: 3px;\n line-height: 1.2;\n pointer-events: none;\n z-index: 1;\n}\n.media-sidebar-viewer {\n width: 0;\n overflow: hidden;\n transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n background: var(--bg);\n position: relative;\n}\n.media-sidebar-viewer.open {\n width: 45vw;\n overflow: hidden;\n padding: 16px;\n border-right: 1px solid var(--border);\n display: flex;\n flex-direction: column;\n}\n.media-sidebar-viewer-close {\n position: absolute;\n top: 8px;\n right: 8px;\n z-index: 2;\n background: var(--selected-bg);\n border: 1px solid var(--border);\n color: var(--text);\n width: 28px;\n height: 28px;\n border-radius: 50%;\n cursor: pointer;\n font-size: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.media-sidebar-viewer-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n.media-sidebar-viewer-content img { max-width: 100%; max-height: calc(100vh - 140px); object-fit: contain; border-radius: 8px; }\n.media-sidebar-viewer-content video { max-width: 100%; max-height: calc(100vh - 140px); border-radius: 8px; background: #000; }\n.media-sidebar-viewer-label {\n margin-top: 8px;\n font-size: 12px;\n color: var(--muted);\n text-align: center;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 100%;\n}\n.sidebar-zoom-indicator {\n position: absolute;\n bottom: 12px;\n right: 12px;\n background: rgba(0,0,0,0.7);\n color: #fff;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 11px;\n pointer-events: none;\n transition: opacity 0.3s ease;\n}\n.sidebar-zoom-indicator.hidden { opacity: 0; }\n.sidebar-mermaid-viewport { overflow: hidden; position: relative; cursor: grab; }\n.sidebar-mermaid-wrapper { position: absolute; left: 0; top: 0; transform-origin: 0 0; }\n.sidebar-video-container { width: 100%; }\n.sidebar-video-container video { width: 100%; max-height: calc(100vh - 200px); border-radius: 8px; background: #000; }\n/* Video timeline */\n.video-timeline {\n display: flex;\n gap: 8px;\n padding: 8px;\n overflow-x: auto;\n background: var(--panel);\n border-radius: 8px;\n margin-top: 8px;\n scrollbar-width: thin;\n scrollbar-color: var(--border) transparent;\n}\n.timeline-loading { color: var(--muted); font-size: 12px; padding: 8px; }\n.timeline-thumb-wrapper {\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n cursor: pointer;\n}\n.timeline-thumb {\n width: 80px;\n height: 60px;\n object-fit: cover;\n border-radius: 4px;\n border: 2px solid transparent;\n transition: border-color 0.2s ease;\n}\n.timeline-thumb.active { border-color: var(--accent); }\n.timeline-thumb:hover { border-color: var(--accent); opacity: 0.8; }\n.timeline-time { font-size: 10px; color: var(--muted); }\n/* Fullscreen overlay */\n.fullscreen-overlay {\n display: none;\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(0,0,0,0.9);\n z-index: 1000;\n flex-direction: column;\n}\n.fullscreen-overlay.visible { display: flex; }\n.fullscreen-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: rgba(0,0,0,0.8);\n border-bottom: 1px solid rgba(255,255,255,0.1);\n}\n.fullscreen-header h3 { margin: 0; color: #fff; font-size: 14px; }\n.fullscreen-controls { display: flex; gap: 6px; align-items: center; }\n.fullscreen-controls button {\n background: rgba(255,255,255,0.1);\n border: 1px solid rgba(255,255,255,0.2);\n color: #fff;\n padding: 6px 12px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 12px;\n}\n.fullscreen-controls button:hover { background: rgba(255,255,255,0.2); }\n.fullscreen-controls .zoom-info { color: #fff; font-size: 12px; min-width: 40px; text-align: center; }");
|
|
4076
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "/* Dark theme (default) */\n:root {\n color-scheme: dark;\n --bg: #0f172a;\n --bg-gradient: radial-gradient(circle at 20% 20%, #1e293b 0%, #0b1224 35%, #0b1224 60%, #0f172a 100%);\n --panel: #111827;\n --panel-alpha: rgba(15, 23, 42, 0.9);\n --panel-solid: #0b1224;\n --card-bg: rgba(11, 18, 36, 0.95);\n --input-bg: rgba(15, 23, 42, 0.6);\n --border: #1f2937;\n --accent: #60a5fa;\n --accent-2: #f472b6;\n --text: #e5e7eb;\n --text-inverse: #0b1224;\n --muted: #94a3b8;\n --comment: #0f766e;\n --badge: #22c55e;\n --table-bg: rgba(15, 23, 42, 0.7);\n --row-even: rgba(30, 41, 59, 0.4);\n --row-odd: rgba(15, 23, 42, 0.2);\n --selected-bg: rgba(96,165,250,0.15);\n --hover-bg: rgba(96,165,250,0.08);\n --shadow-color: rgba(0,0,0,0.35);\n --code-bg: #1e293b;\n --error: #dc3545;\n}\n/* Light theme */\n[data-theme=\"light\"] {\n color-scheme: light;\n --bg: #f8fafc;\n --bg-gradient: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);\n --panel: #ffffff;\n --panel-alpha: rgba(255, 255, 255, 0.95);\n --panel-solid: #ffffff;\n --card-bg: rgba(255, 255, 255, 0.98);\n --input-bg: #f1f5f9;\n --border: #e2e8f0;\n --accent: #3b82f6;\n --accent-2: #ec4899;\n --text: #1e293b;\n --text-inverse: #ffffff;\n --muted: #64748b;\n --comment: #14b8a6;\n --badge: #22c55e;\n --table-bg: #ffffff;\n --row-even: #f8fafc;\n --row-odd: #ffffff;\n --selected-bg: rgba(59,130,246,0.12);\n --hover-bg: rgba(59,130,246,0.06);\n --shadow-color: rgba(0,0,0,0.1);\n --code-bg: #f1f5f9;\n --error: #dc3545;\n}\n* { box-sizing: border-box; }\nbody {\n margin: 0;\n font-family: \"Inter\", \"Hiragino Sans\", system-ui, -apple-system, sans-serif;\n background: var(--bg-gradient);\n color: var(--text);\n min-height: 100vh;\n transition: background 200ms ease, color 200ms ease;\n}\nheader {\n position: sticky;\n top: 0;\n z-index: 5;\n padding: 12px 16px;\n background: var(--panel-alpha);\n backdrop-filter: blur(8px);\n border-bottom: 1px solid var(--border);\n display: flex;\n gap: 12px;\n align-items: center;\n justify-content: space-between;\n transition: background 200ms ease, border-color 200ms ease;\n}\nheader .meta { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }\nheader .actions { display: flex; gap: 8px; align-items: center; }\nheader h1 { display: flex; flex-direction: column; margin: 0; line-height: 1.3; }\nheader h1 .title-path { font-size: 11px; font-weight: 400; color: var(--muted); }\nheader h1 .title-file { font-size: 16px; font-weight: 700; }\nheader .badge {\n background: var(--selected-bg);\n color: var(--text);\n padding: 6px 10px;\n border-radius: 8px;\n font-size: 12px;\n border: 1px solid var(--border);\n}\nheader button {\n background: linear-gradient(135deg, #38bdf8, #6366f1);\n color: var(--text-inverse);\n border: none;\n border-radius: 10px;\n padding: 10px 14px;\n font-weight: 700;\n cursor: pointer;\n box-shadow: 0 10px 30px var(--shadow-color);\n transition: transform 120ms ease, box-shadow 120ms ease;\n}\nheader button:hover { transform: translateY(-1px); box-shadow: 0 16px 36px var(--shadow-color); }\nheader button:active { transform: translateY(0); }\n/* Theme toggle button */\n.theme-toggle {\n background: var(--selected-bg);\n color: var(--text);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 8px 10px;\n font-size: 16px;\n cursor: pointer;\n transition: background 120ms ease, transform 120ms ease;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 38px;\n height: 38px;\n}\n.theme-toggle:hover { background: var(--hover-bg); transform: scale(1.05); }\n\n.wrap { padding: 12px 16px 12px; }\n.toolbar {\n display: flex;\n gap: 12px;\n align-items: center;\n flex-wrap: wrap;\n margin: 10px 0 12px;\n color: var(--muted);\n font-size: 13px;\n}\n.toolbar button {\n background: rgba(96,165,250,0.12);\n color: var(--text);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 8px 10px;\n font-size: 13px;\n cursor: pointer;\n}\n.toolbar button:hover { background: rgba(96,165,250,0.2); }\n\n.table-box {\n background: var(--table-bg);\n border: 1px solid var(--border);\n border-radius: 12px;\n overflow: auto;\n max-height: calc(100vh - 110px);\n box-shadow: 0 20px 50px var(--shadow-color);\n transition: background 200ms ease, border-color 200ms ease;\n}\ntable {\n border-collapse: collapse;\n width: 100%;\n min-width: 540px;\n table-layout: fixed;\n}\nthead th {\n position: sticky;\n top: 0;\n z-index: 3;\n background: var(--panel-solid) !important;\n color: var(--muted);\n font-size: 12px;\n text-align: center;\n padding: 0;\n border-bottom: 1px solid var(--border);\n border-right: 1px solid var(--border);\n white-space: nowrap;\n transition: background 200ms ease;\n}\nthead th:not(.selected) {\n background: var(--panel-solid) !important;\n}\nthead th:first-child,\ntbody th {\n width: 28px;\n min-width: 28px;\n max-width: 28px;\n}\nthead th .th-inner {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n padding: 8px 6px;\n position: relative;\n height: 100%;\n}\nthead th.filtered .th-inner {\n background: linear-gradient(135deg, rgba(96,165,250,0.18), rgba(34,197,94,0.18));\n color: #e5e7eb;\n border-radius: 6px;\n box-shadow: inset 0 -1px 0 rgba(255,255,255,0.05);\n}\nthead th.filtered .th-inner::after {\n content: 'FILTER';\n font-size: 10px;\n color: #c7d2fe;\n background: rgba(99,102,241,0.24);\n border: 1px solid rgba(99,102,241,0.45);\n padding: 1px 6px;\n border-radius: 999px;\n position: absolute;\n bottom: 4px;\n right: 6px;\n}\n.resizer {\n position: absolute;\n right: 2px;\n top: 0;\n width: 6px;\n height: 100%;\n cursor: col-resize;\n user-select: none;\n touch-action: none;\n opacity: 0.6;\n}\n.resizer::after {\n content: '';\n position: absolute;\n top: 10%;\n bottom: 10%;\n left: 2px;\n width: 2px;\n background: rgba(96,165,250,0.6);\n border-radius: 2px;\n opacity: 0;\n transition: opacity 120ms ease;\n}\nthead th:hover .resizer::after { opacity: 1; }\n\n.freeze {\n position: sticky !important;\n background: var(--panel-solid);\n z-index: 4;\n}\n.freeze-row {\n position: sticky !important;\n background: var(--panel-solid);\n}\n.freeze-row.freeze {\n z-index: 6;\n}\nth.freeze-row {\n z-index: 6;\n}\ntbody th {\n position: sticky;\n left: 0;\n z-index: 2;\n background: var(--panel-solid);\n color: var(--muted);\n text-align: right;\n padding: 8px 10px;\n font-size: 12px;\n border-right: 1px solid var(--border);\n border-bottom: 1px solid var(--border);\n transition: background 200ms ease;\n}\ntd {\n padding: 10px 10px;\n border-bottom: 1px solid var(--border);\n border-right: 1px solid var(--border);\n background: var(--row-odd);\n color: var(--text);\n font-size: 13px;\n line-height: 1.45;\n cursor: pointer;\n transition: background 120ms ease, box-shadow 120ms ease;\n position: relative;\n white-space: pre-wrap;\n word-break: break-word;\n max-width: 320px;\n}\ntr:nth-child(even) td:not(.selected):not(.has-comment) { background: var(--row-even); }\ntd:hover:not(.selected) { background: var(--hover-bg); box-shadow: inset 0 0 0 1px rgba(96,165,250,0.25); }\ntd.has-comment { background: rgba(34,197,94,0.12); box-shadow: inset 0 0 0 1px rgba(34,197,94,0.35); }\ntd.selected, tbody th.selected { background: rgba(99,102,241,0.22) !important; box-shadow: inset 0 0 0 1px rgba(99,102,241,0.45); }\n.preview-highlight { background: rgba(167,139,250,0.18) !important; box-shadow: inset 0 0 0 2px rgba(139,92,246,0.35); border-radius: 4px; transition: background 150ms ease, box-shadow 150ms ease; padding-left: 8px; margin-left: -8px; }\nthead th.selected { background: #c7d2fe !important; box-shadow: inset 0 0 0 1px rgba(99,102,241,0.45); }\n[data-theme=\"dark\"] thead th.selected { background: #3730a3 !important; }\nbody.dragging { user-select: none; cursor: crosshair; }\nbody.dragging td, body.dragging tbody th { cursor: crosshair; }\ntbody th { cursor: pointer; }\ntd .dot {\n position: absolute;\n right: 6px;\n top: 6px;\n width: 8px;\n height: 8px;\n border-radius: 99px;\n background: var(--badge);\n box-shadow: 0 0 0 4px rgba(34,197,94,0.15);\n}\n.floating {\n position: fixed;\n z-index: 10;\n background: var(--panel-solid);\n border: 1px solid var(--border);\n border-radius: 12px;\n padding: 12px;\n width: min(420px, calc(100vw - 32px));\n box-shadow: 0 20px 40px var(--shadow-color);\n display: none;\n transition: background 200ms ease, border-color 200ms ease;\n}\n.card-close-x {\n position: absolute;\n top: 8px;\n right: 8px;\n width: 28px;\n height: 28px;\n padding: 0;\n background: transparent;\n border: none;\n color: var(--muted);\n font-size: 20px;\n line-height: 1;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n transition: background 120ms ease, color 120ms ease;\n}\n.card-close-x:hover { background: var(--border); color: var(--text);\n}\n.floating header {\n position: static;\n background: transparent;\n backdrop-filter: none;\n border: none;\n padding: 0 0 8px 0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.floating h2 { font-size: 14px; margin: 0; color: var(--text); }\n.floating button {\n margin-left: 8px;\n background: var(--accent);\n color: var(--text-inverse);\n border: 1px solid var(--accent);\n padding: 6px 10px;\n border-radius: 8px;\n font-size: 12px;\n font-weight: 600;\n cursor: pointer;\n transition: background 120ms ease, opacity 120ms ease;\n}\n.floating button.icon-only {\n width: 32px;\n height: 32px;\n padding: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n line-height: 1;\n}\n.floating button:hover { opacity: 0.85; }\n.copy-btn-float {\n position: absolute;\n top: 4px;\n right: 4px;\n z-index: 2;\n background: var(--panel-solid) !important;\n border: 1px solid var(--border) !important;\n color: var(--muted) !important;\n opacity: 0.7;\n}\n.copy-btn-float:hover { opacity: 1 !important; }\n.card-actions-split {\n display: flex;\n justify-content: space-between !important;\n align-items: center;\n margin-top: 8px;\n}\n.danger-text {\n background: transparent !important;\n border: none !important;\n color: #ef4444 !important;\n font-size: 12px;\n font-weight: 600;\n cursor: pointer;\n padding: 4px 8px;\n}\n.danger-text:hover { color: #dc2626 !important; text-decoration: underline; }\n.floating textarea {\n width: 100%;\n min-height: 70px;\n resize: vertical;\n border-radius: 8px;\n border: 1px solid var(--border);\n background: var(--input-bg);\n color: var(--text);\n padding: 10px;\n font-size: 13px;\n line-height: 1.4;\n transition: background 200ms ease, border-color 200ms ease;\n}\n.floating textarea:focus {\n outline: none;\n border-color: var(--accent);\n}\n.floating .actions {\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n margin-top: 10px;\n}\n.floating .actions button.primary {\n background: linear-gradient(135deg, #22c55e, #16a34a);\n color: var(--text-inverse);\n border: none;\n font-weight: 700;\n box-shadow: 0 10px 30px rgba(22,163,74,0.35);\n}\n.comment-list {\n position: fixed;\n right: 14px;\n bottom: 14px;\n width: 320px;\n max-height: 60vh;\n overflow: auto;\n border: 1px solid var(--border);\n border-radius: 12px;\n background: var(--card-bg);\n box-shadow: 0 18px 40px var(--shadow-color);\n padding: 12px;\n backdrop-filter: blur(6px);\n transition: opacity 120ms ease, transform 120ms ease, background 200ms ease;\n}\n.comment-list h3 { margin: 0 0 8px 0; font-size: 13px; color: var(--muted); }\n.comment-list ol {\n margin: 0;\n padding-left: 18px;\n color: var(--text);\n font-size: 13px;\n line-height: 1.45;\n}\n.comment-list li { margin-bottom: 6px; }\n.comment-list .hint { color: var(--muted); font-size: 12px; }\n.pill { display: inline-flex; align-items: center; gap: 6px; padding: 4px 8px; border-radius: 999px; background: var(--selected-bg); border: 1px solid var(--border); font-size: 12px; color: var(--text); cursor: pointer; transition: background 150ms ease, border-color 150ms ease; }\n.pill:hover { background: var(--hover-bg); border-color: var(--accent); }\n.pill strong { color: var(--text); font-weight: 700; }\n.comment-list.collapsed {\n opacity: 0;\n pointer-events: none;\n transform: translateY(8px) scale(0.98);\n}\n.md-preview {\n background: var(--input-bg);\n border: 1px solid var(--border);\n border-radius: 12px;\n padding: 14px;\n margin-bottom: 12px;\n transition: background 200ms ease, border-color 200ms ease;\n}\n.md-layout {\n display: flex;\n gap: 16px;\n align-items: stretch;\n margin-top: 8px;\n height: calc(100vh - 80px);\n}\n.md-left {\n flex: 1;\n min-width: 200px;\n overflow-y: auto;\n overflow-x: auto;\n overscroll-behavior: contain;\n}\n.md-left .md-preview {\n max-height: none;\n}\n.md-right {\n flex: 1;\n min-width: 0;\n overflow-y: auto;\n overflow-x: auto;\n overscroll-behavior: contain;\n}\n.md-right .table-box {\n max-width: none;\n min-width: 0;\n max-height: none;\n overflow: visible;\n}\n/* Ensure thead is opaque in md-right to prevent content showing through */\n.md-right thead th {\n background: var(--panel-solid) !important;\n}\n.md-right thead th.selected {\n background: #c7d2fe !important;\n}\n[data-theme=\"dark\"] .md-right thead th {\n background: var(--panel-solid) !important;\n}\n[data-theme=\"dark\"] .md-right thead th.selected {\n background: #3730a3 !important;\n}\n\n/* === Media Sidebar === */\n.media-sidebar {\n display: flex;\n flex-shrink: 0;\n height: calc(100vh - 80px);\n transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n position: relative;\n z-index: 10;\n max-width: 60%;\n}\n.media-sidebar.hidden {\n display: none;\n}\n.media-sidebar-thumbs {\n width: 96px;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 8px;\n border-right: 1px solid var(--border);\n display: flex;\n flex-direction: column;\n gap: 8px;\n background: var(--panel);\n scrollbar-width: thin;\n scrollbar-color: var(--border) transparent;\n}\n.media-sidebar-thumbs::-webkit-scrollbar {\n width: 4px;\n}\n.media-sidebar-thumbs::-webkit-scrollbar-track {\n background: transparent;\n}\n.media-sidebar-thumbs::-webkit-scrollbar-thumb {\n background: var(--border);\n border-radius: 4px;\n}\n.media-sidebar-thumb {\n width: 80px;\n height: 60px;\n border-radius: 6px;\n border: 2px solid var(--border);\n overflow: hidden;\n cursor: pointer;\n position: relative;\n flex-shrink: 0;\n background: var(--bg);\n transition: border-color 0.2s ease, transform 0.15s ease, box-shadow 0.2s ease;\n}\n.media-sidebar-thumb:hover {\n border-color: var(--accent);\n transform: scale(1.05);\n box-shadow: 0 2px 8px var(--shadow-color);\n}\n.media-sidebar-thumb.active {\n border-color: var(--accent);\n box-shadow: 0 0 0 2px var(--accent), 0 2px 8px var(--shadow-color);\n}\n.media-sidebar-thumb img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n}\n.media-sidebar-thumb svg {\n width: 100%;\n height: 100%;\n display: block;\n}\n.media-sidebar-thumb-video {\n position: relative;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #000;\n}\n.media-sidebar-thumb-video video {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n.media-sidebar-thumb-video::after {\n content: '';\n position: absolute;\n width: 24px;\n height: 24px;\n background: rgba(255,255,255,0.85);\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.media-sidebar-thumb-video::before {\n content: '';\n position: absolute;\n z-index: 1;\n width: 0;\n height: 0;\n border-style: solid;\n border-width: 5px 0 5px 9px;\n border-color: transparent transparent transparent #000;\n margin-left: 2px;\n}\n.media-sidebar-thumb-mermaid {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n padding: 2px;\n background: var(--panel);\n overflow: hidden;\n}\n.media-sidebar-thumb-mermaid svg {\n width: 100% !important;\n height: 100% !important;\n max-width: 100%;\n max-height: 100%;\n display: block;\n}\n.media-sidebar-thumb-index {\n position: absolute;\n top: 2px;\n left: 2px;\n background: rgba(0,0,0,0.6);\n color: #fff;\n font-size: 9px;\n font-weight: 600;\n padding: 1px 4px;\n border-radius: 3px;\n line-height: 1.2;\n pointer-events: none;\n z-index: 1;\n}\n.media-sidebar-viewer {\n width: 0;\n overflow: hidden;\n transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n background: var(--bg);\n position: relative;\n}\n.media-sidebar-viewer.open {\n width: 45vw;\n max-width: calc(100vw - 400px);\n overflow: hidden;\n padding: 16px;\n border-right: 1px solid var(--border);\n display: flex;\n flex-direction: column;\n}\n.media-sidebar-viewer-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n padding-top: 32px;\n}\n.media-sidebar-viewer-content img {\n max-width: 100%;\n max-height: calc(100vh - 170px);\n object-fit: contain;\n border-radius: 8px;\n}\n.media-sidebar-viewer-content video {\n max-width: 100%;\n max-height: calc(100vh - 170px);\n border-radius: 8px;\n background: #000;\n}\n.media-sidebar-viewer-content .viewer-mermaid-wrap {\n width: 100%;\n overflow: auto;\n display: flex;\n justify-content: center;\n background: var(--panel);\n border-radius: 8px;\n padding: 16px;\n}\n.media-sidebar-viewer-content .viewer-mermaid-wrap svg {\n width: 100% !important;\n height: auto !important;\n max-height: calc(100vh - 200px);\n}\n\n/* === Sidebar Rich Viewer: Mermaid zoom/pan/minimap === */\n.sidebar-mermaid-controls {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 10px;\n background: var(--panel-alpha);\n border: 1px solid var(--border);\n border-radius: 8px;\n margin-bottom: 8px;\n width: 100%;\n box-sizing: border-box;\n}\n.sidebar-mermaid-controls button {\n background: var(--selected-bg);\n border: 1px solid var(--border);\n border-radius: 5px;\n padding: 4px 10px;\n cursor: pointer;\n color: var(--text);\n font-size: 13px;\n line-height: 1;\n transition: background 0.15s ease;\n}\n.sidebar-mermaid-controls button:hover { background: var(--hover-bg); }\n.sidebar-mermaid-controls .sidebar-zoom-info {\n font-size: 11px;\n color: var(--muted);\n min-width: 40px;\n text-align: center;\n user-select: none;\n}\n.sidebar-mermaid-viewport {\n width: 100%;\n flex: 1;\n overflow: hidden;\n position: relative;\n cursor: grab;\n background: var(--panel);\n border-radius: 8px;\n border: 1px solid var(--border);\n}\n.sidebar-mermaid-viewport:active { cursor: grabbing; }\n.sidebar-mermaid-wrapper {\n position: absolute;\n transform-origin: 0 0;\n}\n.sidebar-mermaid-wrapper svg {\n display: block;\n}\n.sidebar-minimap {\n position: absolute;\n top: 12px;\n right: 8px;\n bottom: auto;\n left: auto;\n width: 140px;\n height: 100px;\n background: var(--panel-alpha);\n border: 1px solid var(--border);\n border-radius: 6px;\n overflow: hidden;\n box-shadow: 0 2px 8px rgba(0,0,0,0.12);\n z-index: 3;\n}\n.sidebar-minimap-content {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 6px;\n}\n.sidebar-minimap-content svg {\n max-width: 100%;\n max-height: 100%;\n opacity: 0.6;\n}\n.sidebar-minimap-viewport {\n position: absolute;\n border: 2px solid var(--accent);\n background: rgba(102, 126, 234, 0.2);\n pointer-events: none;\n border-radius: 2px;\n}\n\n/* === Sidebar Rich Viewer: Image zoom/pan === */\n.sidebar-image-viewport {\n width: 100%;\n flex: 1;\n overflow: hidden;\n position: relative;\n cursor: grab;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.sidebar-image-viewport.panning { cursor: grabbing; }\n.sidebar-image-viewport img {\n transform-origin: 0 0;\n max-width: none !important;\n max-height: none !important;\n border-radius: 0 !important;\n user-select: none;\n -webkit-user-drag: none;\n}\n.sidebar-zoom-indicator {\n position: absolute;\n bottom: 10px;\n left: 50%;\n transform: translateX(-50%);\n background: rgba(0, 0, 0, 0.65);\n color: #fff;\n font-size: 11px;\n font-weight: 600;\n padding: 3px 10px;\n border-radius: 12px;\n pointer-events: none;\n z-index: 3;\n backdrop-filter: blur(4px);\n transition: opacity 0.3s ease;\n user-select: none;\n}\n.sidebar-zoom-indicator.hidden { opacity: 0; }\n.sidebar-image-hint {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 11px;\n color: var(--muted);\n pointer-events: none;\n opacity: 0;\n transition: opacity 0.4s ease;\n text-align: center;\n z-index: 2;\n}\n\n/* === Sidebar Rich Viewer: Video container (timeline uses shared .video-timeline classes) === */\n.sidebar-video-container {\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: 0;\n}\n.sidebar-video-container video {\n width: 100%;\n border-radius: 8px 8px 0 0;\n background: #000;\n max-height: calc(100vh - 260px);\n}\n\n.media-sidebar-viewer-label {\n margin-top: 12px;\n font-size: 12px;\n color: var(--muted);\n text-align: center;\n word-break: break-all;\n}\n.media-sidebar-viewer-close {\n position: absolute;\n top: 8px;\n right: 8px;\n background: var(--panel);\n border: 1px solid var(--border);\n border-radius: 6px;\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n color: var(--text);\n font-size: 14px;\n z-index: 2;\n transition: background 0.15s ease;\n}\n.media-sidebar-viewer-close:hover {\n background: var(--hover-bg);\n}\n.sidebar-viewer-settings-btn {\n position: absolute;\n top: 8px;\n right: 44px;\n background: var(--panel);\n border: 1px solid var(--border);\n border-radius: 6px;\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n color: var(--text);\n font-size: 14px;\n z-index: 2;\n transition: background 0.15s ease;\n}\n.sidebar-viewer-settings-btn:hover {\n background: var(--hover-bg);\n}\n.sidebar-viewer-settings-btn + .video-settings-panel {\n position: absolute;\n top: 44px;\n right: 8px;\n}\n\n.media-sidebar-toggle {\n background: var(--panel);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 6px 10px;\n cursor: pointer;\n color: var(--text);\n font-size: 14px;\n transition: background 0.15s ease, border-color 0.15s ease;\n display: none;\n}\n.media-sidebar-toggle.has-media {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n.media-sidebar-toggle:hover {\n background: var(--hover-bg);\n border-color: var(--accent);\n}\n.media-sidebar-toggle .toggle-count {\n font-size: 10px;\n font-weight: 700;\n background: var(--accent);\n color: var(--text-inverse);\n padding: 1px 5px;\n border-radius: 8px;\n line-height: 1.4;\n}\n.view-toggle {\n background: var(--panel);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 6px 10px;\n cursor: pointer;\n color: var(--text);\n font-size: 14px;\n transition: background 0.15s ease, border-color 0.15s ease;\n}\n.view-toggle:hover { background: rgba(96,165,250,0.2); }\n.view-toggle.active { background: var(--accent); color: #fff; }\n@media (max-width: 1200px) {\n .media-sidebar-viewer.open {\n width: 40vw;\n max-width: calc(100vw - 350px);\n }\n}\n@media (max-width: 900px) {\n .media-sidebar-thumbs {\n width: 72px;\n }\n .media-sidebar-thumb {\n width: 56px;\n height: 42px;\n }\n .media-sidebar-viewer.open {\n width: 35vw;\n max-width: calc(100vw - 300px);\n }\n}\n@media (prefers-reduced-motion: reduce) {\n .media-sidebar,\n .media-sidebar-viewer,\n .media-sidebar-thumb {\n transition: none !important;\n }\n}\n\n.md-preview h1, .md-preview h2, .md-preview h3, .md-preview h4 {\n margin: 0.4em 0 0.2em;\n}\n/* Heading toggle feature */\n.md-preview .md-heading-toggle {\n margin: 0;\n}\n.md-preview .heading-toggle-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 0.6em;\n transition: transform 150ms ease;\n color: var(--muted);\n flex-shrink: 0;\n cursor: pointer;\n padding: 4px 8px;\n margin: -4px 0 -4px -8px;\n border-radius: 4px;\n}\n.md-preview .heading-toggle-icon:hover {\n background: var(--hover-bg);\n color: var(--accent);\n}\n.md-preview .md-heading-toggle.collapsed .heading-toggle-icon {\n transform: rotate(-90deg);\n}\n.md-preview details.heading-toggle {\n margin: 0.2em 0;\n}\n.md-preview details.heading-toggle > summary {\n list-style: none;\n cursor: default;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.md-preview details.heading-toggle > summary::-webkit-details-marker {\n display: none;\n}\n.md-preview details.heading-toggle > summary > .md-heading-toggle {\n flex: 1;\n}\n.md-preview details.heading-toggle:not([open]) > .toggle-content {\n display: none;\n}\n.md-preview .heading-section-content {\n /* Content wrapper for collapsible sections */\n}\n.md-preview .heading-section-content.hidden {\n display: none;\n}\n.md-preview p { margin: 0.3em 0; line-height: 1.5; }\n.md-preview img { max-width: 100%; height: auto; border-radius: 8px; }\n.md-preview video.video-preview { max-width: 100%; height: auto; border-radius: 8px; background: #000; }\n.md-preview table video.video-preview {\n display: block;\n width: 100%;\n height: auto;\n}\n.md-preview code { background: rgba(255,255,255,0.08); padding: 2px 4px; border-radius: 4px; }\n.md-preview pre {\n background: var(--code-bg);\n padding: 12px 16px;\n border-radius: 8px;\n overflow: auto;\n border: 1px solid var(--border);\n}\n.md-preview pre code {\n background: none;\n padding: 0;\n font-size: 13px;\n line-height: 1.5;\n}\n.md-preview pre code.hljs {\n background: transparent;\n padding: 0;\n}\n/* YAML Frontmatter table */\n.frontmatter-table {\n margin-bottom: 20px;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--border);\n background: var(--panel);\n}\n.frontmatter-table table {\n width: 100%;\n border-collapse: collapse;\n table-layout: fixed;\n}\n.frontmatter-table thead th {\n background: linear-gradient(135deg, rgba(147, 51, 234, 0.15), rgba(96, 165, 250, 0.15));\n color: var(--text);\n font-size: 12px;\n font-weight: 600;\n padding: 10px 16px;\n text-align: left;\n border-bottom: 1px solid var(--border);\n}\n.frontmatter-table tbody th {\n background: rgba(147, 51, 234, 0.08);\n color: #c084fc;\n font-weight: 500;\n font-size: 12px;\n padding: 8px 10px;\n text-align: left;\n border-bottom: 1px solid var(--border);\n vertical-align: top;\n}\n.frontmatter-table tbody td {\n padding: 8px 14px;\n font-size: 13px;\n border-bottom: 1px solid var(--border);\n word-break: break-word;\n}\n.frontmatter-table tbody tr:last-child th,\n.frontmatter-table tbody tr:last-child td {\n border-bottom: none;\n}\n.frontmatter-table .fm-tag {\n display: inline-block;\n background: rgba(96, 165, 250, 0.15);\n color: var(--accent);\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 11px;\n margin-right: 4px;\n margin-bottom: 4px;\n}\n.frontmatter-table pre {\n margin: 0;\n background: var(--code-bg);\n padding: 8px;\n border-radius: 4px;\n font-size: 11px;\n}\n/* Reviw questions preview cards */\n.reviw-questions-preview {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n.reviw-q-card {\n background: var(--code-bg);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 10px 12px;\n}\n.reviw-q-card.resolved {\n border-left: 3px solid #22c55e;\n}\n.reviw-q-card.pending {\n border-left: 3px solid #f59e0b;\n}\n.reviw-q-header {\n font-size: 12px;\n color: var(--text-dim);\n margin-bottom: 4px;\n}\n.reviw-q-header strong {\n color: var(--accent);\n}\n.reviw-q-question {\n font-size: 13px;\n color: var(--text);\n margin-bottom: 6px;\n}\n.reviw-q-options {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n margin-bottom: 6px;\n}\n.reviw-q-answer {\n font-size: 12px;\n color: #22c55e;\n background: rgba(34, 197, 94, 0.1);\n padding: 4px 8px;\n border-radius: 4px;\n}\n[data-theme=\"light\"] .frontmatter-table tbody th {\n color: #7c3aed;\n}\n/* Table scroll container and indicator */\n.table-scroll-container {\n position: relative;\n margin: 16px 0;\n}\n.table-scroll-wrapper {\n overflow-x: auto;\n border-radius: 8px;\n}\n.scroll-hint {\n text-align: right;\n font-size: 12px;\n color: var(--accent);\n padding: 4px 8px;\n margin-bottom: 4px;\n opacity: 0;\n visibility: hidden;\n transition: opacity 200ms ease;\n}\n.table-scroll-container.can-scroll .scroll-hint {\n opacity: 0.8;\n visibility: visible;\n}\n.table-scroll-container.scrolled-end .scroll-hint {\n opacity: 0;\n visibility: hidden;\n}\n/* Markdown tables in preview */\n.md-preview table:not(.frontmatter-table table) {\n min-width: 100%;\n width: max-content;\n border-collapse: collapse;\n border: 1px solid var(--border);\n border-radius: 8px;\n}\n.md-preview table:not(.frontmatter-table table) th,\n.md-preview table:not(.frontmatter-table table) td {\n padding: 10px 16px;\n text-align: left;\n border-bottom: 1px solid var(--border);\n vertical-align: top;\n word-break: break-word;\n overflow-wrap: anywhere;\n width: auto;\n}\n/* Force equal column widths when colgroup is not specified */\n.md-preview table:not(.frontmatter-table table) colgroup ~ * th,\n.md-preview table:not(.frontmatter-table table) colgroup ~ * td {\n width: auto;\n}\n.md-preview table:not(.frontmatter-table table) td:has(video),\n.md-preview table:not(.frontmatter-table table) td:has(img) {\n padding: 4px;\n line-height: 0;\n}\n.md-preview table:not(.frontmatter-table table) td video,\n.md-preview table:not(.frontmatter-table table) td img {\n width: 100%;\n max-width: 100%;\n height: auto;\n}\n.md-preview table:not(.frontmatter-table table) th {\n background: var(--panel);\n font-weight: 600;\n font-size: 13px;\n}\n.md-preview table:not(.frontmatter-table table) td {\n font-size: 13px;\n}\n.md-preview table:not(.frontmatter-table table) tr:last-child td {\n border-bottom: none;\n}\n.md-preview table:not(.frontmatter-table table) tr:hover td {\n background: var(--hover-bg);\n}\n/* Source table (右ペイン) */\n.table-box table {\n table-layout: fixed;\n width: 100%;\n}\n.table-box th,\n.table-box td {\n word-break: break-word;\n min-width: 140px;\n}\n.table-box th:first-child,\n.table-box td:first-child {\n min-width: 320px;\n max-width: 480px;\n}\n/* Image fullscreen overlay */\n.image-fullscreen-overlay {\n position: fixed;\n inset: 0;\n background: var(--bg);\n z-index: 1001;\n display: none;\n flex-direction: column;\n}\n.image-fullscreen-overlay.visible {\n display: flex;\n}\n.image-fs-content {\n flex: 1;\n overflow: hidden;\n position: relative;\n cursor: grab;\n touch-action: none;\n}\n.image-fs-content:active { cursor: grabbing; }\n.image-fs-content .image-fs-wrapper {\n position: absolute;\n transform-origin: 0 0;\n}\n.image-fs-content .image-fs-wrapper img {\n display: block;\n}\n/* Video fullscreen overlay */\n.video-fullscreen-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.95);\n z-index: 1001;\n display: none;\n justify-content: center;\n align-items: center;\n}\n.video-fullscreen-overlay.visible {\n display: flex;\n}\n.video-close-btn {\n position: absolute;\n top: 14px;\n right: 14px;\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(0, 0, 0, 0.55);\n border: 1px solid rgba(255, 255, 255, 0.25);\n border-radius: 50%;\n cursor: pointer;\n color: #fff;\n font-size: 18px;\n z-index: 10;\n backdrop-filter: blur(4px);\n transition: background 120ms ease, transform 120ms ease;\n}\n.video-close-btn:hover {\n background: rgba(0, 0, 0, 0.75);\n transform: scale(1.04);\n}\n.video-container {\n width: 90vw;\n height: 90vh;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.video-container video {\n width: 100%;\n height: 100%;\n object-fit: contain;\n border-radius: 8px;\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);\n}\n/* Video Timeline - shared base styles (used by both fullscreen and sidebar) */\n.video-timeline {\n background: rgba(0, 0, 0, 0.85);\n display: flex;\n overflow-x: auto;\n backdrop-filter: blur(8px);\n height: 80px;\n padding: 8px;\n gap: 4px;\n}\n.video-timeline::-webkit-scrollbar {\n height: 6px;\n}\n.video-timeline::-webkit-scrollbar-track {\n background: rgba(255, 255, 255, 0.1);\n border-radius: 3px;\n}\n.video-timeline::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0.3);\n border-radius: 3px;\n}\n.video-timeline::-webkit-scrollbar-thumb:hover {\n background: rgba(255, 255, 255, 0.5);\n}\n/* Fullscreen-specific video timeline positioning */\n.video-container .video-timeline {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 5;\n}\n/* Sidebar-specific video timeline sizing */\n.sidebar-video-container .video-timeline {\n width: 100%;\n height: 72px;\n padding: 6px;\n gap: 3px;\n border-radius: 0 0 8px 8px;\n background: rgba(0, 0, 0, 0.88);\n}\n.sidebar-video-container .video-timeline::-webkit-scrollbar { height: 5px; }\n.sidebar-video-container .video-timeline::-webkit-scrollbar-track { background: rgba(255, 255, 255, 0.08); }\n.sidebar-video-container .video-timeline::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, 0.25); }\n.sidebar-video-container .video-timeline::-webkit-scrollbar-thumb:hover { background: rgba(255, 255, 255, 0.4); }\n.timeline-thumb {\n height: 64px;\n cursor: pointer;\n border: 2px solid transparent;\n border-radius: 4px;\n flex-shrink: 0;\n transition: border-color 0.2s, transform 0.15s;\n opacity: 0.85;\n}\n.sidebar-video-container .timeline-thumb {\n height: 52px;\n opacity: 0.8;\n}\n.timeline-thumb:hover {\n border-color: rgba(59, 130, 246, 0.5);\n opacity: 1;\n transform: scale(1.05);\n}\n.timeline-thumb.active {\n border-color: #3b82f6;\n opacity: 1;\n box-shadow: 0 0 12px rgba(59, 130, 246, 0.5);\n}\n.sidebar-video-container .timeline-thumb.active {\n box-shadow: 0 0 8px rgba(59, 130, 246, 0.4);\n}\n.timeline-loading {\n color: rgba(255, 255, 255, 0.6);\n font-size: 12px;\n padding: 8px 12px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.sidebar-video-container .timeline-loading {\n font-size: 11px;\n padding: 6px 10px;\n gap: 6px;\n color: rgba(255, 255, 255, 0.5);\n}\n.timeline-loading::before {\n content: '';\n width: 14px;\n height: 14px;\n border: 2px solid rgba(255, 255, 255, 0.3);\n border-top-color: #3b82f6;\n border-radius: 50%;\n animation: timeline-spin 0.8s linear infinite;\n}\n.sidebar-video-container .timeline-loading::before {\n width: 12px;\n height: 12px;\n border-width: 2px;\n border-color: rgba(255, 255, 255, 0.25);\n border-top-color: #3b82f6;\n}\n@keyframes timeline-spin {\n to { transform: rotate(360deg); }\n}\n.timeline-time {\n position: absolute;\n bottom: 2px;\n right: 4px;\n font-size: 9px;\n color: #fff;\n background: rgba(0, 0, 0, 0.7);\n padding: 1px 4px;\n border-radius: 2px;\n pointer-events: none;\n}\n.sidebar-video-container .timeline-time {\n font-size: 8px;\n right: 3px;\n padding: 1px 3px;\n}\n.timeline-thumb-wrapper {\n position: relative;\n flex-shrink: 0;\n}\n/* Video threshold settings panel */\n.video-settings-btn {\n position: absolute;\n top: 14px;\n right: 64px;\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(0, 0, 0, 0.55);\n border: 1px solid rgba(255, 255, 255, 0.25);\n border-radius: 50%;\n cursor: pointer;\n color: #fff;\n font-size: 18px;\n z-index: 10;\n backdrop-filter: blur(4px);\n transition: background 120ms ease, transform 120ms ease;\n}\n.video-settings-btn:hover {\n background: rgba(0, 0, 0, 0.75);\n transform: scale(1.04);\n}\n.video-settings-panel {\n position: absolute;\n top: 60px;\n right: 14px;\n background: rgba(0, 0, 0, 0.9);\n border: 1px solid rgba(255, 255, 255, 0.2);\n border-radius: 12px;\n padding: 16px;\n z-index: 15;\n min-width: 280px;\n display: none;\n backdrop-filter: blur(8px);\n}\n.video-settings-panel.visible {\n display: block;\n}\n.video-settings-panel h4 {\n margin: 0 0 8px;\n color: #fff;\n font-size: 14px;\n font-weight: 500;\n}\n.video-settings-desc {\n margin: 0 0 12px;\n color: rgba(255, 255, 255, 0.6);\n font-size: 11px;\n line-height: 1.4;\n}\n.video-settings-buttons {\n display: flex;\n gap: 6px;\n margin-bottom: 12px;\n}\n.video-settings-buttons button {\n flex: 1;\n padding: 8px 4px;\n border: 1px solid rgba(255, 255, 255, 0.2);\n border-radius: 6px;\n background: rgba(255, 255, 255, 0.1);\n color: rgba(255, 255, 255, 0.8);\n font-size: 11px;\n cursor: pointer;\n transition: all 120ms ease;\n}\n.video-settings-buttons button:hover {\n background: rgba(255, 255, 255, 0.2);\n border-color: rgba(255, 255, 255, 0.3);\n}\n.video-settings-buttons button.selected {\n background: #3b82f6;\n border-color: #3b82f6;\n color: #fff;\n}\n.video-settings-actions {\n display: flex;\n gap: 8px;\n margin-top: 8px;\n}\n.video-settings-actions button {\n flex: 1;\n padding: 8px 12px;\n border: none;\n border-radius: 6px;\n font-size: 12px;\n cursor: pointer;\n transition: background 120ms ease;\n}\n.video-settings-actions .reset-btn {\n background: rgba(255, 255, 255, 0.15);\n color: #fff;\n}\n.video-settings-actions .reset-btn:hover {\n background: rgba(255, 255, 255, 0.25);\n}\n/* Video Shortcuts Help */\n.video-shortcuts-help {\n opacity: 0.85;\n transition: opacity 0.2s;\n}\n.video-shortcuts-help:hover {\n opacity: 1;\n}\n.video-shortcuts-help .shortcuts-title {\n font-weight: 600;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 10px;\n color: rgba(255, 255, 255, 0.7);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.video-shortcuts-help .shortcuts-title::before {\n content: '\\u2328';\n font-size: 14px;\n}\n.video-shortcuts-help .shortcut-item {\n margin-bottom: 6px;\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n.video-shortcuts-help .shortcut-item:last-child {\n margin-bottom: 0;\n}\n.video-shortcuts-help kbd {\n display: inline-block;\n background: rgba(255, 255, 255, 0.15);\n border: 1px solid rgba(255, 255, 255, 0.25);\n border-radius: 4px;\n padding: 2px 6px;\n font-family: system-ui, -apple-system, sans-serif;\n font-size: 10px;\n font-weight: 500;\n min-width: 18px;\n text-align: center;\n margin-right: 2px;\n}\n/* Reviw Questions Modal */\n.reviw-questions-overlay {\n display: none;\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.8);\n z-index: 1100;\n justify-content: center;\n align-items: center;\n}\n.reviw-questions-overlay.visible {\n display: flex;\n}\n.reviw-questions-modal {\n background: var(--card-bg);\n border: 1px solid var(--border);\n border-radius: 16px;\n width: 90%;\n max-width: 600px;\n max-height: 80vh;\n display: flex;\n flex-direction: column;\n box-shadow: 0 25px 80px rgba(0, 0, 0, 0.5);\n}\n.reviw-questions-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n border-bottom: 1px solid var(--border);\n}\n.reviw-questions-header h2 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--text);\n}\n.reviw-questions-header h2 span {\n font-size: 14px;\n color: var(--text-dim);\n font-weight: 400;\n}\n.reviw-questions-close {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n color: var(--text-dim);\n font-size: 18px;\n cursor: pointer;\n border-radius: 8px;\n transition: all 150ms ease;\n}\n.reviw-questions-close:hover {\n background: var(--border);\n color: var(--text);\n}\n.reviw-questions-body {\n flex: 1;\n overflow-y: auto;\n padding: 16px 20px;\n}\n.reviw-questions-footer {\n padding: 12px 20px;\n border-top: 1px solid var(--border);\n display: flex;\n justify-content: flex-end;\n}\n.reviw-questions-later {\n padding: 8px 16px;\n border: 1px solid var(--border);\n background: transparent;\n color: var(--text-dim);\n border-radius: 8px;\n cursor: pointer;\n font-size: 13px;\n transition: all 150ms ease;\n}\n.reviw-questions-later:hover {\n background: var(--border);\n color: var(--text);\n}\n/* Question Item */\n.reviw-question-item {\n margin-bottom: 20px;\n padding-bottom: 20px;\n border-bottom: 1px solid var(--border);\n}\n.reviw-question-item:last-child {\n margin-bottom: 0;\n padding-bottom: 0;\n border-bottom: none;\n}\n.reviw-question-text {\n font-size: 14px;\n color: var(--text);\n margin-bottom: 12px;\n line-height: 1.5;\n}\n.reviw-question-options {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n margin-bottom: 12px;\n}\n.reviw-question-option {\n padding: 8px 14px;\n border: 1px solid var(--border);\n background: transparent;\n color: var(--text);\n border-radius: 8px;\n cursor: pointer;\n font-size: 13px;\n transition: all 150ms ease;\n}\n.reviw-question-option:hover {\n border-color: var(--accent);\n background: rgba(96, 165, 250, 0.1);\n}\n.reviw-question-option.selected {\n border-color: var(--accent);\n background: var(--accent);\n color: var(--text-inverse);\n}\n.reviw-question-input {\n width: 100%;\n padding: 10px 12px;\n border: 1px solid var(--border);\n background: var(--input-bg);\n color: var(--text);\n border-radius: 8px;\n font-size: 13px;\n resize: vertical;\n min-height: 60px;\n}\n.reviw-question-input:focus {\n outline: none;\n border-color: var(--accent);\n}\n.reviw-question-input::placeholder {\n color: var(--text-dim);\n}\n.reviw-check-mark {\n color: #22c55e;\n font-weight: bold;\n}\n.reviw-question-item.answered {\n border-color: #22c55e;\n background: rgba(34, 197, 94, 0.05);\n}\n.reviw-question-submit {\n margin-top: 10px;\n padding: 8px 16px;\n border: none;\n background: var(--accent);\n color: var(--text-inverse);\n border-radius: 8px;\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n transition: all 150ms ease;\n}\n.reviw-question-submit:hover {\n filter: brightness(1.1);\n}\n.reviw-question-submit:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n/* Resolved Section */\n.reviw-resolved-section {\n margin-top: 16px;\n border-top: 1px solid var(--border);\n padding-top: 12px;\n}\n.reviw-resolved-toggle {\n display: flex;\n align-items: center;\n gap: 8px;\n background: none;\n border: none;\n color: var(--text-dim);\n font-size: 13px;\n cursor: pointer;\n padding: 4px 0;\n}\n.reviw-resolved-toggle:hover {\n color: var(--text);\n}\n.reviw-resolved-toggle .arrow {\n transition: transform 150ms ease;\n}\n.reviw-resolved-toggle.open .arrow {\n transform: rotate(90deg);\n}\n.reviw-resolved-list {\n display: none;\n margin-top: 12px;\n}\n.reviw-resolved-list.visible {\n display: block;\n}\n.reviw-resolved-item {\n padding: 10px 12px;\n background: var(--input-bg);\n border-radius: 8px;\n margin-bottom: 8px;\n opacity: 0.7;\n}\n.reviw-resolved-item:last-child {\n margin-bottom: 0;\n}\n.reviw-resolved-q {\n font-size: 12px;\n color: var(--text-dim);\n margin-bottom: 4px;\n}\n.reviw-resolved-a {\n font-size: 13px;\n color: var(--text);\n}\n/* Notice Bar */\n.reviw-questions-bar {\n display: none;\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n background: var(--accent);\n color: var(--text-inverse);\n padding: 8px 16px;\n font-size: 13px;\n z-index: 1050;\n justify-content: center;\n align-items: center;\n gap: 12px;\n}\n.reviw-questions-bar.visible {\n display: flex;\n}\n.reviw-questions-bar button {\n padding: 4px 12px;\n border: 1px solid rgba(255, 255, 255, 0.3);\n background: rgba(255, 255, 255, 0.1);\n color: var(--text-inverse);\n border-radius: 6px;\n cursor: pointer;\n font-size: 12px;\n transition: all 150ms ease;\n}\n.reviw-questions-bar button:hover {\n background: rgba(255, 255, 255, 0.2);\n}\n/* Adjust layout when bar is visible */\nbody.has-questions-bar header {\n top: 36px;\n}\nbody.has-questions-bar .toolbar,\nbody.has-questions-bar .table-wrap {\n margin-top: 36px;\n}\n/* Copy notification toast */\n.copy-toast {\n position: fixed;\n bottom: 60px;\n left: 50%;\n transform: translateX(-50%) translateY(20px);\n background: var(--accent);\n color: var(--text-inverse);\n padding: 8px 16px;\n border-radius: 8px;\n font-size: 13px;\n opacity: 0;\n pointer-events: none;\n transition: opacity 200ms ease, transform 200ms ease;\n z-index: 1000;\n}\n.copy-toast.visible {\n opacity: 1;\n transform: translateX(-50%) translateY(0);\n}\n@media (max-width: 960px) {\n .md-layout { flex-direction: column; }\n .md-left { max-width: 100%; flex: 1 1 0; min-height: 0; }\n .md-right { display: none; }\n .media-sidebar { display: none; }\n .media-sidebar-toggle { display: none !important; }\n}\n.md-layout.preview-only .md-right { display: none; }\n.md-layout.preview-only .md-left { flex: 1 1 0; min-height: 0; max-width: 100%; }\n.filter-menu {\n position: absolute;\n background: var(--panel-solid);\n border: 1px solid var(--border);\n border-radius: 10px;\n box-shadow: 0 14px 30px var(--shadow-color);\n padding: 8px;\n display: none;\n z-index: 12;\n width: 180px;\n transition: background 200ms ease, border-color 200ms ease;\n}\n.filter-menu button {\n width: 100%;\n display: block;\n margin: 4px 0;\n padding: 8px 10px;\n background: var(--selected-bg);\n border: 1px solid var(--border);\n border-radius: 8px;\n color: var(--text);\n cursor: pointer;\n font-size: 13px;\n text-align: left;\n}\n.filter-menu button:hover { background: var(--hover-bg); }\n.modal-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0,0,0,0.6);\n display: none;\n align-items: center;\n justify-content: center;\n z-index: 100;\n}\n.modal-overlay.visible { display: flex; }\n/* Submit modal: top-right position, no blocking overlay */\n#submit-modal {\n background: transparent;\n pointer-events: none;\n align-items: flex-start;\n justify-content: flex-end;\n}\n#submit-modal.visible { display: flex; }\n#submit-modal .modal-dialog {\n pointer-events: auto;\n margin: 60px 20px 20px 20px; /* top margin avoids header button overlap */\n}\n.modal-dialog {\n background: var(--panel-solid);\n border: 1px solid var(--border);\n border-radius: 14px;\n padding: 20px;\n width: 90%;\n max-width: 480px;\n box-shadow: 0 20px 40px var(--shadow-color);\n transition: background 200ms ease, border-color 200ms ease;\n}\n.modal-dialog h3 { margin: 0 0 12px; font-size: 18px; color: var(--accent); }\n.modal-summary { color: var(--muted); font-size: 13px; margin-bottom: 12px; }\n.modal-dialog label { display: block; font-size: 13px; margin-bottom: 6px; color: var(--muted); }\n.modal-dialog textarea {\n width: 100%;\n min-height: 100px;\n background: var(--input-bg);\n border: 1px solid var(--border);\n border-radius: 8px;\n color: var(--text);\n padding: 10px;\n font-size: 14px;\n resize: vertical;\n box-sizing: border-box;\n transition: background 200ms ease, border-color 200ms ease;\n}\n.modal-dialog textarea:focus { outline: none; border-color: var(--accent); }\n.modal-actions { display: flex; gap: 10px; justify-content: flex-end; margin-top: 16px; }\n.modal-actions button {\n padding: 8px 16px;\n border-radius: 8px;\n border: 1px solid var(--border);\n background: var(--selected-bg);\n color: var(--text);\n cursor: pointer;\n font-size: 14px;\n}\n.modal-actions button:hover { background: var(--hover-bg); }\n.modal-actions button.primary { background: var(--accent); color: var(--text-inverse); border-color: var(--accent); }\n.image-attach-area { margin: 12px 0; }\n.image-attach-area label { display: block; font-size: 12px; color: var(--muted); margin-bottom: 6px; }\n.image-attach-area.image-attach-small { margin: 8px 0; }\n.image-attach-area.image-attach-small label { font-size: 11px; }\n.image-preview-list { display: flex; flex-wrap: wrap; gap: 8px; min-height: 24px; }\n.image-preview-item { position: relative; }\n.image-preview-item img { max-width: 80px; max-height: 60px; border-radius: 4px; border: 1px solid var(--border); object-fit: cover; }\n.image-preview-item .remove-image { position: absolute; top: -6px; right: -6px; width: 18px; height: 18px; border-radius: 50%; background: var(--error, #ef4444); color: #fff; border: none; cursor: pointer; font-size: 12px; line-height: 1; display: flex; align-items: center; justify-content: center; }\n.image-preview-item .remove-image:hover { background: #dc2626; }\n.modal-actions button.primary:hover { background: #7dd3fc; }\n\n.modal-checkboxes { margin: 12px 0; }\n.modal-checkboxes label {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n font-size: 12px;\n color: var(--text);\n margin-bottom: 8px;\n cursor: pointer;\n}\n.modal-checkboxes input[type=\"checkbox\"] {\n margin-top: 2px;\n accent-color: var(--accent);\n}\n\nbody.dragging { user-select: none; cursor: crosshair; }\nbody.dragging .diff-line { cursor: crosshair; }\n@media (max-width: 840px) {\n header { flex-direction: column; align-items: flex-start; }\n .comment-list { width: calc(100% - 24px); right: 12px; }\n}\n/* Mermaid diagram styles */\n.mermaid-container {\n position: relative;\n margin: 16px 0;\n background: var(--panel);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 16px;\n overflow: hidden;\n}\n.mermaid-container .mermaid {\n display: flex;\n justify-content: center;\n}\n.mermaid-container .mermaid svg {\n max-width: 100%;\n height: auto;\n cursor: pointer;\n pointer-events: auto;\n}\n.mermaid-error-banner {\n background: #fff3f3;\n color: #c33;\n border: 1px solid #e88;\n border-radius: 4px;\n padding: 6px 10px;\n margin-bottom: 8px;\n font-size: 12px;\n font-weight: 500;\n}\n[data-theme=\"dark\"] .mermaid-error-banner {\n background: #3a1a1a;\n color: #f88;\n border-color: #744;\n}\n.mermaid-fullscreen-btn {\n position: absolute;\n top: 8px;\n right: 8px;\n background: var(--selected-bg);\n border: 1px solid var(--border);\n border-radius: 6px;\n padding: 6px 10px;\n cursor: pointer;\n color: var(--text);\n font-size: 12px;\n z-index: 2;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n.mermaid-fullscreen-btn:hover { background: var(--hover-bg); }\n/* Fullscreen overlay */\n.fullscreen-overlay {\n position: fixed;\n inset: 0;\n background: var(--bg);\n z-index: 1000;\n display: none;\n flex-direction: column;\n}\n.fullscreen-overlay.visible { display: flex; }\n.fullscreen-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 20px;\n background: var(--panel-alpha);\n border-bottom: 1px solid var(--border);\n}\n.fullscreen-header h3 { margin: 0; font-size: 14px; }\n.fullscreen-controls { display: flex; gap: 8px; align-items: center; }\n.fullscreen-controls button {\n background: var(--selected-bg);\n border: 1px solid var(--border);\n border-radius: 6px;\n padding: 6px 12px;\n cursor: pointer;\n color: var(--text);\n font-size: 13px;\n}\n.fullscreen-controls button:hover { background: var(--hover-bg); }\n.fullscreen-controls .zoom-info { font-size: 12px; color: var(--muted); min-width: 50px; text-align: center; }\n.fullscreen-content {\n flex: 1;\n overflow: hidden;\n position: relative;\n cursor: grab;\n touch-action: none;\n}\n.fullscreen-content:active { cursor: grabbing; }\n.fullscreen-content .mermaid-wrapper {\n position: absolute;\n transform-origin: 0 0;\n padding: 40px;\n}\n.fullscreen-content .mermaid svg {\n display: block;\n}\n/* Minimap */\n.minimap {\n position: absolute;\n top: 70px;\n right: 20px;\n width: 200px;\n height: 150px;\n background: var(--panel-alpha);\n border: 1px solid var(--border);\n border-radius: 8px;\n overflow: hidden;\n box-shadow: 0 4px 12px rgba(0,0,0,0.15);\n}\n.minimap-content {\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 8px;\n}\n.minimap-content svg {\n max-width: 100%;\n max-height: 100%;\n opacity: 0.6;\n}\n.minimap-viewport {\n position: absolute;\n border: 2px solid var(--accent);\n background: rgba(102, 126, 234, 0.2);\n pointer-events: none;\n border-radius: 2px;\n}\n/* Error toast */\n.mermaid-error-toast {\n position: fixed;\n bottom: 20px;\n left: 50%;\n transform: translateX(-50%);\n background: var(--error);\n color: white;\n padding: 12px 24px;\n border-radius: 8px;\n font-size: 13px;\n max-width: 80%;\n z-index: 2000;\n display: none;\n box-shadow: 0 4px 12px rgba(0,0,0,0.3);\n white-space: pre-wrap;\n font-family: monospace;\n}\n.mermaid-error-toast.visible { display: block; }\n\n/* History Panel - Push layout */\nbody { transition: margin-right 0.25s ease; }\nbody.history-open { margin-right: 320px; }\nbody.history-open header { right: 320px; }\nheader { transition: right 0.25s ease; right: 0; }\n\n.history-toggle {\n background: var(--selected-bg);\n color: var(--text);\n border: 1px solid var(--border);\n border-radius: 6px;\n padding: 6px 8px;\n font-size: 14px;\n cursor: pointer;\n width: 34px;\n height: 34px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.history-toggle:hover { background: var(--border); }\n.history-panel {\n position: fixed;\n top: 0;\n right: 0;\n width: 320px;\n height: 100vh;\n background: var(--panel-solid);\n border-left: 1px solid var(--border);\n z-index: 90;\n transform: translateX(100%);\n transition: transform 0.25s ease;\n display: flex;\n flex-direction: column;\n}\n.history-panel.open { transform: translateX(0); }\n.history-panel-header {\n padding: 16px;\n border-bottom: 1px solid var(--border);\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.history-panel-header h3 { margin: 0; font-size: 14px; font-weight: 600; }\n.history-panel-close {\n background: transparent;\n border: none;\n color: var(--muted);\n cursor: pointer;\n font-size: 18px;\n padding: 4px;\n}\n.history-panel-close:hover { color: var(--text); }\n.history-panel-body {\n flex: 1;\n overflow-y: auto;\n padding: 12px;\n}\n.history-empty {\n color: var(--muted);\n font-size: 13px;\n text-align: center;\n padding: 40px 20px;\n}\n.history-date-group { margin-bottom: 16px; }\n.history-date {\n font-size: 11px;\n font-weight: 600;\n color: var(--muted);\n margin-bottom: 8px;\n text-transform: uppercase;\n}\n.history-item {\n background: var(--bg);\n border: 1px solid var(--border);\n border-radius: 6px;\n margin-bottom: 8px;\n overflow: hidden;\n}\n.history-item-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 10px;\n background: var(--selected-bg);\n cursor: pointer;\n}\n.history-item-header:hover { background: var(--hover-bg); }\n.history-item-file {\n font-size: 12px;\n font-weight: 600;\n color: var(--text);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 180px;\n}\n.history-item-time { font-size: 10px; color: var(--muted); }\n.history-item-body {\n display: none;\n padding: 10px;\n font-size: 12px;\n border-top: 1px solid var(--border);\n}\n.history-item.expanded .history-item-body { display: block; }\n.history-summary {\n color: var(--text);\n margin-bottom: 8px;\n padding-bottom: 8px;\n border-bottom: 1px solid var(--border);\n}\n.history-summary-label {\n font-size: 10px;\n font-weight: 600;\n color: var(--muted);\n margin-bottom: 4px;\n}\n.history-summary-text { white-space: pre-wrap; line-height: 1.4; }\n.history-comments-label {\n font-size: 10px;\n font-weight: 600;\n color: var(--muted);\n margin-bottom: 6px;\n}\n.history-comment {\n padding: 6px 0;\n border-bottom: 1px solid var(--border);\n}\n.history-comment:last-child { border-bottom: none; }\n.history-comment-line {\n font-size: 10px;\n color: var(--accent);\n font-weight: 600;\n margin-bottom: 2px;\n}\n.history-comment-quote {\n background: rgba(0, 0, 0, 0.3);\n border-left: 2px solid var(--accent);\n padding: 4px 8px;\n margin: 4px 0;\n font-family: 'SF Mono', Monaco, Consolas, monospace;\n font-size: 11px;\n color: var(--muted);\n white-space: pre-wrap;\n word-break: break-all;\n max-height: 80px;\n overflow-y: auto;\n}\n.history-comment-text {\n color: var(--text);\n line-height: 1.4;\n white-space: pre-wrap;\n}\n.history-badge {\n display: inline-block;\n background: var(--accent);\n color: var(--text-inverse);\n font-size: 10px;\n padding: 2px 6px;\n border-radius: 10px;\n margin-left: 6px;\n}\n/* Table scroll container */\n.table-container {\n overflow-x: auto;\n margin: 16px 0;\n border-radius: 8px;\n border: 1px solid var(--border);\n}\n.table-container table {\n margin: 0;\n border: none;\n border-radius: 0;\n}\n.table-container::-webkit-scrollbar {\n height: 6px;\n}\n.table-container::-webkit-scrollbar-track {\n background: var(--bg);\n border-radius: 3px;\n}\n.table-container::-webkit-scrollbar-thumb {\n background: var(--border);\n border-radius: 3px;\n}\n.table-container::-webkit-scrollbar-thumb:hover {\n background: var(--muted);\n}\n/* Media sidebar */\n.media-sidebar {\n display: flex;\n flex-shrink: 0;\n height: calc(100vh - 80px);\n transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n position: relative;\n z-index: 10;\n max-width: 60%;\n}\n.media-sidebar.hidden { display: none; }\n.media-sidebar-thumbs {\n width: 96px;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 8px;\n border-right: 1px solid var(--border);\n display: flex;\n flex-direction: column;\n gap: 8px;\n background: var(--panel);\n scrollbar-width: thin;\n scrollbar-color: var(--border) transparent;\n}\n.media-sidebar-thumbs::-webkit-scrollbar { width: 4px; }\n.media-sidebar-thumbs::-webkit-scrollbar-track { background: transparent; }\n.media-sidebar-thumbs::-webkit-scrollbar-thumb { background: var(--border); border-radius: 4px; }\n.media-sidebar-thumb {\n width: 80px;\n height: 60px;\n border-radius: 6px;\n border: 2px solid var(--border);\n overflow: hidden;\n cursor: pointer;\n position: relative;\n flex-shrink: 0;\n background: var(--bg);\n transition: border-color 0.2s ease, transform 0.15s ease, box-shadow 0.2s ease;\n}\n.media-sidebar-thumb:hover { border-color: var(--accent); transform: scale(1.05); box-shadow: 0 2px 8px var(--shadow-color); }\n.media-sidebar-thumb.active { border-color: var(--accent); box-shadow: 0 0 0 2px var(--accent), 0 2px 8px var(--shadow-color); }\n.media-sidebar-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }\n.media-sidebar-thumb svg { width: 100%; height: 100%; display: block; }\n.media-sidebar-thumb-video {\n position: relative;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #000;\n}\n.media-sidebar-thumb-video video { width: 100%; height: 100%; object-fit: cover; }\n.media-sidebar-thumb-video::after {\n content: '';\n position: absolute;\n width: 24px;\n height: 24px;\n background: rgba(255,255,255,0.85);\n border-radius: 50%;\n}\n.media-sidebar-thumb-video::before {\n content: '';\n position: absolute;\n z-index: 1;\n width: 0;\n height: 0;\n border-style: solid;\n border-width: 5px 0 5px 9px;\n border-color: transparent transparent transparent #000;\n margin-left: 2px;\n}\n.media-sidebar-thumb-mermaid {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n padding: 2px;\n background: var(--panel);\n overflow: hidden;\n}\n.media-sidebar-thumb-mermaid svg { width: 100% !important; height: 100% !important; max-width: 100%; max-height: 100%; display: block; }\n.media-sidebar-thumb-index {\n position: absolute;\n top: 2px;\n left: 2px;\n background: rgba(0,0,0,0.6);\n color: #fff;\n font-size: 9px;\n font-weight: 600;\n padding: 1px 4px;\n border-radius: 3px;\n line-height: 1.2;\n pointer-events: none;\n z-index: 1;\n}\n.media-sidebar-viewer {\n width: 0;\n overflow: hidden;\n transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n background: var(--bg);\n position: relative;\n}\n.media-sidebar-viewer.open {\n width: 45vw;\n max-width: calc(100vw - 400px);\n overflow: hidden;\n padding: 16px;\n border-right: 1px solid var(--border);\n display: flex;\n flex-direction: column;\n}\n.media-sidebar-viewer-close {\n position: absolute;\n top: 8px;\n right: 8px;\n z-index: 2;\n background: var(--selected-bg);\n border: 1px solid var(--border);\n color: var(--text);\n width: 28px;\n height: 28px;\n border-radius: 50%;\n cursor: pointer;\n font-size: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.media-sidebar-viewer-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n.media-sidebar-viewer-content img { max-width: 100%; max-height: calc(100vh - 140px); object-fit: contain; border-radius: 8px; }\n.media-sidebar-viewer-content video { max-width: 100%; max-height: calc(100vh - 140px); border-radius: 8px; background: #000; }\n.media-sidebar-viewer-label {\n margin-top: 8px;\n font-size: 12px;\n color: var(--muted);\n text-align: center;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 100%;\n}\n.sidebar-zoom-indicator {\n position: absolute;\n bottom: 12px;\n right: 12px;\n background: rgba(0,0,0,0.7);\n color: #fff;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 11px;\n pointer-events: none;\n transition: opacity 0.3s ease;\n}\n.sidebar-zoom-indicator.hidden { opacity: 0; }\n.sidebar-mermaid-viewport { overflow: hidden; position: relative; cursor: grab; }\n.sidebar-mermaid-wrapper { position: absolute; left: 0; top: 0; transform-origin: 0 0; }\n.sidebar-video-container { width: 100%; }\n.sidebar-video-container video { width: 100%; max-height: calc(100vh - 200px); border-radius: 8px; background: #000; }\n/* Video timeline */\n.video-timeline {\n display: flex;\n gap: 8px;\n padding: 8px;\n overflow-x: auto;\n background: var(--panel);\n border-radius: 8px;\n margin-top: 8px;\n scrollbar-width: thin;\n scrollbar-color: var(--border) transparent;\n}\n.timeline-loading { color: var(--muted); font-size: 12px; padding: 8px; }\n.timeline-thumb-wrapper {\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n cursor: pointer;\n}\n.timeline-thumb {\n width: 80px;\n height: 60px;\n object-fit: cover;\n border-radius: 4px;\n border: 2px solid transparent;\n transition: border-color 0.2s ease;\n}\n.timeline-thumb.active { border-color: var(--accent); }\n.timeline-thumb:hover { border-color: var(--accent); opacity: 0.8; }\n.timeline-time { font-size: 10px; color: var(--muted); }\n/* Fullscreen overlay */\n.fullscreen-overlay {\n display: none;\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(0,0,0,0.9);\n z-index: 1000;\n flex-direction: column;\n}\n.fullscreen-overlay.visible { display: flex; }\n.fullscreen-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: rgba(0,0,0,0.8);\n border-bottom: 1px solid rgba(255,255,255,0.1);\n}\n.fullscreen-header h3 { margin: 0; color: #fff; font-size: 14px; }\n.fullscreen-controls { display: flex; gap: 6px; align-items: center; }\n.fullscreen-controls button {\n background: rgba(255,255,255,0.1);\n border: 1px solid rgba(255,255,255,0.2);\n color: #fff;\n padding: 6px 12px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 12px;\n}\n.fullscreen-controls button:hover { background: rgba(255,255,255,0.2); }\n.fullscreen-controls .zoom-info { color: #fff; font-size: 12px; min-width: 40px; text-align: center; }\n@media (max-width: 960px) {\n .media-sidebar { display: none !important; }\n .media-sidebar-toggle { display: none !important; }\n}\n.video-overlay-wrapper {\n position: relative;\n display: inline-block;\n}\n.video-fs-overlay-btn {\n position: absolute;\n top: 8px;\n right: 8px;\n width: 36px;\n height: 36px;\n padding: 0;\n background: rgba(0,0,0,0.6);\n border: 1px solid rgba(255,255,255,0.3);\n color: #fff;\n font-size: 18px;\n line-height: 1;\n cursor: pointer;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 5;\n transition: background 120ms ease;\n}\n.video-fs-overlay-btn:hover { background: rgba(0,0,0,0.8); }\n@media (max-width: 600px) {\n .minimap { display: none !important; }\n .fullscreen-header { padding: 8px 12px; }\n .fullscreen-controls { gap: 4px; }\n .fullscreen-controls button { padding: 6px 8px; font-size: 11px; }\n .fullscreen-controls .zoom-info { font-size: 11px; min-width: 32px; }\n .history-panel { width: 100vw; }\n body.history-open header { right: 0; }\n}");
|
|
3873
4077
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "</style></head><body>");
|
|
3874
4078
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<header><div class=\"meta\">");
|
|
3875
4079
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<h1>");
|
|
@@ -4133,15 +4337,38 @@ function _M0FP36kazuph5reviw4core21build__script__footer(buf, port, mode, filena
|
|
|
4133
4337
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<script src=\"https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.min.js\"></script>");
|
|
4134
4338
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<script>");
|
|
4135
4339
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "window.__mermaidErrors=[];");
|
|
4136
|
-
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "
|
|
4340
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "window.__collectMermaidErrors=async function(){");
|
|
4341
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "window.__mermaidErrors=[];");
|
|
4342
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "var divs=document.querySelectorAll('.mermaid');");
|
|
4343
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "for(var i=0;i<divs.length;i++){");
|
|
4344
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "var d=divs[i];");
|
|
4345
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "var noSvg=!d.querySelector('svg');");
|
|
4346
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "var errSvg=!!d.querySelector('.error-icon');");
|
|
4347
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "if(noSvg||errSvg){");
|
|
4348
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "var line=parseInt(d.getAttribute('data-source-line'))||0;");
|
|
4349
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "var src=d.getAttribute('data-source')||'';");
|
|
4350
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "var msg='Mermaid render failed';");
|
|
4351
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "try{await mermaid.parse(src);}catch(e){msg=e.message||String(e);}");
|
|
4352
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "console.error('[reviw] Mermaid error at line '+line+':',msg);");
|
|
4353
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "window.__mermaidErrors.push({line:line,message:msg,source:src});");
|
|
4354
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "var container=d.closest('.mermaid-container');");
|
|
4355
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "if(container&&!container.querySelector('.mermaid-error-banner')){");
|
|
4356
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "var banner=document.createElement('div');");
|
|
4357
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "banner.className='mermaid-error-banner';");
|
|
4358
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "banner.textContent='\\u26A0 Mermaid error (line '+line+'): '+msg;");
|
|
4359
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "container.prepend(banner);");
|
|
4360
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "}");
|
|
4361
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "}");
|
|
4362
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "}");
|
|
4363
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "};");
|
|
4137
4364
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "mermaid.initialize({startOnLoad:false,logLevel:0,theme:document.documentElement.getAttribute('data-theme')==='light'?'default':'dark',securityLevel:'loose'});");
|
|
4138
|
-
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "mermaid.run().catch(function(e){console.error('[reviw] Mermaid render error:',e);window.
|
|
4365
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "mermaid.run().then(function(){return window.__collectMermaidErrors();}).catch(function(e){console.error('[reviw] Mermaid render error:',e);return window.__collectMermaidErrors();});");
|
|
4139
4366
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "window.__reRenderMermaid=function(theme){");
|
|
4140
|
-
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "
|
|
4367
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "document.querySelectorAll('.mermaid-error-banner').forEach(function(b){b.remove();});");
|
|
4141
4368
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "mermaid.initialize({startOnLoad:false,logLevel:0,theme:theme!=='light'?'dark':'default',securityLevel:'loose'});");
|
|
4142
4369
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "var divs=document.querySelectorAll('.mermaid');");
|
|
4143
4370
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "divs.forEach(function(d){d.removeAttribute('data-processed');d.innerHTML=d.getAttribute('data-source');});");
|
|
4144
|
-
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "if(divs.length>0)mermaid.run({nodes:Array.from(divs)}).catch(function(e){console.error('[reviw] Mermaid render error:',e);window.
|
|
4371
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "if(divs.length>0)mermaid.run({nodes:Array.from(divs)}).then(function(){return window.__collectMermaidErrors();}).catch(function(e){console.error('[reviw] Mermaid render error:',e);return window.__collectMermaidErrors();});");
|
|
4145
4372
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "};");
|
|
4146
4373
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "</script>");
|
|
4147
4374
|
}
|
|
@@ -4750,23 +4977,23 @@ function _M0FP36kazuph5reviw4core14collect__hunks(lines, start, len) {
|
|
|
4750
4977
|
while (true) {
|
|
4751
4978
|
if (i < len) {
|
|
4752
4979
|
const line = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
|
|
4753
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str:
|
|
4980
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c956, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c956.length })) {
|
|
4754
4981
|
const header = _M0FP36kazuph5reviw4core19parse__hunk__header(line);
|
|
4755
4982
|
const hunk_lines = [];
|
|
4756
4983
|
i = i + 1 | 0;
|
|
4757
4984
|
while (true) {
|
|
4758
4985
|
if (i < len) {
|
|
4759
4986
|
const l = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
|
|
4760
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str:
|
|
4987
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c958, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c958.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c959, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c959.length }) || _M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c960, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c960.length }))) {
|
|
4761
4988
|
break;
|
|
4762
4989
|
}
|
|
4763
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str:
|
|
4990
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c961, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c961.length })) {
|
|
4764
4991
|
_M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core8DiffLineE(hunk_lines, { kind: 1, content: _M0FP36kazuph5reviw4core11safe__slice(l, 1) });
|
|
4765
4992
|
} else {
|
|
4766
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str:
|
|
4993
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c962, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c962.length })) {
|
|
4767
4994
|
_M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core8DiffLineE(hunk_lines, { kind: 2, content: _M0FP36kazuph5reviw4core11safe__slice(l, 1) });
|
|
4768
4995
|
} else {
|
|
4769
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str:
|
|
4996
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c963, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c963.length })) {
|
|
4770
4997
|
_M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core8DiffLineE(hunk_lines, { kind: 0, content: _M0FP36kazuph5reviw4core11safe__slice(l, 1) });
|
|
4771
4998
|
} else {
|
|
4772
4999
|
_M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core8DiffLineE(hunk_lines, { kind: 0, content: l });
|
|
@@ -4781,7 +5008,7 @@ function _M0FP36kazuph5reviw4core14collect__hunks(lines, start, len) {
|
|
|
4781
5008
|
}
|
|
4782
5009
|
_M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core8DiffHunkE(hunks, { old_start: header._0, old_count: header._1, new_start: header._2, new_count: header._3, context: header._4, lines: hunk_lines });
|
|
4783
5010
|
} else {
|
|
4784
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str:
|
|
5011
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c964, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c964.length }) || _M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c965, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c965.length })) {
|
|
4785
5012
|
break;
|
|
4786
5013
|
} else {
|
|
4787
5014
|
i = i + 1 | 0;
|
|
@@ -4821,7 +5048,7 @@ function _M0FP36kazuph5reviw4core19extract__git__paths(line) {
|
|
|
4821
5048
|
}
|
|
4822
5049
|
}
|
|
4823
5050
|
function _M0FP36kazuph5reviw4core19strip__diff__prefix(path) {
|
|
4824
|
-
return _M0MP311moonbitlang4core6string6String11has__prefix(path, { str:
|
|
5051
|
+
return _M0MP311moonbitlang4core6string6String11has__prefix(path, { str: _M0FP36kazuph5reviw4core35strip__diff__prefix_2e_2abind_7c967, start: 0, end: _M0FP36kazuph5reviw4core35strip__diff__prefix_2e_2abind_7c967.length }) || _M0MP311moonbitlang4core6string6String11has__prefix(path, { str: _M0FP36kazuph5reviw4core35strip__diff__prefix_2e_2abind_7c968, start: 0, end: _M0FP36kazuph5reviw4core35strip__diff__prefix_2e_2abind_7c968.length }) ? _M0FP36kazuph5reviw4core11safe__slice(path, 2) : path;
|
|
4825
5052
|
}
|
|
4826
5053
|
function _M0FP36kazuph5reviw4core11parse__diff(input) {
|
|
4827
5054
|
const files = [];
|
|
@@ -4831,7 +5058,7 @@ function _M0FP36kazuph5reviw4core11parse__diff(input) {
|
|
|
4831
5058
|
while (true) {
|
|
4832
5059
|
if (i < len) {
|
|
4833
5060
|
const line = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
|
|
4834
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str:
|
|
5061
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c970, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c970.length })) {
|
|
4835
5062
|
const paths = _M0FP36kazuph5reviw4core19extract__git__paths(line);
|
|
4836
5063
|
let is_new = false;
|
|
4837
5064
|
let is_deleted = false;
|
|
@@ -4840,19 +5067,19 @@ function _M0FP36kazuph5reviw4core11parse__diff(input) {
|
|
|
4840
5067
|
while (true) {
|
|
4841
5068
|
if (i < len) {
|
|
4842
5069
|
const l = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
|
|
4843
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str:
|
|
5070
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c972, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c972.length })) {
|
|
4844
5071
|
is_new = true;
|
|
4845
5072
|
i = i + 1 | 0;
|
|
4846
5073
|
} else {
|
|
4847
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str:
|
|
5074
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c973, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c973.length })) {
|
|
4848
5075
|
is_deleted = true;
|
|
4849
5076
|
i = i + 1 | 0;
|
|
4850
5077
|
} else {
|
|
4851
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str:
|
|
5078
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c974, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c974.length })) {
|
|
4852
5079
|
is_binary = true;
|
|
4853
5080
|
i = i + 1 | 0;
|
|
4854
5081
|
} else {
|
|
4855
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str:
|
|
5082
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c975, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c975.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c976, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c976.length }) || _M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c977, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c977.length }))) {
|
|
4856
5083
|
i = i + 1 | 0;
|
|
4857
5084
|
} else {
|
|
4858
5085
|
break;
|
|
@@ -4869,11 +5096,11 @@ function _M0FP36kazuph5reviw4core11parse__diff(input) {
|
|
|
4869
5096
|
i = result._1;
|
|
4870
5097
|
_M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core8DiffFileE(files, { old_path: paths._0, new_path: paths._1, is_new: is_new, is_deleted: is_deleted, is_binary: is_binary, hunks: result._0 });
|
|
4871
5098
|
} else {
|
|
4872
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str:
|
|
5099
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c978, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c978.length })) {
|
|
4873
5100
|
const old_path = _M0FP36kazuph5reviw4core19strip__diff__prefix(_M0FP36kazuph5reviw4core11safe__slice(line, 4));
|
|
4874
5101
|
let new_path = "";
|
|
4875
5102
|
i = i + 1 | 0;
|
|
4876
|
-
if (i < len && _M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), { str:
|
|
5103
|
+
if (i < len && _M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c979, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c979.length })) {
|
|
4877
5104
|
new_path = _M0FP36kazuph5reviw4core19strip__diff__prefix(_M0FP36kazuph5reviw4core11safe__slice(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), 4));
|
|
4878
5105
|
i = i + 1 | 0;
|
|
4879
5106
|
}
|
|
@@ -4994,13 +5221,13 @@ function _M0FP36kazuph5reviw4core21csv__data__from__flat(flat) {
|
|
|
4994
5221
|
}
|
|
4995
5222
|
}
|
|
4996
5223
|
function _M0FP36kazuph5reviw6server12exists__sync(_tmp) {
|
|
4997
|
-
return existsSync$
|
|
5224
|
+
return existsSync$2140(_tmp);
|
|
4998
5225
|
}
|
|
4999
5226
|
function _M0FP36kazuph5reviw6server10path__join(_tmp, _tmp$2) {
|
|
5000
|
-
return join$
|
|
5227
|
+
return join$2143(_tmp, _tmp$2);
|
|
5001
5228
|
}
|
|
5002
5229
|
function _M0FP36kazuph5reviw6server16read__file__sync(_tmp, _tmp$2) {
|
|
5003
|
-
return readFileSync$
|
|
5230
|
+
return readFileSync$2146(_tmp, _tmp$2);
|
|
5004
5231
|
}
|
|
5005
5232
|
function _M0FP36kazuph5reviw6server12load__ui__js() {
|
|
5006
5233
|
if (_M0FP36kazuph5reviw6server13ui__js__cache.val.length > 0) {
|
|
@@ -5018,7 +5245,7 @@ function _M0FP36kazuph5reviw6server12load__ui__js() {
|
|
|
5018
5245
|
}
|
|
5019
5246
|
}
|
|
5020
5247
|
function _M0FP36kazuph5reviw6server11os__homedir() {
|
|
5021
|
-
return homedir$
|
|
5248
|
+
return homedir$2148();
|
|
5022
5249
|
}
|
|
5023
5250
|
function _M0FP36kazuph5reviw6server9lock__dir() {
|
|
5024
5251
|
const override_dir = _M0FP36kazuph5reviw6server13get__env__var("REVIW_LOCK_DIR");
|
|
@@ -5029,7 +5256,7 @@ function _M0FP36kazuph5reviw6server10lock__path(port) {
|
|
|
5029
5256
|
return _M0FP36kazuph5reviw6server10path__join(dir, `${_M0IP016_24default__implP311moonbitlang4core7builtin4Show10to__stringGiE(port)}.lock`);
|
|
5030
5257
|
}
|
|
5031
5258
|
function _M0FP36kazuph5reviw6server11mkdir__sync(_tmp, _tmp$2) {
|
|
5032
|
-
return mkdirSync$
|
|
5259
|
+
return mkdirSync$2151(_tmp, _tmp$2);
|
|
5033
5260
|
}
|
|
5034
5261
|
function _M0FP36kazuph5reviw6server17ensure__lock__dir() {
|
|
5035
5262
|
const dir = _M0FP36kazuph5reviw6server9lock__dir();
|
|
@@ -5040,20 +5267,41 @@ function _M0FP36kazuph5reviw6server17ensure__lock__dir() {
|
|
|
5040
5267
|
return;
|
|
5041
5268
|
}
|
|
5042
5269
|
}
|
|
5270
|
+
function _M0FP36kazuph5reviw6server16read__file__safe(path) {
|
|
5271
|
+
return _M0FP36kazuph5reviw6server17try__call__string(() => _M0FP36kazuph5reviw6server16read__file__sync(path, "utf-8"), "");
|
|
5272
|
+
}
|
|
5273
|
+
function _M0FP36kazuph5reviw6server12unlink__sync(_tmp) {
|
|
5274
|
+
return unlinkSync$2156(_tmp);
|
|
5275
|
+
}
|
|
5043
5276
|
function _M0FP36kazuph5reviw6server16is__port__locked(port) {
|
|
5044
5277
|
const lp = _M0FP36kazuph5reviw6server10lock__path(port);
|
|
5045
|
-
|
|
5278
|
+
if (!_M0FP36kazuph5reviw6server12exists__sync(lp)) {
|
|
5279
|
+
return false;
|
|
5280
|
+
}
|
|
5281
|
+
const content = _M0FP36kazuph5reviw6server16read__file__safe(lp);
|
|
5282
|
+
if (content.length === 0) {
|
|
5283
|
+
_M0FP36kazuph5reviw6server12unlink__sync(lp);
|
|
5284
|
+
return false;
|
|
5285
|
+
}
|
|
5286
|
+
const pid = _M0FP36kazuph5reviw4core16parse__int__safe(content);
|
|
5287
|
+
if (pid <= 0) {
|
|
5288
|
+
_M0FP36kazuph5reviw6server12unlink__sync(lp);
|
|
5289
|
+
return false;
|
|
5290
|
+
}
|
|
5291
|
+
if (_M0FP36kazuph5reviw6server15process__exists(pid)) {
|
|
5292
|
+
return true;
|
|
5293
|
+
} else {
|
|
5294
|
+
_M0FP36kazuph5reviw6server12unlink__sync(lp);
|
|
5295
|
+
return false;
|
|
5296
|
+
}
|
|
5046
5297
|
}
|
|
5047
5298
|
function _M0FP36kazuph5reviw6server17write__file__sync(_tmp, _tmp$2) {
|
|
5048
|
-
return writeFileSync$
|
|
5299
|
+
return writeFileSync$2159(_tmp, _tmp$2);
|
|
5049
5300
|
}
|
|
5050
5301
|
function _M0FP36kazuph5reviw6server11write__lock(port) {
|
|
5051
5302
|
_M0FP36kazuph5reviw6server17ensure__lock__dir();
|
|
5052
5303
|
const lp = _M0FP36kazuph5reviw6server10lock__path(port);
|
|
5053
|
-
_M0FP36kazuph5reviw6server17write__file__sync(lp, _M0MP311moonbitlang4core3int3Int18to__string_2einner(
|
|
5054
|
-
}
|
|
5055
|
-
function _M0FP36kazuph5reviw6server12unlink__sync(_tmp) {
|
|
5056
|
-
return unlinkSync$2021(_tmp);
|
|
5304
|
+
_M0FP36kazuph5reviw6server17write__file__sync(lp, _M0MP311moonbitlang4core3int3Int18to__string_2einner(_M0FP36kazuph5reviw6server12process__pid(), 10));
|
|
5057
5305
|
}
|
|
5058
5306
|
function _M0FP36kazuph5reviw6server12remove__lock(port) {
|
|
5059
5307
|
const lp = _M0FP36kazuph5reviw6server10lock__path(port);
|
|
@@ -5083,10 +5331,7 @@ function _M0FP36kazuph5reviw6server21find__available__port(base) {
|
|
|
5083
5331
|
return base;
|
|
5084
5332
|
}
|
|
5085
5333
|
function _M0FP36kazuph5reviw6server13path__dirname(_tmp) {
|
|
5086
|
-
return dirname$
|
|
5087
|
-
}
|
|
5088
|
-
function _M0FP36kazuph5reviw6server16read__file__safe(path) {
|
|
5089
|
-
return _M0FP36kazuph5reviw6server17try__call__string(() => _M0FP36kazuph5reviw6server16read__file__sync(path, "utf-8"), "");
|
|
5334
|
+
return dirname$2163(_tmp);
|
|
5090
5335
|
}
|
|
5091
5336
|
function _M0FP36kazuph5reviw6server21get__package__version() {
|
|
5092
5337
|
let dir = _M0FP36kazuph5reviw6server16get__script__dir();
|
|
@@ -5132,17 +5377,17 @@ function _M0FP36kazuph5reviw6server11parse__port(s) {
|
|
|
5132
5377
|
return n === 0 ? 4989 : n;
|
|
5133
5378
|
}
|
|
5134
5379
|
function _M0FP36kazuph5reviw6server12print__usage() {
|
|
5135
|
-
_M0FP36kazuph5reviw6server12console__log(
|
|
5380
|
+
_M0FP36kazuph5reviw6server12console__log(_M0FP36kazuph5reviw6server26print__usage_2eusage_7c449);
|
|
5136
5381
|
}
|
|
5137
5382
|
function _M0FP36kazuph5reviw6server17read__stdin__sync() {
|
|
5138
5383
|
return _M0FP36kazuph5reviw6server16read__file__sync("/dev/stdin", "utf-8");
|
|
5139
5384
|
}
|
|
5140
5385
|
function _M0FP36kazuph5reviw6server13path__extname(_tmp) {
|
|
5141
|
-
return extname$
|
|
5386
|
+
return extname$2170(_tmp);
|
|
5142
5387
|
}
|
|
5143
5388
|
function _M0FP36kazuph5reviw6server12detect__mode(file_path) {
|
|
5144
5389
|
const ext = _M0FP36kazuph5reviw6server13path__extname(file_path);
|
|
5145
|
-
const ext_lower = _M0MP311moonbitlang4core6string6String11has__prefix(ext, { str:
|
|
5390
|
+
const ext_lower = _M0MP311moonbitlang4core6string6String11has__prefix(ext, { str: _M0FP36kazuph5reviw6server28detect__mode_2e_2abind_7c497, start: 0, end: _M0FP36kazuph5reviw6server28detect__mode_2e_2abind_7c497.length }) ? _M0MP311moonbitlang4core6string6String9to__lower(_M0FP36kazuph5reviw4core11safe__slice(ext, 1)) : _M0MP311moonbitlang4core6string6String9to__lower(ext);
|
|
5146
5391
|
return _M0MP36kazuph5reviw4core8FileMode15from__extension(ext_lower);
|
|
5147
5392
|
}
|
|
5148
5393
|
function _M0FP36kazuph5reviw6server16detect__encoding(buf) {
|
|
@@ -5240,7 +5485,7 @@ function _M0FP36kazuph5reviw6server16detect__encoding(buf) {
|
|
|
5240
5485
|
return "utf-8";
|
|
5241
5486
|
}
|
|
5242
5487
|
function _M0FP36kazuph5reviw6server18read__file__buffer(_tmp) {
|
|
5243
|
-
return readFileSync$
|
|
5488
|
+
return readFileSync$2146(_tmp);
|
|
5244
5489
|
}
|
|
5245
5490
|
function _M0FP36kazuph5reviw6server12decode__file(path, override_enc) {
|
|
5246
5491
|
const buf = _M0FP36kazuph5reviw6server18read__file__buffer(path);
|
|
@@ -5282,19 +5527,57 @@ function _M0FP36kazuph5reviw6server22load__and__build__html(ctx) {
|
|
|
5282
5527
|
return _M0FP36kazuph5reviw4core16build__csv__html(data, ctx.filename, ctx.port);
|
|
5283
5528
|
}
|
|
5284
5529
|
function _M0FP36kazuph5reviw6server14path__basename(_tmp) {
|
|
5285
|
-
return basename$
|
|
5530
|
+
return basename$2180(_tmp);
|
|
5286
5531
|
}
|
|
5287
5532
|
function _M0FP36kazuph5reviw6server13path__resolve(_tmp) {
|
|
5288
|
-
return resolve$
|
|
5533
|
+
return resolve$2182(_tmp);
|
|
5289
5534
|
}
|
|
5290
5535
|
function _M0FP36kazuph5reviw6server25http__create__server__raw(_tmp) {
|
|
5291
|
-
return createServer$
|
|
5536
|
+
return createServer$2187(_tmp);
|
|
5292
5537
|
}
|
|
5293
5538
|
function _M0FP36kazuph5reviw6server14create__server(handler) {
|
|
5294
5539
|
return _M0FP36kazuph5reviw6server25http__create__server__raw(handler);
|
|
5295
5540
|
}
|
|
5541
|
+
function _M0FP36kazuph5reviw6server19remove__active__tab(ctx, tab_id) {
|
|
5542
|
+
if (tab_id.length === 0) {
|
|
5543
|
+
return undefined;
|
|
5544
|
+
}
|
|
5545
|
+
let idx = -1;
|
|
5546
|
+
const _arr = ctx.active_tabs;
|
|
5547
|
+
const _len = _arr.length;
|
|
5548
|
+
let _tmp = 0;
|
|
5549
|
+
while (true) {
|
|
5550
|
+
const _i = _tmp;
|
|
5551
|
+
if (_i < _len) {
|
|
5552
|
+
const existing = _arr[_i];
|
|
5553
|
+
if (existing === tab_id) {
|
|
5554
|
+
idx = _i;
|
|
5555
|
+
break;
|
|
5556
|
+
}
|
|
5557
|
+
_tmp = _i + 1 | 0;
|
|
5558
|
+
continue;
|
|
5559
|
+
} else {
|
|
5560
|
+
break;
|
|
5561
|
+
}
|
|
5562
|
+
}
|
|
5563
|
+
if (idx >= 0 && idx < ctx.active_tabs.length) {
|
|
5564
|
+
_M0MP311moonbitlang4core5array5Array6removeGsE(ctx.active_tabs, idx);
|
|
5565
|
+
return;
|
|
5566
|
+
} else {
|
|
5567
|
+
return;
|
|
5568
|
+
}
|
|
5569
|
+
}
|
|
5570
|
+
function _M0FP36kazuph5reviw6server22cancel__pending__close(ctx) {
|
|
5571
|
+
if (!_M0FP36kazuph5reviw6server15js__is__nullish(ctx.pending_close_timer)) {
|
|
5572
|
+
_M0FP36kazuph5reviw6server14clear__timeout(ctx.pending_close_timer);
|
|
5573
|
+
ctx.pending_close_timer = _M0FP36kazuph5reviw6server8js__null();
|
|
5574
|
+
return;
|
|
5575
|
+
} else {
|
|
5576
|
+
return;
|
|
5577
|
+
}
|
|
5578
|
+
}
|
|
5296
5579
|
function _M0FP36kazuph5reviw6server22write__file__sync__buf(_tmp, _tmp$2) {
|
|
5297
|
-
return writeFileSync$
|
|
5580
|
+
return writeFileSync$2159(_tmp, _tmp$2);
|
|
5298
5581
|
}
|
|
5299
5582
|
function _M0FP36kazuph5reviw6server16base64__to__file(data, dir, index) {
|
|
5300
5583
|
const ext = _M0FP36kazuph5reviw6server20extract__base64__ext(data);
|
|
@@ -5328,7 +5611,7 @@ function _M0FP36kazuph5reviw6server20ensure__history__dir() {
|
|
|
5328
5611
|
}
|
|
5329
5612
|
}
|
|
5330
5613
|
function _M0FP36kazuph5reviw6server20crypto__create__hash(_tmp) {
|
|
5331
|
-
return createHash$
|
|
5614
|
+
return createHash$2206(_tmp);
|
|
5332
5615
|
}
|
|
5333
5616
|
function _M0FP36kazuph5reviw6server14crypto__sha256(s) {
|
|
5334
5617
|
return _M0FP36kazuph5reviw6server27hash__update__digest__hex16(_M0FP36kazuph5reviw6server20crypto__create__hash("sha256"), s);
|
|
@@ -5387,9 +5670,14 @@ function _M0FP36kazuph5reviw6server13save__history(file_path, entry_json) {
|
|
|
5387
5670
|
_M0FP36kazuph5reviw6server11chmod__sync(hp, 384);
|
|
5388
5671
|
}
|
|
5389
5672
|
function _M0FP36kazuph5reviw6server13unwatch__file(_tmp) {
|
|
5390
|
-
return unwatchFile$
|
|
5673
|
+
return unwatchFile$2212(_tmp);
|
|
5391
5674
|
}
|
|
5392
5675
|
function _M0FP36kazuph5reviw6server14handle__submit(ctx, body) {
|
|
5676
|
+
if (ctx.finished) {
|
|
5677
|
+
return undefined;
|
|
5678
|
+
}
|
|
5679
|
+
ctx.finished = true;
|
|
5680
|
+
_M0FP36kazuph5reviw6server22cancel__pending__close(ctx);
|
|
5393
5681
|
const summary = _M0FP36kazuph5reviw6server19json__parse__string("summary", body);
|
|
5394
5682
|
const raw_comments = _M0FP36kazuph5reviw6server21json__parse__comments(body);
|
|
5395
5683
|
const comments = [];
|
|
@@ -5409,7 +5697,24 @@ function _M0FP36kazuph5reviw6server14handle__submit(ctx, body) {
|
|
|
5409
5697
|
}
|
|
5410
5698
|
}
|
|
5411
5699
|
const answers = _M0FP36kazuph5reviw6server19json__parse__string("reviwAnswers", body);
|
|
5412
|
-
const
|
|
5700
|
+
const raw_merr = _M0FP36kazuph5reviw6server28json__parse__mermaid__errors(body);
|
|
5701
|
+
const mermaid_errors = [];
|
|
5702
|
+
const _len$2 = raw_merr.length;
|
|
5703
|
+
let _tmp$2 = 0;
|
|
5704
|
+
while (true) {
|
|
5705
|
+
const _i = _tmp$2;
|
|
5706
|
+
if (_i < _len$2) {
|
|
5707
|
+
const me = raw_merr[_i];
|
|
5708
|
+
if (me.length >= 2) {
|
|
5709
|
+
_M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core12MermaidErrorE(mermaid_errors, { line: _M0FP36kazuph5reviw4core16parse__int__safe(_M0MP311moonbitlang4core5array5Array2atGsE(me, 0)), message: _M0MP311moonbitlang4core5array5Array2atGsE(me, 1) });
|
|
5710
|
+
}
|
|
5711
|
+
_tmp$2 = _i + 1 | 0;
|
|
5712
|
+
continue;
|
|
5713
|
+
} else {
|
|
5714
|
+
break;
|
|
5715
|
+
}
|
|
5716
|
+
}
|
|
5717
|
+
const result = { file: ctx.filename, mode: ctx.mode, comments: comments, summary: summary, answers: answers, mermaid_errors: mermaid_errors };
|
|
5413
5718
|
_M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core12ReviewResultE(_M0FP36kazuph5reviw6server12all__results, result);
|
|
5414
5719
|
if (comments.length > 0 || summary.length > 0) {
|
|
5415
5720
|
const entry_buf = _M0MP311moonbitlang4core7builtin13StringBuilder11new_2einner(0);
|
|
@@ -5426,33 +5731,33 @@ function _M0FP36kazuph5reviw6server14handle__submit(ctx, body) {
|
|
|
5426
5731
|
}
|
|
5427
5732
|
const images = _M0FP36kazuph5reviw6server19json__parse__images(body);
|
|
5428
5733
|
const output_dir = _M0FP36kazuph5reviw6server10path__join(_M0FP36kazuph5reviw6server11os__homedir(), ".reviw/outputs");
|
|
5429
|
-
const _len$
|
|
5430
|
-
let _tmp$
|
|
5734
|
+
const _len$3 = images.length;
|
|
5735
|
+
let _tmp$3 = 0;
|
|
5431
5736
|
while (true) {
|
|
5432
|
-
const _i = _tmp$
|
|
5433
|
-
if (_i < _len$
|
|
5737
|
+
const _i = _tmp$3;
|
|
5738
|
+
if (_i < _len$3) {
|
|
5434
5739
|
const img = images[_i];
|
|
5435
5740
|
if (img.length > 0) {
|
|
5436
5741
|
_M0FP36kazuph5reviw6server16base64__to__file(img, output_dir, _i);
|
|
5437
5742
|
}
|
|
5438
|
-
_tmp$
|
|
5743
|
+
_tmp$3 = _i + 1 | 0;
|
|
5439
5744
|
continue;
|
|
5440
5745
|
} else {
|
|
5441
5746
|
break;
|
|
5442
5747
|
}
|
|
5443
5748
|
}
|
|
5444
5749
|
let comment_img_idx = images.length;
|
|
5445
|
-
const _len$
|
|
5446
|
-
let _tmp$
|
|
5750
|
+
const _len$4 = raw_comments.length;
|
|
5751
|
+
let _tmp$4 = 0;
|
|
5447
5752
|
while (true) {
|
|
5448
|
-
const _i = _tmp$
|
|
5449
|
-
if (_i < _len$
|
|
5753
|
+
const _i = _tmp$4;
|
|
5754
|
+
if (_i < _len$4) {
|
|
5450
5755
|
const c = raw_comments[_i];
|
|
5451
5756
|
if (c.length >= 5 && _M0MP311moonbitlang4core5array5Array2atGsE(c, 4).length > 0) {
|
|
5452
5757
|
_M0FP36kazuph5reviw6server16base64__to__file(_M0MP311moonbitlang4core5array5Array2atGsE(c, 4), output_dir, comment_img_idx);
|
|
5453
5758
|
comment_img_idx = comment_img_idx + 1 | 0;
|
|
5454
5759
|
}
|
|
5455
|
-
_tmp$
|
|
5760
|
+
_tmp$4 = _i + 1 | 0;
|
|
5456
5761
|
continue;
|
|
5457
5762
|
} else {
|
|
5458
5763
|
break;
|
|
@@ -5462,11 +5767,11 @@ function _M0FP36kazuph5reviw6server14handle__submit(ctx, body) {
|
|
|
5462
5767
|
if (_M0FP36kazuph5reviw6server12all__results.length >= _M0FP36kazuph5reviw6server15expected__count.val) {
|
|
5463
5768
|
const yaml = _M0FP36kazuph5reviw4core17reviews__to__yaml(_M0FP36kazuph5reviw6server12all__results);
|
|
5464
5769
|
_M0FP36kazuph5reviw6server22process__stdout__write(yaml);
|
|
5465
|
-
const _len$
|
|
5466
|
-
let _tmp$
|
|
5770
|
+
const _len$5 = _M0FP36kazuph5reviw6server15active__servers.length;
|
|
5771
|
+
let _tmp$5 = 0;
|
|
5467
5772
|
while (true) {
|
|
5468
|
-
const _i = _tmp$
|
|
5469
|
-
if (_i < _len$
|
|
5773
|
+
const _i = _tmp$5;
|
|
5774
|
+
if (_i < _len$5) {
|
|
5470
5775
|
const srv = _M0FP36kazuph5reviw6server15active__servers[_i];
|
|
5471
5776
|
const _p = srv.file_path;
|
|
5472
5777
|
const _p$2 = "<stdin>";
|
|
@@ -5474,7 +5779,7 @@ function _M0FP36kazuph5reviw6server14handle__submit(ctx, body) {
|
|
|
5474
5779
|
_M0FP36kazuph5reviw6server13unwatch__file(srv.file_path);
|
|
5475
5780
|
}
|
|
5476
5781
|
_M0FP36kazuph5reviw6server12remove__lock(srv.port);
|
|
5477
|
-
_tmp$
|
|
5782
|
+
_tmp$5 = _i + 1 | 0;
|
|
5478
5783
|
continue;
|
|
5479
5784
|
} else {
|
|
5480
5785
|
break;
|
|
@@ -5486,8 +5791,95 @@ function _M0FP36kazuph5reviw6server14handle__submit(ctx, body) {
|
|
|
5486
5791
|
return;
|
|
5487
5792
|
}
|
|
5488
5793
|
}
|
|
5794
|
+
function _M0FP36kazuph5reviw6server23schedule__close__submit(ctx, draft) {
|
|
5795
|
+
if (ctx.finished) {
|
|
5796
|
+
return undefined;
|
|
5797
|
+
}
|
|
5798
|
+
_M0FP36kazuph5reviw6server22cancel__pending__close(ctx);
|
|
5799
|
+
const draft_body = draft.length > 0 ? draft : "{\"summary\":\"\",\"comments\":[]}";
|
|
5800
|
+
ctx.pending_close_timer = _M0FP36kazuph5reviw6server12set__timeout(() => {
|
|
5801
|
+
ctx.pending_close_timer = _M0FP36kazuph5reviw6server8js__null();
|
|
5802
|
+
let _tmp;
|
|
5803
|
+
if (ctx.finished) {
|
|
5804
|
+
_tmp = true;
|
|
5805
|
+
} else {
|
|
5806
|
+
const _p = ctx.active_tabs;
|
|
5807
|
+
_tmp = !(_p.length === 0);
|
|
5808
|
+
}
|
|
5809
|
+
if (_tmp) {
|
|
5810
|
+
return undefined;
|
|
5811
|
+
}
|
|
5812
|
+
_M0FP36kazuph5reviw6server14handle__submit(ctx, draft_body);
|
|
5813
|
+
}, 700);
|
|
5814
|
+
}
|
|
5815
|
+
function _M0FP36kazuph5reviw6server22handle__session__close(ctx, body) {
|
|
5816
|
+
if (ctx.finished) {
|
|
5817
|
+
return undefined;
|
|
5818
|
+
}
|
|
5819
|
+
const tab_id = _M0FP36kazuph5reviw6server19json__parse__string("tabId", body);
|
|
5820
|
+
const instance_id = _M0FP36kazuph5reviw6server19json__parse__string("instanceId", body);
|
|
5821
|
+
const draft = _M0FP36kazuph5reviw6server19json__parse__string("draft", body);
|
|
5822
|
+
if (tab_id.length > 0 && instance_id.length > 0) {
|
|
5823
|
+
const _bind = _M0MP311moonbitlang4core7builtin3Map3getGssE(ctx.active_tab_instances, tab_id);
|
|
5824
|
+
if (_bind === undefined) {
|
|
5825
|
+
} else {
|
|
5826
|
+
const _Some = _bind;
|
|
5827
|
+
const _active_instance = _Some;
|
|
5828
|
+
if (!(_active_instance === instance_id)) {
|
|
5829
|
+
return undefined;
|
|
5830
|
+
}
|
|
5831
|
+
}
|
|
5832
|
+
}
|
|
5833
|
+
_M0MP311moonbitlang4core7builtin3Map6removeGssE(ctx.active_tab_instances, tab_id);
|
|
5834
|
+
_M0FP36kazuph5reviw6server19remove__active__tab(ctx, tab_id);
|
|
5835
|
+
const _p = ctx.active_tabs;
|
|
5836
|
+
if (_p.length === 0) {
|
|
5837
|
+
_M0FP36kazuph5reviw6server23schedule__close__submit(ctx, draft);
|
|
5838
|
+
return;
|
|
5839
|
+
} else {
|
|
5840
|
+
return;
|
|
5841
|
+
}
|
|
5842
|
+
}
|
|
5843
|
+
function _M0FP36kazuph5reviw6server16has__active__tab(ctx, tab_id) {
|
|
5844
|
+
const _arr = ctx.active_tabs;
|
|
5845
|
+
const _len = _arr.length;
|
|
5846
|
+
let _tmp = 0;
|
|
5847
|
+
while (true) {
|
|
5848
|
+
const _i = _tmp;
|
|
5849
|
+
if (_i < _len) {
|
|
5850
|
+
const existing = _arr[_i];
|
|
5851
|
+
if (existing === tab_id) {
|
|
5852
|
+
return true;
|
|
5853
|
+
}
|
|
5854
|
+
_tmp = _i + 1 | 0;
|
|
5855
|
+
continue;
|
|
5856
|
+
} else {
|
|
5857
|
+
break;
|
|
5858
|
+
}
|
|
5859
|
+
}
|
|
5860
|
+
return false;
|
|
5861
|
+
}
|
|
5862
|
+
function _M0FP36kazuph5reviw6server16add__active__tab(ctx, tab_id) {
|
|
5863
|
+
if (tab_id.length === 0 || _M0FP36kazuph5reviw6server16has__active__tab(ctx, tab_id)) {
|
|
5864
|
+
return undefined;
|
|
5865
|
+
}
|
|
5866
|
+
_M0MP311moonbitlang4core5array5Array4pushGsE(ctx.active_tabs, tab_id);
|
|
5867
|
+
}
|
|
5868
|
+
function _M0FP36kazuph5reviw6server21handle__session__open(ctx, body) {
|
|
5869
|
+
if (ctx.finished) {
|
|
5870
|
+
return undefined;
|
|
5871
|
+
}
|
|
5872
|
+
const tab_id = _M0FP36kazuph5reviw6server19json__parse__string("tabId", body);
|
|
5873
|
+
const instance_id = _M0FP36kazuph5reviw6server19json__parse__string("instanceId", body);
|
|
5874
|
+
if (tab_id.length === 0 || instance_id.length === 0) {
|
|
5875
|
+
return undefined;
|
|
5876
|
+
}
|
|
5877
|
+
_M0FP36kazuph5reviw6server22cancel__pending__close(ctx);
|
|
5878
|
+
_M0FP36kazuph5reviw6server16add__active__tab(ctx, tab_id);
|
|
5879
|
+
_M0MP311moonbitlang4core7builtin3Map3setGssE(ctx.active_tab_instances, tab_id, instance_id);
|
|
5880
|
+
}
|
|
5489
5881
|
function _M0FP36kazuph5reviw6server17child__exec__sync(_tmp, _tmp$2) {
|
|
5490
|
-
return execSync$
|
|
5882
|
+
return execSync$2224(_tmp, _tmp$2);
|
|
5491
5883
|
}
|
|
5492
5884
|
function _M0FP36kazuph5reviw6server15command__exists(cmd) {
|
|
5493
5885
|
return _M0FP36kazuph5reviw6server15try__call__bool(() => {
|
|
@@ -5540,10 +5932,10 @@ function _M0FP36kazuph5reviw6server19json__encode__value(s) {
|
|
|
5540
5932
|
return buf.val;
|
|
5541
5933
|
}
|
|
5542
5934
|
function _M0FP36kazuph5reviw6server17fs__mkdtemp__sync(_tmp) {
|
|
5543
|
-
return mkdtempSync$
|
|
5935
|
+
return mkdtempSync$2228(_tmp);
|
|
5544
5936
|
}
|
|
5545
5937
|
function _M0FP36kazuph5reviw6server10os__tmpdir() {
|
|
5546
|
-
return tmpdir$
|
|
5938
|
+
return tmpdir$2229();
|
|
5547
5939
|
}
|
|
5548
5940
|
function _M0FP36kazuph5reviw6server15make__temp__dir() {
|
|
5549
5941
|
return _M0FP36kazuph5reviw6server17fs__mkdtemp__sync(`${_M0FP36kazuph5reviw6server10os__tmpdir()}/reviw-`);
|
|
@@ -5552,13 +5944,13 @@ function _M0FP36kazuph5reviw6server18read__file__base64(path) {
|
|
|
5552
5944
|
return _M0FP36kazuph5reviw6server17try__call__string(() => _M0FP36kazuph5reviw6server15buf__to__base64(_M0FP36kazuph5reviw6server18read__file__buffer(path)), "");
|
|
5553
5945
|
}
|
|
5554
5946
|
function _M0FP36kazuph5reviw6server22fs__readdir__sync__raw(_tmp) {
|
|
5555
|
-
return readdirSync$
|
|
5947
|
+
return readdirSync$2239(_tmp);
|
|
5556
5948
|
}
|
|
5557
5949
|
function _M0FP36kazuph5reviw6server13readdir__sync(path) {
|
|
5558
5950
|
return _M0FP36kazuph5reviw6server24try__call__array__string(() => _M0FP36kazuph5reviw6server22fs__readdir__sync__raw(path));
|
|
5559
5951
|
}
|
|
5560
5952
|
function _M0FP36kazuph5reviw6server12fs__rm__sync(_tmp, _tmp$2) {
|
|
5561
|
-
return rmSync$
|
|
5953
|
+
return rmSync$2248(_tmp, _tmp$2);
|
|
5562
5954
|
}
|
|
5563
5955
|
function _M0FP36kazuph5reviw6server18rm__dir__recursive(path) {
|
|
5564
5956
|
_M0FP36kazuph5reviw6server15try__call__void(() => {
|
|
@@ -5566,13 +5958,13 @@ function _M0FP36kazuph5reviw6server18rm__dir__recursive(path) {
|
|
|
5566
5958
|
});
|
|
5567
5959
|
}
|
|
5568
5960
|
function _M0FP36kazuph5reviw6server12child__spawn(_tmp, _tmp$2, _tmp$3) {
|
|
5569
|
-
return spawn$
|
|
5961
|
+
return spawn$2254(_tmp, _tmp$2, _tmp$3);
|
|
5570
5962
|
}
|
|
5571
5963
|
function _M0FP36kazuph5reviw6server12spawn__async(cmd, args_json) {
|
|
5572
5964
|
return _M0FP36kazuph5reviw6server12child__spawn(cmd, _M0FP36kazuph5reviw6server15js__parse__json(args_json), _M0FP36kazuph5reviw6server21js__spawn__opts__pipe());
|
|
5573
5965
|
}
|
|
5574
5966
|
function _M0FP36kazuph5reviw6server18child__spawn__sync(_tmp, _tmp$2, _tmp$3) {
|
|
5575
|
-
return spawnSync$
|
|
5967
|
+
return spawnSync$2259(_tmp, _tmp$2, _tmp$3);
|
|
5576
5968
|
}
|
|
5577
5969
|
function _M0FP36kazuph5reviw6server19spawn__sync__stdout(cmd, args_json) {
|
|
5578
5970
|
return _M0FP36kazuph5reviw6server17try__call__string(() => _M0FP36kazuph5reviw6server15js__obj__stdout(_M0FP36kazuph5reviw6server18child__spawn__sync(cmd, _M0FP36kazuph5reviw6server15js__parse__json(args_json), _M0FP36kazuph5reviw6server27js__spawn__opts__utf8__pipe())), "");
|
|
@@ -5580,7 +5972,7 @@ function _M0FP36kazuph5reviw6server19spawn__sync__stdout(cmd, args_json) {
|
|
|
5580
5972
|
function _M0FP36kazuph5reviw6server23handle__video__timeline(ctx, url, res) {
|
|
5581
5973
|
const video_path = _M0FP36kazuph5reviw6server19parse__query__param(url, "path");
|
|
5582
5974
|
const scene_str = _M0FP36kazuph5reviw6server19parse__query__param(url, "scene");
|
|
5583
|
-
if (_M0MP311moonbitlang4core6string6String8contains(video_path, { str:
|
|
5975
|
+
if (_M0MP311moonbitlang4core6string6String8contains(video_path, { str: _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c539, start: 0, end: _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c539.length })) {
|
|
5584
5976
|
_M0FP36kazuph5reviw6server16res__write__head(res, 400, "text/plain");
|
|
5585
5977
|
_M0FP36kazuph5reviw6server8res__end(res, "Invalid path");
|
|
5586
5978
|
return undefined;
|
|
@@ -5625,7 +6017,7 @@ function _M0FP36kazuph5reviw6server23handle__video__timeline(ctx, url, res) {
|
|
|
5625
6017
|
const _i = _tmp;
|
|
5626
6018
|
if (_i < _len) {
|
|
5627
6019
|
const file = files[_i];
|
|
5628
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(file, { str:
|
|
6020
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(file, { str: _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c542, start: 0, end: _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c542.length }) && _M0MP311moonbitlang4core6string6String11has__suffix(file, { str: _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c543, start: 0, end: _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c543.length })) {
|
|
5629
6021
|
_M0MP311moonbitlang4core5array5Array4pushGsE(scene_files, file);
|
|
5630
6022
|
}
|
|
5631
6023
|
_tmp = _i + 1 | 0;
|
|
@@ -5786,13 +6178,13 @@ function _M0FP36kazuph5reviw6server9index__of(s, target) {
|
|
|
5786
6178
|
return -1;
|
|
5787
6179
|
}
|
|
5788
6180
|
function _M0FP36kazuph5reviw6server14fs__stat__sync(_tmp) {
|
|
5789
|
-
return statSync$
|
|
6181
|
+
return statSync$2274(_tmp);
|
|
5790
6182
|
}
|
|
5791
6183
|
function _M0FP36kazuph5reviw6server14is__file__sync(path) {
|
|
5792
6184
|
return _M0FP36kazuph5reviw6server18js__stat__is__file(_M0FP36kazuph5reviw6server14fs__stat__sync(path));
|
|
5793
6185
|
}
|
|
5794
6186
|
function _M0FP36kazuph5reviw6server30fs__create__read__stream__opts(_tmp, _tmp$2) {
|
|
5795
|
-
return createReadStream$
|
|
6187
|
+
return createReadStream$2278(_tmp, _tmp$2);
|
|
5796
6188
|
}
|
|
5797
6189
|
function _M0FP36kazuph5reviw6server17pipe__file__range(file_path, res, content_type, range_header) {
|
|
5798
6190
|
const stat = _M0FP36kazuph5reviw6server14fs__stat__sync(file_path);
|
|
@@ -5807,7 +6199,7 @@ function _M0FP36kazuph5reviw6server17pipe__file__range(file_path, res, content_t
|
|
|
5807
6199
|
_M0FP36kazuph5reviw6server8js__pipe(stream, res);
|
|
5808
6200
|
}
|
|
5809
6201
|
function _M0FP36kazuph5reviw6server24fs__create__read__stream(_tmp) {
|
|
5810
|
-
return createReadStream$
|
|
6202
|
+
return createReadStream$2278(_tmp);
|
|
5811
6203
|
}
|
|
5812
6204
|
function _M0FP36kazuph5reviw6server24pipe__file__to__response(file_path, res, content_type) {
|
|
5813
6205
|
const stat = _M0FP36kazuph5reviw6server14fs__stat__sync(file_path);
|
|
@@ -5820,8 +6212,8 @@ function _M0FP36kazuph5reviw6server24pipe__file__to__response(file_path, res, co
|
|
|
5820
6212
|
function _M0FP36kazuph5reviw6server19serve__static__file(ctx, url, req, res) {
|
|
5821
6213
|
const qmark = _M0FP36kazuph5reviw6server9index__of(url, 63);
|
|
5822
6214
|
const url_path = qmark >= 0 ? _M0FP36kazuph5reviw4core18safe__slice__range(url, 0, qmark) : url;
|
|
5823
|
-
const relative_path = _M0MP311moonbitlang4core6string6String11has__prefix(url_path, { str:
|
|
5824
|
-
if (_M0MP311moonbitlang4core6string6String8contains(relative_path, { str:
|
|
6215
|
+
const relative_path = _M0MP311moonbitlang4core6string6String11has__prefix(url_path, { str: _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c572, start: 0, end: _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c572.length }) ? _M0FP36kazuph5reviw4core11safe__slice(url_path, 1) : url_path;
|
|
6216
|
+
if (_M0MP311moonbitlang4core6string6String8contains(relative_path, { str: _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c570, start: 0, end: _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c570.length })) {
|
|
5825
6217
|
_M0FP36kazuph5reviw6server16res__write__head(res, 403, "text/plain");
|
|
5826
6218
|
_M0FP36kazuph5reviw6server8res__end(res, "Forbidden");
|
|
5827
6219
|
return undefined;
|
|
@@ -5838,7 +6230,7 @@ function _M0FP36kazuph5reviw6server19serve__static__file(ctx, url, req, res) {
|
|
|
5838
6230
|
if (_M0FP36kazuph5reviw6server12exists__sync(resolved_static) && _M0FP36kazuph5reviw6server14is__file__sync(resolved_static)) {
|
|
5839
6231
|
const ext = _M0MP311moonbitlang4core6string6String9to__lower(_M0FP36kazuph5reviw6server13path__extname(resolved_static));
|
|
5840
6232
|
const content_type = _M0FP36kazuph5reviw6server15get__mime__type(ext);
|
|
5841
|
-
const is_video = _M0MP311moonbitlang4core6string6String11has__prefix(content_type, { str:
|
|
6233
|
+
const is_video = _M0MP311moonbitlang4core6string6String11has__prefix(content_type, { str: _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c571, start: 0, end: _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c571.length });
|
|
5842
6234
|
const range = _M0FP36kazuph5reviw6server18req__range__header(req);
|
|
5843
6235
|
if (is_video && range.length > 0) {
|
|
5844
6236
|
_M0FP36kazuph5reviw6server17pipe__file__range(resolved_static, res, content_type, range);
|
|
@@ -5856,8 +6248,8 @@ function _M0FP36kazuph5reviw6server19serve__static__file(ctx, url, req, res) {
|
|
|
5856
6248
|
function _M0FP36kazuph5reviw6server25serve__static__file__head(ctx, url, res) {
|
|
5857
6249
|
const qmark = _M0FP36kazuph5reviw6server9index__of(url, 63);
|
|
5858
6250
|
const url_path = qmark >= 0 ? _M0FP36kazuph5reviw4core18safe__slice__range(url, 0, qmark) : url;
|
|
5859
|
-
const relative_path = _M0MP311moonbitlang4core6string6String11has__prefix(url_path, { str:
|
|
5860
|
-
if (_M0MP311moonbitlang4core6string6String8contains(relative_path, { str:
|
|
6251
|
+
const relative_path = _M0MP311moonbitlang4core6string6String11has__prefix(url_path, { str: _M0FP36kazuph5reviw6server41serve__static__file__head_2e_2abind_7c574, start: 0, end: _M0FP36kazuph5reviw6server41serve__static__file__head_2e_2abind_7c574.length }) ? _M0FP36kazuph5reviw4core11safe__slice(url_path, 1) : url_path;
|
|
6252
|
+
if (_M0MP311moonbitlang4core6string6String8contains(relative_path, { str: _M0FP36kazuph5reviw6server41serve__static__file__head_2e_2abind_7c573, start: 0, end: _M0FP36kazuph5reviw6server41serve__static__file__head_2e_2abind_7c573.length })) {
|
|
5861
6253
|
_M0FP36kazuph5reviw6server16res__write__head(res, 403, "text/plain");
|
|
5862
6254
|
_M0FP36kazuph5reviw6server8res__end(res, "");
|
|
5863
6255
|
return undefined;
|
|
@@ -5918,54 +6310,72 @@ function _M0FP36kazuph5reviw6server15handle__request(ctx, req, res) {
|
|
|
5918
6310
|
_M0FP36kazuph5reviw6server8res__end(res, history_json);
|
|
5919
6311
|
return;
|
|
5920
6312
|
} else {
|
|
5921
|
-
if (http_method === "GET" && _M0MP311moonbitlang4core6string6String11has__prefix(url, { str:
|
|
6313
|
+
if (http_method === "GET" && _M0MP311moonbitlang4core6string6String11has__prefix(url, { str: _M0FP36kazuph5reviw6server31handle__request_2e_2abind_7c575, start: 0, end: _M0FP36kazuph5reviw6server31handle__request_2e_2abind_7c575.length })) {
|
|
5922
6314
|
_M0FP36kazuph5reviw6server23handle__video__timeline(ctx, url, res);
|
|
5923
6315
|
return;
|
|
5924
6316
|
} else {
|
|
5925
|
-
if (http_method === "POST" && url === "/
|
|
6317
|
+
if (http_method === "POST" && url === "/session/open") {
|
|
5926
6318
|
_M0FP36kazuph5reviw6server10read__body(req, (body) => {
|
|
5927
|
-
|
|
6319
|
+
_M0FP36kazuph5reviw6server21handle__session__open(ctx, body);
|
|
5928
6320
|
_M0FP36kazuph5reviw6server16res__write__head(res, 200, "application/json");
|
|
5929
6321
|
_M0FP36kazuph5reviw6server8res__end(res, "{\"ok\":true}");
|
|
5930
6322
|
});
|
|
5931
6323
|
return;
|
|
5932
6324
|
} else {
|
|
5933
|
-
if (http_method === "
|
|
5934
|
-
|
|
5935
|
-
|
|
5936
|
-
|
|
6325
|
+
if (http_method === "POST" && url === "/close") {
|
|
6326
|
+
_M0FP36kazuph5reviw6server10read__body(req, (body) => {
|
|
6327
|
+
_M0FP36kazuph5reviw6server22handle__session__close(ctx, body);
|
|
6328
|
+
_M0FP36kazuph5reviw6server16res__write__head(res, 200, "application/json");
|
|
6329
|
+
_M0FP36kazuph5reviw6server8res__end(res, "{\"ok\":true}");
|
|
6330
|
+
});
|
|
6331
|
+
return;
|
|
6332
|
+
} else {
|
|
6333
|
+
if (http_method === "POST" && url === "/exit") {
|
|
6334
|
+
_M0FP36kazuph5reviw6server10read__body(req, (body) => {
|
|
6335
|
+
_M0FP36kazuph5reviw6server14handle__submit(ctx, body);
|
|
6336
|
+
_M0FP36kazuph5reviw6server16res__write__head(res, 200, "application/json");
|
|
6337
|
+
_M0FP36kazuph5reviw6server8res__end(res, "{\"ok\":true}");
|
|
6338
|
+
});
|
|
5937
6339
|
return;
|
|
5938
6340
|
} else {
|
|
5939
|
-
if (
|
|
5940
|
-
|
|
5941
|
-
|
|
5942
|
-
return;
|
|
5943
|
-
} else {
|
|
5944
|
-
if (url === "/ui.js") {
|
|
5945
|
-
_M0FP36kazuph5reviw6server16res__write__head(res, 200, "application/javascript; charset=utf-8");
|
|
6341
|
+
if (http_method === "HEAD") {
|
|
6342
|
+
if (url === "/" || url === "/index.html") {
|
|
6343
|
+
_M0FP36kazuph5reviw6server16res__write__head(res, 200, "text/html; charset=utf-8");
|
|
5946
6344
|
_M0FP36kazuph5reviw6server8res__end(res, "");
|
|
5947
6345
|
return;
|
|
5948
6346
|
} else {
|
|
5949
|
-
if (url === "/
|
|
6347
|
+
if (url === "/healthz") {
|
|
5950
6348
|
_M0FP36kazuph5reviw6server16res__write__head(res, 200, "application/json");
|
|
5951
6349
|
_M0FP36kazuph5reviw6server8res__end(res, "");
|
|
5952
6350
|
return;
|
|
5953
6351
|
} else {
|
|
5954
|
-
|
|
5955
|
-
|
|
6352
|
+
if (url === "/ui.js") {
|
|
6353
|
+
_M0FP36kazuph5reviw6server16res__write__head(res, 200, "application/javascript; charset=utf-8");
|
|
6354
|
+
_M0FP36kazuph5reviw6server8res__end(res, "");
|
|
6355
|
+
return;
|
|
6356
|
+
} else {
|
|
6357
|
+
if (url === "/history") {
|
|
6358
|
+
_M0FP36kazuph5reviw6server16res__write__head(res, 200, "application/json");
|
|
6359
|
+
_M0FP36kazuph5reviw6server8res__end(res, "");
|
|
6360
|
+
return;
|
|
6361
|
+
} else {
|
|
6362
|
+
_M0FP36kazuph5reviw6server25serve__static__file__head(ctx, url, res);
|
|
6363
|
+
return;
|
|
6364
|
+
}
|
|
6365
|
+
}
|
|
5956
6366
|
}
|
|
5957
6367
|
}
|
|
6368
|
+
} else {
|
|
6369
|
+
if (http_method === "GET") {
|
|
6370
|
+
_M0FP36kazuph5reviw6server19serve__static__file(ctx, url, req, res);
|
|
6371
|
+
return;
|
|
6372
|
+
} else {
|
|
6373
|
+
_M0FP36kazuph5reviw6server16res__write__head(res, 404, "text/plain");
|
|
6374
|
+
_M0FP36kazuph5reviw6server8res__end(res, "Not Found");
|
|
6375
|
+
return;
|
|
6376
|
+
}
|
|
5958
6377
|
}
|
|
5959
6378
|
}
|
|
5960
|
-
} else {
|
|
5961
|
-
if (http_method === "GET") {
|
|
5962
|
-
_M0FP36kazuph5reviw6server19serve__static__file(ctx, url, req, res);
|
|
5963
|
-
return;
|
|
5964
|
-
} else {
|
|
5965
|
-
_M0FP36kazuph5reviw6server16res__write__head(res, 404, "text/plain");
|
|
5966
|
-
_M0FP36kazuph5reviw6server8res__end(res, "Not Found");
|
|
5967
|
-
return;
|
|
5968
|
-
}
|
|
5969
6379
|
}
|
|
5970
6380
|
}
|
|
5971
6381
|
}
|
|
@@ -5989,13 +6399,13 @@ function _M0FP36kazuph5reviw6server28try__activate__existing__tab(url) {
|
|
|
5989
6399
|
}
|
|
5990
6400
|
const chrome_script = `set found to false\ntell application \"System Events\"\n if exists process \"Google Chrome\" then\n tell application \"Google Chrome\"\n set targetUrl to \"${url}\"\n repeat with w in windows\n set tabIndex to 1\n repeat with t in tabs of w\n if URL of t starts with targetUrl then\n set active tab index of w to tabIndex\n set index of w to 1\n activate\n set found to true\n exit repeat\n end if\n set tabIndex to tabIndex + 1\n end repeat\n if found then exit repeat\n end repeat\n end tell\n end if\nend tell\nfound`;
|
|
5991
6401
|
const chrome_result = _M0FP36kazuph5reviw6server19spawn__sync__result("osascript", `[\"-e\", ${_M0FP36kazuph5reviw6server19json__encode__value(chrome_script)}]`);
|
|
5992
|
-
if (_M0MP311moonbitlang4core6string6String8contains(chrome_result, { str:
|
|
6402
|
+
if (_M0MP311moonbitlang4core6string6String8contains(chrome_result, { str: _M0FP36kazuph5reviw6server44try__activate__existing__tab_2e_2abind_7c576, start: 0, end: _M0FP36kazuph5reviw6server44try__activate__existing__tab_2e_2abind_7c576.length })) {
|
|
5993
6403
|
_M0FP36kazuph5reviw6server12console__log(`Activated existing Chrome tab: ${url}`);
|
|
5994
6404
|
return true;
|
|
5995
6405
|
}
|
|
5996
6406
|
const safari_script = `set found to false\ntell application \"System Events\"\n if exists process \"Safari\" then\n tell application \"Safari\"\n set targetUrl to \"${url}\"\n repeat with w in windows\n repeat with t in tabs of w\n if URL of t starts with targetUrl then\n set current tab of w to t\n set index of w to 1\n activate\n set found to true\n exit repeat\n end if\n end repeat\n if found then exit repeat\n end repeat\n end tell\n end if\nend tell\nfound`;
|
|
5997
6407
|
const safari_result = _M0FP36kazuph5reviw6server19spawn__sync__result("osascript", `[\"-e\", ${_M0FP36kazuph5reviw6server19json__encode__value(safari_script)}]`);
|
|
5998
|
-
if (_M0MP311moonbitlang4core6string6String8contains(safari_result, { str:
|
|
6408
|
+
if (_M0MP311moonbitlang4core6string6String8contains(safari_result, { str: _M0FP36kazuph5reviw6server44try__activate__existing__tab_2e_2abind_7c577, start: 0, end: _M0FP36kazuph5reviw6server44try__activate__existing__tab_2e_2abind_7c577.length })) {
|
|
5999
6409
|
_M0FP36kazuph5reviw6server12console__log(`Activated existing Safari tab: ${url}`);
|
|
6000
6410
|
return true;
|
|
6001
6411
|
}
|
|
@@ -6038,10 +6448,12 @@ function _M0FP36kazuph5reviw6server11try__listen(ctx, port, attempt, no_open) {
|
|
|
6038
6448
|
return;
|
|
6039
6449
|
}
|
|
6040
6450
|
});
|
|
6041
|
-
|
|
6451
|
+
const host = _M0FP36kazuph5reviw6server10bind__host.val;
|
|
6452
|
+
_M0FP36kazuph5reviw6server14server__listen(server, port, host, () => {
|
|
6042
6453
|
ctx.port = port;
|
|
6043
6454
|
_M0FP36kazuph5reviw6server11write__lock(port);
|
|
6044
|
-
const
|
|
6455
|
+
const display_host = host === "0.0.0.0" ? "127.0.0.1" : host;
|
|
6456
|
+
const url = `http://${display_host}:${_M0IP016_24default__implP311moonbitlang4core7builtin4Show10to__stringGiE(port)}`;
|
|
6045
6457
|
_M0FP36kazuph5reviw6server12console__log(`reviw serving ${ctx.filename} at ${url}`);
|
|
6046
6458
|
if (!no_open) {
|
|
6047
6459
|
_M0FP36kazuph5reviw6server13open__browser(url);
|
|
@@ -6071,13 +6483,16 @@ function _M0FP36kazuph5reviw6server19start__http__server(ctx, no_open) {
|
|
|
6071
6483
|
_M0FP36kazuph5reviw6server11try__listen(ctx, ctx.port, 0, no_open);
|
|
6072
6484
|
}
|
|
6073
6485
|
function _M0FP36kazuph5reviw6server11watch__file(_tmp, _tmp$2) {
|
|
6074
|
-
return watchFile$
|
|
6486
|
+
return watchFile$2315(_tmp, _tmp$2);
|
|
6075
6487
|
}
|
|
6076
6488
|
function _M0FP36kazuph5reviw6server19start__file__server(file_path, port, no_open) {
|
|
6077
6489
|
const resolved = _M0FP36kazuph5reviw6server13path__resolve(file_path);
|
|
6078
6490
|
const filename = _M0FP36kazuph5reviw6server14path__basename(resolved);
|
|
6079
6491
|
const mode = _M0FP36kazuph5reviw6server12detect__mode(resolved);
|
|
6080
|
-
const
|
|
6492
|
+
const _tmp = [];
|
|
6493
|
+
const _tmp$2 = [];
|
|
6494
|
+
const _bind = [];
|
|
6495
|
+
const ctx = { file_path: resolved, filename: filename, mode: mode, port: port, html_cache: "", sse_clients: _tmp, active_tabs: _tmp$2, active_tab_instances: _M0MP311moonbitlang4core7builtin3Map11from__arrayGssE({ buf: _bind, start: 0, end: 0 }), pending_close_timer: _M0FP36kazuph5reviw6server8js__null(), finished: false };
|
|
6081
6496
|
ctx.html_cache = _M0FP36kazuph5reviw6server22load__and__build__html(ctx);
|
|
6082
6497
|
_M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw6server13ServerContextE(_M0FP36kazuph5reviw6server15active__servers, ctx);
|
|
6083
6498
|
const _p = ctx.file_path;
|
|
@@ -6087,13 +6502,13 @@ function _M0FP36kazuph5reviw6server19start__file__server(file_path, port, no_ope
|
|
|
6087
6502
|
_M0FP36kazuph5reviw6server11watch__file(resolved, (_curr, _prev) => {
|
|
6088
6503
|
ctx.html_cache = _M0FP36kazuph5reviw6server22load__and__build__html(ctx);
|
|
6089
6504
|
const _len = clients.length;
|
|
6090
|
-
let _tmp = 0;
|
|
6505
|
+
let _tmp$3 = 0;
|
|
6091
6506
|
while (true) {
|
|
6092
|
-
const _i = _tmp;
|
|
6507
|
+
const _i = _tmp$3;
|
|
6093
6508
|
if (_i < _len) {
|
|
6094
6509
|
const client = clients[_i];
|
|
6095
6510
|
_M0FP36kazuph5reviw6server9sse__send(client, "reload", "");
|
|
6096
|
-
_tmp = _i + 1 | 0;
|
|
6511
|
+
_tmp$3 = _i + 1 | 0;
|
|
6097
6512
|
continue;
|
|
6098
6513
|
} else {
|
|
6099
6514
|
return;
|
|
@@ -6106,7 +6521,10 @@ function _M0FP36kazuph5reviw6server19start__file__server(file_path, port, no_ope
|
|
|
6106
6521
|
function _M0FP36kazuph5reviw6server20start__stdin__server(content, port, no_open) {
|
|
6107
6522
|
const data = _M0FP36kazuph5reviw4core11parse__diff(content);
|
|
6108
6523
|
const html = _M0FP36kazuph5reviw4core17build__diff__html(data, "stdin", port);
|
|
6109
|
-
const
|
|
6524
|
+
const _tmp = [];
|
|
6525
|
+
const _tmp$2 = [];
|
|
6526
|
+
const _bind = [];
|
|
6527
|
+
const ctx = { file_path: "<stdin>", filename: "stdin", mode: 3, port: port, html_cache: html, sse_clients: _tmp, active_tabs: _tmp$2, active_tab_instances: _M0MP311moonbitlang4core7builtin3Map11from__arrayGssE({ buf: _bind, start: 0, end: 0 }), pending_close_timer: _M0FP36kazuph5reviw6server8js__null(), finished: false };
|
|
6110
6528
|
_M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw6server13ServerContextE(_M0FP36kazuph5reviw6server15active__servers, ctx);
|
|
6111
6529
|
_M0FP36kazuph5reviw6server15expected__count.val = 1;
|
|
6112
6530
|
_M0FP36kazuph5reviw6server19start__http__server(ctx, no_open);
|
|
@@ -6114,11 +6532,11 @@ function _M0FP36kazuph5reviw6server20start__stdin__server(content, port, no_open
|
|
|
6114
6532
|
(() => {
|
|
6115
6533
|
const argv = _M0FP36kazuph5reviw6server9get__argv();
|
|
6116
6534
|
const args = [];
|
|
6117
|
-
const
|
|
6535
|
+
const _end453 = argv.length;
|
|
6118
6536
|
let _tmp = 2;
|
|
6119
6537
|
while (true) {
|
|
6120
6538
|
const i = _tmp;
|
|
6121
|
-
if (i <
|
|
6539
|
+
if (i < _end453) {
|
|
6122
6540
|
_M0MP311moonbitlang4core5array5Array4pushGsE(args, _M0MP311moonbitlang4core5array5Array2atGsE(argv, i));
|
|
6123
6541
|
_tmp = i + 1 | 0;
|
|
6124
6542
|
continue;
|
|
@@ -6151,14 +6569,21 @@ function _M0FP36kazuph5reviw6server20start__stdin__server(content, port, no_open
|
|
|
6151
6569
|
if (arg === "--no-open") {
|
|
6152
6570
|
no_open = true;
|
|
6153
6571
|
} else {
|
|
6154
|
-
if (arg === "--
|
|
6572
|
+
if (arg === "--host") {
|
|
6155
6573
|
i = i + 1 | 0;
|
|
6156
6574
|
if (i < args.length) {
|
|
6157
|
-
|
|
6575
|
+
_M0FP36kazuph5reviw6server10bind__host.val = _M0MP311moonbitlang4core5array5Array2atGsE(args, i);
|
|
6158
6576
|
}
|
|
6159
6577
|
} else {
|
|
6160
|
-
if (
|
|
6161
|
-
|
|
6578
|
+
if (arg === "--encoding" || arg === "-e") {
|
|
6579
|
+
i = i + 1 | 0;
|
|
6580
|
+
if (i < args.length) {
|
|
6581
|
+
_M0FP36kazuph5reviw6server18encoding__override.val = _M0MP311moonbitlang4core5array5Array2atGsE(args, i);
|
|
6582
|
+
}
|
|
6583
|
+
} else {
|
|
6584
|
+
if (!_M0MP311moonbitlang4core6string6String11has__prefix(arg, { str: _M0FP36kazuph5reviw6server26_2ainit_2a_2e_2abind_7c589, start: 0, end: _M0FP36kazuph5reviw6server26_2ainit_2a_2e_2abind_7c589.length })) {
|
|
6585
|
+
_M0MP311moonbitlang4core5array5Array4pushGsE(files, arg);
|
|
6586
|
+
}
|
|
6162
6587
|
}
|
|
6163
6588
|
}
|
|
6164
6589
|
}
|