reviw 1.1.1 → 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 +632 -303
- package/dist/ui/ui.js +1806 -949
- 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,(.+)$/);
|
|
@@ -102,11 +108,11 @@ const _M0FP36kazuph5reviw6server28json__parse__mermaid__errors = (s) => {
|
|
|
102
108
|
return (obj.mermaidErrors || []).map(e => [String(e.line || 0), e.message || ""]);
|
|
103
109
|
} catch(e) { return []; }
|
|
104
110
|
};
|
|
105
|
-
const _M0FP36kazuph5reviw6server19json__parse__string = (key, s) => { try { return JSON.parse(s)[key] || ""; } catch(e) { return ""; } };
|
|
106
111
|
const _M0FP36kazuph5reviw6server22process__stdout__write = (data) => process.stdout.write(data);
|
|
107
112
|
const _M0FP36kazuph5reviw6server11chmod__sync = (path, mode) => { try { import("node:fs").then(fs => fs.chmodSync(path, mode)); } catch(e) {} };
|
|
108
113
|
const _M0FP36kazuph5reviw6server27hash__update__digest__hex16 = (h, d) => h.update(d).digest("hex").slice(0, 16);
|
|
109
114
|
const _M0FP36kazuph5reviw6server15try__call__void = (fn) => { try { fn(); } catch(e) {} };
|
|
115
|
+
const _M0FP36kazuph5reviw6server12set__timeout = (cb, ms) => setTimeout(cb, ms);
|
|
110
116
|
const _M0FP36kazuph5reviw6server15js__stdio__pipe = () => ({ stdio: "pipe" });
|
|
111
117
|
const _M0FP36kazuph5reviw6server15try__call__bool = (fn) => { try { return fn(); } catch(e) { return false; } };
|
|
112
118
|
const _M0FP36kazuph5reviw6server30on__spawn__close__with__stderr = (proc, handler) => {
|
|
@@ -190,146 +196,147 @@ const _M0FP36kazuph5reviw6server22child__spawn__detached = (cmd, args) => {
|
|
|
190
196
|
};
|
|
191
197
|
const _M0FP36kazuph5reviw6server13get__platform = () => process.platform;
|
|
192
198
|
const _M0FP36kazuph5reviw6server21js__spawn__opts__utf8 = () => ({ encoding: "utf8", timeout: 3000 });
|
|
193
|
-
const _M0FP36kazuph5reviw6server14server__listen = (server, port, cb) => server.listen(port,
|
|
199
|
+
const _M0FP36kazuph5reviw6server14server__listen = (server, port, host, cb) => server.listen(port, host, cb);
|
|
194
200
|
const _M0FP36kazuph5reviw6server17server__on__error = (server, cb) => server.on("error", cb);
|
|
195
201
|
const _M0FP36kazuph5reviw6server13set__interval = (cb, ms) => setInterval(cb, ms);
|
|
196
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 };
|
|
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 _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c781 = "|";
|
|
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 = "-";
|
|
252
257
|
const _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c782 = "|";
|
|
253
258
|
const _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c783 = "|";
|
|
254
|
-
const
|
|
255
|
-
const
|
|
256
|
-
const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c785 = ".
|
|
257
|
-
const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c786 = ".
|
|
258
|
-
const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c787 = ".
|
|
259
|
-
const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c788 = ".
|
|
260
|
-
const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c789 = ".
|
|
261
|
-
const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c790 = ".
|
|
262
|
-
const
|
|
263
|
-
const
|
|
264
|
-
const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c810 = "
|
|
265
|
-
const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c811 = "
|
|
266
|
-
const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c812 = "
|
|
267
|
-
const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c813 = "
|
|
268
|
-
const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c814 = "
|
|
269
|
-
const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c815 = "
|
|
270
|
-
const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c816 = "
|
|
271
|
-
const
|
|
272
|
-
const
|
|
273
|
-
const _M0FP36kazuph5reviw4core29is__safe__url_2e_2abind_7c819 = "
|
|
274
|
-
const
|
|
275
|
-
const
|
|
276
|
-
const
|
|
277
|
-
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c840 = "
|
|
278
|
-
const
|
|
279
|
-
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c843 = "
|
|
280
|
-
const
|
|
281
|
-
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c848 = "
|
|
282
|
-
const
|
|
283
|
-
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c851 = "
|
|
284
|
-
const
|
|
285
|
-
const
|
|
286
|
-
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c857 = "
|
|
287
|
-
const
|
|
288
|
-
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c863 = "
|
|
289
|
-
const
|
|
290
|
-
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c860 = "[
|
|
291
|
-
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c861 = "[
|
|
292
|
-
const
|
|
293
|
-
const
|
|
294
|
-
const
|
|
295
|
-
const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c958 = "
|
|
296
|
-
const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c959 = "
|
|
297
|
-
const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c960 = "
|
|
298
|
-
const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c961 = "
|
|
299
|
-
const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c962 = "
|
|
300
|
-
const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c963 = "
|
|
301
|
-
const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c964 = "
|
|
302
|
-
const
|
|
303
|
-
const _M0FP36kazuph5reviw4core35strip__diff__prefix_2e_2abind_7c967 = "
|
|
304
|
-
const
|
|
305
|
-
const
|
|
306
|
-
const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c972 = "
|
|
307
|
-
const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c973 = "
|
|
308
|
-
const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c974 = "
|
|
309
|
-
const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c975 = "
|
|
310
|
-
const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c976 = "
|
|
311
|
-
const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c977 = "
|
|
312
|
-
const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c978 = "
|
|
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 = "+++ ";
|
|
313
319
|
const _M0FP36kazuph5reviw6server15active__servers = [];
|
|
314
320
|
const _M0FP36kazuph5reviw6server12all__results = [];
|
|
315
|
-
const
|
|
316
|
-
const
|
|
317
|
-
const
|
|
318
|
-
const
|
|
319
|
-
const
|
|
320
|
-
const
|
|
321
|
-
const
|
|
322
|
-
const
|
|
323
|
-
const
|
|
324
|
-
const
|
|
325
|
-
const
|
|
326
|
-
const
|
|
327
|
-
const
|
|
328
|
-
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 = "-";
|
|
329
335
|
const _M0FP36kazuph5reviw6server15expected__count = _M0MP311moonbitlang4core3ref3Ref3newGiE(0);
|
|
330
336
|
const _M0FP36kazuph5reviw6server18encoding__override = _M0MP311moonbitlang4core3ref3Ref3newGsE("");
|
|
331
|
-
const
|
|
332
|
-
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");
|
|
333
340
|
const _M0FP36kazuph5reviw6server13ui__js__cache = _M0MP311moonbitlang4core3ref3Ref3newGsE("");
|
|
334
341
|
const _M0FP311moonbitlang4core7builtin4seed = _M0FP311moonbitlang4core7builtin12random__seed();
|
|
335
342
|
const _M0FP36kazuph5reviw4core16heading__counter = _M0MP311moonbitlang4core3ref3Ref3newGiE(0);
|
|
@@ -339,6 +346,9 @@ function _M0FP311moonbitlang4core5abort5abortGRP311moonbitlang4core6string10Stri
|
|
|
339
346
|
function _M0FP311moonbitlang4core5abort5abortGRP36kazuph5reviw6server7JsValueE(msg) {
|
|
340
347
|
return $panic();
|
|
341
348
|
}
|
|
349
|
+
function _M0FP311moonbitlang4core5abort5abortGsE(msg) {
|
|
350
|
+
return $panic();
|
|
351
|
+
}
|
|
342
352
|
function _M0MP311moonbitlang4core7builtin6Hasher8consume4(self, input) {
|
|
343
353
|
const _p = (self.acc >>> 0) + ((Math.imul(input, -1028477379) | 0) >>> 0) | 0;
|
|
344
354
|
const _p$2 = 17;
|
|
@@ -354,6 +364,9 @@ function _M0FP311moonbitlang4core7builtin5abortGRP311moonbitlang4core6string10St
|
|
|
354
364
|
function _M0FP311moonbitlang4core7builtin5abortGRP36kazuph5reviw6server7JsValueE(string, loc) {
|
|
355
365
|
return _M0FP311moonbitlang4core5abort5abortGRP36kazuph5reviw6server7JsValueE(`${string}\n at ${_M0IP016_24default__implP311moonbitlang4core7builtin4Show10to__stringGRP311moonbitlang4core7builtin9SourceLocE(loc)}\n`);
|
|
356
366
|
}
|
|
367
|
+
function _M0FP311moonbitlang4core7builtin5abortGsE(string, loc) {
|
|
368
|
+
return _M0FP311moonbitlang4core5abort5abortGsE(`${string}\n at ${_M0IP016_24default__implP311moonbitlang4core7builtin4Show10to__stringGRP311moonbitlang4core7builtin9SourceLocE(loc)}\n`);
|
|
369
|
+
}
|
|
357
370
|
function _M0MP311moonbitlang4core7builtin13StringBuilder11new_2einner(size_hint) {
|
|
358
371
|
return { val: "" };
|
|
359
372
|
}
|
|
@@ -1176,7 +1189,7 @@ function _M0FP311moonbitlang4core7builtin28boyer__moore__horspool__find(haystack
|
|
|
1176
1189
|
return undefined;
|
|
1177
1190
|
}
|
|
1178
1191
|
} else {
|
|
1179
|
-
return
|
|
1192
|
+
return _M0FP311moonbitlang4core7builtin43boyer__moore__horspool__find_2econstr_2f233;
|
|
1180
1193
|
}
|
|
1181
1194
|
}
|
|
1182
1195
|
function _M0FP311moonbitlang4core7builtin18brute__force__find(haystack, needle) {
|
|
@@ -1235,7 +1248,7 @@ function _M0FP311moonbitlang4core7builtin18brute__force__find(haystack, needle)
|
|
|
1235
1248
|
return undefined;
|
|
1236
1249
|
}
|
|
1237
1250
|
} else {
|
|
1238
|
-
return
|
|
1251
|
+
return _M0FP311moonbitlang4core7builtin33brute__force__find_2econstr_2f247;
|
|
1239
1252
|
}
|
|
1240
1253
|
}
|
|
1241
1254
|
function _M0MP311moonbitlang4core6string10StringView4find(self, str) {
|
|
@@ -1778,6 +1791,124 @@ function _M0MP311moonbitlang4core7builtin3Map11from__arrayGssE(arr) {
|
|
|
1778
1791
|
}
|
|
1779
1792
|
return m;
|
|
1780
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
|
+
}
|
|
1781
1912
|
function _M0MP311moonbitlang4core7builtin5Iter24nextGicE(self) {
|
|
1782
1913
|
return _M0MP311moonbitlang4core7builtin4Iter4nextGUicEE(self);
|
|
1783
1914
|
}
|
|
@@ -1944,6 +2075,16 @@ function _M0MP311moonbitlang4core5array5Array6removeGRP36kazuph5reviw6server7JsV
|
|
|
1944
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");
|
|
1945
2076
|
}
|
|
1946
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
|
+
}
|
|
1947
2088
|
function _M0MP311moonbitlang4core5array5Array4copyGsE(self) {
|
|
1948
2089
|
return _M0MP311moonbitlang4core7builtin7JSArray4copy(self);
|
|
1949
2090
|
}
|
|
@@ -1956,38 +2097,38 @@ function _M0MP311moonbitlang4core3ref3Ref3newGsE(x) {
|
|
|
1956
2097
|
function _M0MP311moonbitlang4core3ref3Ref3newGiE(x) {
|
|
1957
2098
|
return { val: x };
|
|
1958
2099
|
}
|
|
1959
|
-
function _M0IP36kazuph5reviw4core8FileModeP311moonbitlang4core7builtin2Eq5equal(
|
|
1960
|
-
switch (
|
|
2100
|
+
function _M0IP36kazuph5reviw4core8FileModeP311moonbitlang4core7builtin2Eq5equal(_x_571, _x_572) {
|
|
2101
|
+
switch (_x_571) {
|
|
1961
2102
|
case 0: {
|
|
1962
|
-
if (
|
|
2103
|
+
if (_x_572 === 0) {
|
|
1963
2104
|
return true;
|
|
1964
2105
|
} else {
|
|
1965
2106
|
return false;
|
|
1966
2107
|
}
|
|
1967
2108
|
}
|
|
1968
2109
|
case 1: {
|
|
1969
|
-
if (
|
|
2110
|
+
if (_x_572 === 1) {
|
|
1970
2111
|
return true;
|
|
1971
2112
|
} else {
|
|
1972
2113
|
return false;
|
|
1973
2114
|
}
|
|
1974
2115
|
}
|
|
1975
2116
|
case 2: {
|
|
1976
|
-
if (
|
|
2117
|
+
if (_x_572 === 2) {
|
|
1977
2118
|
return true;
|
|
1978
2119
|
} else {
|
|
1979
2120
|
return false;
|
|
1980
2121
|
}
|
|
1981
2122
|
}
|
|
1982
2123
|
case 3: {
|
|
1983
|
-
if (
|
|
2124
|
+
if (_x_572 === 3) {
|
|
1984
2125
|
return true;
|
|
1985
2126
|
} else {
|
|
1986
2127
|
return false;
|
|
1987
2128
|
}
|
|
1988
2129
|
}
|
|
1989
2130
|
default: {
|
|
1990
|
-
if (
|
|
2131
|
+
if (_x_572 === 4) {
|
|
1991
2132
|
return true;
|
|
1992
2133
|
} else {
|
|
1993
2134
|
return false;
|
|
@@ -1996,7 +2137,7 @@ function _M0IP36kazuph5reviw4core8FileModeP311moonbitlang4core7builtin2Eq5equal(
|
|
|
1996
2137
|
}
|
|
1997
2138
|
}
|
|
1998
2139
|
function _M0FP36kazuph5reviw4core20yaml__escape__string(s) {
|
|
1999
|
-
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 }))))))))))))))));
|
|
2000
2141
|
if (needs_quote) {
|
|
2001
2142
|
const buf = _M0MP311moonbitlang4core7builtin13StringBuilder11new_2einner(0);
|
|
2002
2143
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger11write__char(buf, 39);
|
|
@@ -2257,7 +2398,7 @@ function _M0FP36kazuph5reviw4core16parse__int__safe(s) {
|
|
|
2257
2398
|
}
|
|
2258
2399
|
function _M0FP36kazuph5reviw4core16split__to__lines(input) {
|
|
2259
2400
|
const result = [];
|
|
2260
|
-
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 });
|
|
2261
2402
|
while (true) {
|
|
2262
2403
|
const _bind = _M0MP311moonbitlang4core7builtin4Iter4nextGRP311moonbitlang4core6string10StringViewE(_it);
|
|
2263
2404
|
if (_bind === undefined) {
|
|
@@ -2358,12 +2499,12 @@ function _M0FP36kazuph5reviw4core4trim(s) {
|
|
|
2358
2499
|
return "";
|
|
2359
2500
|
}
|
|
2360
2501
|
const buf = _M0MP311moonbitlang4core7builtin13StringBuilder11new_2einner(0);
|
|
2361
|
-
const
|
|
2362
|
-
const
|
|
2363
|
-
let _tmp =
|
|
2502
|
+
const _start454 = start;
|
|
2503
|
+
const _end455 = end;
|
|
2504
|
+
let _tmp = _start454;
|
|
2364
2505
|
while (true) {
|
|
2365
2506
|
const i = _tmp;
|
|
2366
|
-
if (i <=
|
|
2507
|
+
if (i <= _end455) {
|
|
2367
2508
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger11write__char(buf, _M0MP311moonbitlang4core5array5Array2atGcE(chars, i));
|
|
2368
2509
|
_tmp = i + 1 | 0;
|
|
2369
2510
|
continue;
|
|
@@ -2403,10 +2544,10 @@ function _M0FP36kazuph5reviw4core23parse__single__question(lines, start, end) {
|
|
|
2403
2544
|
if (i < end) {
|
|
2404
2545
|
const line = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
|
|
2405
2546
|
const trimmed = _M0FP36kazuph5reviw4core4trim(line);
|
|
2406
|
-
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 })) {
|
|
2407
2548
|
break;
|
|
2408
2549
|
}
|
|
2409
|
-
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 })) {
|
|
2410
2551
|
break;
|
|
2411
2552
|
}
|
|
2412
2553
|
const content_colon = _M0FP36kazuph5reviw4core15index__of__char(trimmed, 58);
|
|
@@ -2431,7 +2572,7 @@ function _M0FP36kazuph5reviw4core23parse__single__question(lines, start, end) {
|
|
|
2431
2572
|
if (i < end) {
|
|
2432
2573
|
const opt_line = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
|
|
2433
2574
|
const opt_trimmed = _M0FP36kazuph5reviw4core4trim(opt_line);
|
|
2434
|
-
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 })) {
|
|
2435
2576
|
_M0MP311moonbitlang4core5array5Array4pushGsE(options, _M0FP36kazuph5reviw4core4trim(_M0FP36kazuph5reviw4core11safe__slice(opt_trimmed, 2)));
|
|
2436
2577
|
i = i + 1 | 0;
|
|
2437
2578
|
} else {
|
|
@@ -2471,12 +2612,12 @@ function _M0FP36kazuph5reviw4core23parse__reviw__questions(lines, start, end) {
|
|
|
2471
2612
|
if (i < end) {
|
|
2472
2613
|
const item_line = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
|
|
2473
2614
|
const trimmed = _M0FP36kazuph5reviw4core4trim(item_line);
|
|
2474
|
-
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 })) {
|
|
2475
2616
|
const q = _M0FP36kazuph5reviw4core23parse__single__question(lines, i, end);
|
|
2476
2617
|
_M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core13ReviwQuestionE(questions, q._0);
|
|
2477
2618
|
i = q._1;
|
|
2478
2619
|
} else {
|
|
2479
|
-
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 })) {
|
|
2480
2621
|
break;
|
|
2481
2622
|
} else {
|
|
2482
2623
|
i = i + 1 | 0;
|
|
@@ -2626,7 +2767,7 @@ function _M0FP36kazuph5reviw4core20is__horizontal__rule(line) {
|
|
|
2626
2767
|
}
|
|
2627
2768
|
function _M0FP36kazuph5reviw4core22is__html__block__start(line) {
|
|
2628
2769
|
const t = _M0FP36kazuph5reviw4core4trim(line);
|
|
2629
|
-
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 })))))));
|
|
2630
2771
|
}
|
|
2631
2772
|
function _M0FP36kazuph5reviw4core23is__ordered__list__item(line) {
|
|
2632
2773
|
const chars = _M0MP311moonbitlang4core6string6String9to__array(line);
|
|
@@ -2645,15 +2786,15 @@ function _M0FP36kazuph5reviw4core23is__ordered__list__item(line) {
|
|
|
2645
2786
|
return i < (chars.length - 1 | 0) && (_M0MP311moonbitlang4core5array5Array2atGcE(chars, i) === 46 && _M0MP311moonbitlang4core5array5Array2atGcE(chars, i + 1 | 0) === 32);
|
|
2646
2787
|
}
|
|
2647
2788
|
function _M0FP36kazuph5reviw4core16is__block__start(line) {
|
|
2648
|
-
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)))))));
|
|
2649
2790
|
}
|
|
2650
2791
|
function _M0FP36kazuph5reviw4core20is__mermaid__content(text) {
|
|
2651
2792
|
const t = _M0FP36kazuph5reviw4core4trim(text);
|
|
2652
|
-
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 })))))))))));
|
|
2653
2794
|
}
|
|
2654
2795
|
function _M0FP36kazuph5reviw4core20is__table__separator(line) {
|
|
2655
2796
|
const t = _M0FP36kazuph5reviw4core4trim(line);
|
|
2656
|
-
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 })) {
|
|
2657
2798
|
return false;
|
|
2658
2799
|
}
|
|
2659
2800
|
const chars = _M0MP311moonbitlang4core6string6String9to__array(t);
|
|
@@ -2708,8 +2849,8 @@ function _M0FP36kazuph5reviw4core18make__heading__key(text, counter) {
|
|
|
2708
2849
|
function _M0FP36kazuph5reviw4core17parse__table__row(line) {
|
|
2709
2850
|
const result = [];
|
|
2710
2851
|
const t = _M0FP36kazuph5reviw4core4trim(line);
|
|
2711
|
-
const inner = _M0MP311moonbitlang4core6string6String11has__prefix(t, { str:
|
|
2712
|
-
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 });
|
|
2713
2854
|
while (true) {
|
|
2714
2855
|
const _bind = _M0MP311moonbitlang4core7builtin4Iter4nextGRP311moonbitlang4core6string10StringViewE(_it);
|
|
2715
2856
|
if (_bind === undefined) {
|
|
@@ -2725,7 +2866,7 @@ function _M0FP36kazuph5reviw4core17parse__table__row(line) {
|
|
|
2725
2866
|
}
|
|
2726
2867
|
function _M0FP36kazuph5reviw4core14is__video__url(url) {
|
|
2727
2868
|
const lower = _M0MP311moonbitlang4core6string6String9to__lower(url);
|
|
2728
|
-
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 }))))));
|
|
2729
2870
|
}
|
|
2730
2871
|
function _M0FP36kazuph5reviw4core14render__inline(text) {
|
|
2731
2872
|
const chars = _M0MP311moonbitlang4core6string6String9to__array(text);
|
|
@@ -2824,7 +2965,7 @@ function _M0FP36kazuph5reviw4core14render__inline(text) {
|
|
|
2824
2965
|
const link_text = _M0FP36kazuph5reviw4core18safe__slice__range(text, text_start, text_end);
|
|
2825
2966
|
const link_url = _M0FP36kazuph5reviw4core18safe__slice__range(text, url_start, url_end);
|
|
2826
2967
|
const lower_url = _M0MP311moonbitlang4core6string6String9to__lower(link_url);
|
|
2827
|
-
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 })) {
|
|
2828
2969
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core12escape__html(link_text));
|
|
2829
2970
|
} else {
|
|
2830
2971
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<a href=\"");
|
|
@@ -3021,18 +3162,18 @@ function _M0FP36kazuph5reviw4core17is__allowed__attr(name) {
|
|
|
3021
3162
|
}
|
|
3022
3163
|
function _M0FP36kazuph5reviw4core18is__dangerous__css(value) {
|
|
3023
3164
|
const lower = _M0MP311moonbitlang4core6string6String9to__lower(value);
|
|
3024
|
-
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 })))))));
|
|
3025
3166
|
}
|
|
3026
3167
|
function _M0FP36kazuph5reviw4core24is__event__handler__attr(name) {
|
|
3027
|
-
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 });
|
|
3028
3169
|
}
|
|
3029
3170
|
function _M0FP36kazuph5reviw4core13is__safe__url(url) {
|
|
3030
3171
|
const lower = _M0MP311moonbitlang4core6string6String9to__lower(url);
|
|
3031
3172
|
const trimmed = _M0FP36kazuph5reviw4core4trim(lower);
|
|
3032
|
-
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 })) {
|
|
3033
3174
|
return false;
|
|
3034
3175
|
}
|
|
3035
|
-
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 })) {
|
|
3036
3177
|
return false;
|
|
3037
3178
|
}
|
|
3038
3179
|
return true;
|
|
@@ -3371,7 +3512,7 @@ function _M0FP36kazuph5reviw4core14sanitize__html(input) {
|
|
|
3371
3512
|
if (!_M0FP36kazuph5reviw4core16is__allowed__tag(tag_name) && tag_name.length > 0) {
|
|
3372
3513
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<");
|
|
3373
3514
|
const tag_content = _M0FP36kazuph5reviw4core18safe__slice__range(input, tag_start + 1 | 0, tag_end);
|
|
3374
|
-
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;
|
|
3375
3516
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core12escape__html(trimmed_content));
|
|
3376
3517
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, ">");
|
|
3377
3518
|
i = tag_end;
|
|
@@ -3415,7 +3556,7 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
|
|
|
3415
3556
|
i = i + 1 | 0;
|
|
3416
3557
|
continue;
|
|
3417
3558
|
}
|
|
3418
|
-
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)) {
|
|
3419
3560
|
const tag_name = _M0FP36kazuph5reviw4core24extract__html__tag__name(line);
|
|
3420
3561
|
if (tag_name === "details") {
|
|
3421
3562
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<details>\n");
|
|
@@ -3423,13 +3564,13 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
|
|
|
3423
3564
|
while (true) {
|
|
3424
3565
|
if (i < len) {
|
|
3425
3566
|
const current = _M0FP36kazuph5reviw4core4trim(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i));
|
|
3426
|
-
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 })) {
|
|
3427
3568
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core14sanitize__html(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i)));
|
|
3428
3569
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "\n");
|
|
3429
3570
|
i = i + 1 | 0;
|
|
3430
3571
|
break;
|
|
3431
3572
|
} else {
|
|
3432
|
-
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 })) {
|
|
3433
3574
|
break;
|
|
3434
3575
|
}
|
|
3435
3576
|
}
|
|
@@ -3444,14 +3585,14 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
|
|
|
3444
3585
|
while (true) {
|
|
3445
3586
|
if (i < len && depth > 0) {
|
|
3446
3587
|
const current = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
|
|
3447
|
-
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 })) {
|
|
3448
3589
|
depth = depth - 1 | 0;
|
|
3449
3590
|
if (depth === 0) {
|
|
3450
3591
|
i = i + 1 | 0;
|
|
3451
3592
|
break;
|
|
3452
3593
|
}
|
|
3453
3594
|
}
|
|
3454
|
-
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 })) {
|
|
3455
3596
|
depth = depth + 1 | 0;
|
|
3456
3597
|
}
|
|
3457
3598
|
_M0MP311moonbitlang4core5array5Array4pushGsE(inner_lines, current);
|
|
@@ -3496,7 +3637,7 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
|
|
|
3496
3637
|
}
|
|
3497
3638
|
continue;
|
|
3498
3639
|
}
|
|
3499
|
-
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 })) {
|
|
3500
3641
|
const level = _M0FP36kazuph5reviw4core21count__heading__level(line);
|
|
3501
3642
|
if (level >= 1 && level <= 6) {
|
|
3502
3643
|
const content = _M0FP36kazuph5reviw4core4trim(_M0FP36kazuph5reviw4core11safe__slice(line, level + 1 | 0));
|
|
@@ -3522,14 +3663,14 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
|
|
|
3522
3663
|
i = i + 1 | 0;
|
|
3523
3664
|
continue;
|
|
3524
3665
|
}
|
|
3525
|
-
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 })) {
|
|
3526
3667
|
const lang = _M0FP36kazuph5reviw4core4trim(_M0FP36kazuph5reviw4core11safe__slice(line, 3));
|
|
3527
3668
|
const code_block_start_line = i + 1 | 0;
|
|
3528
3669
|
i = i + 1 | 0;
|
|
3529
3670
|
const code_buf = _M0MP311moonbitlang4core7builtin13StringBuilder11new_2einner(0);
|
|
3530
3671
|
let code_first = true;
|
|
3531
3672
|
while (true) {
|
|
3532
|
-
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 })) {
|
|
3533
3674
|
if (!code_first) {
|
|
3534
3675
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(code_buf, "\n");
|
|
3535
3676
|
}
|
|
@@ -3541,12 +3682,17 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
|
|
|
3541
3682
|
break;
|
|
3542
3683
|
}
|
|
3543
3684
|
}
|
|
3685
|
+
const code_block_end_line = i < len ? i + 1 | 0 : len;
|
|
3544
3686
|
if (i < len) {
|
|
3545
3687
|
i = i + 1 | 0;
|
|
3546
3688
|
}
|
|
3547
3689
|
const code_text = code_buf.val;
|
|
3548
3690
|
if (lang === "mermaid" || _M0FP36kazuph5reviw4core20is__mermaid__content(code_text)) {
|
|
3549
|
-
_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=\"");
|
|
3550
3696
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core12escape__html(code_text));
|
|
3551
3697
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "\" data-source-line=\"");
|
|
3552
3698
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0MP311moonbitlang4core3int3Int18to__string_2einner(code_block_start_line, 10));
|
|
@@ -3566,10 +3712,10 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
|
|
|
3566
3712
|
}
|
|
3567
3713
|
continue;
|
|
3568
3714
|
}
|
|
3569
|
-
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 })) {
|
|
3570
3716
|
const quote_lines = [];
|
|
3571
3717
|
while (true) {
|
|
3572
|
-
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 })) {
|
|
3573
3719
|
const content = _M0FP36kazuph5reviw4core4trim(_M0FP36kazuph5reviw4core11safe__slice(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), 1));
|
|
3574
3720
|
_M0MP311moonbitlang4core5array5Array4pushGsE(quote_lines, content);
|
|
3575
3721
|
i = i + 1 | 0;
|
|
@@ -3597,16 +3743,16 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
|
|
|
3597
3743
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "</blockquote>\n");
|
|
3598
3744
|
continue;
|
|
3599
3745
|
}
|
|
3600
|
-
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 })) {
|
|
3601
3747
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<ul>\n");
|
|
3602
3748
|
while (true) {
|
|
3603
|
-
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 }))) {
|
|
3604
3750
|
const item_text = _M0FP36kazuph5reviw4core11safe__slice(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), 2);
|
|
3605
|
-
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 })) {
|
|
3606
3752
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<li class=\"task-list-item\"><input type=\"checkbox\" disabled /> ");
|
|
3607
3753
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core14render__inline(_M0FP36kazuph5reviw4core11safe__slice(item_text, 4)));
|
|
3608
3754
|
} else {
|
|
3609
|
-
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 })) {
|
|
3610
3756
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<li class=\"task-list-item\"><input type=\"checkbox\" checked disabled /> ");
|
|
3611
3757
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core14render__inline(_M0FP36kazuph5reviw4core11safe__slice(item_text, 4)));
|
|
3612
3758
|
} else {
|
|
@@ -3663,7 +3809,7 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
|
|
|
3663
3809
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "</tr>\n</thead>\n<tbody>\n");
|
|
3664
3810
|
i = i + 2 | 0;
|
|
3665
3811
|
while (true) {
|
|
3666
|
-
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 })) {
|
|
3667
3813
|
const cells = _M0FP36kazuph5reviw4core17parse__table__row(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i));
|
|
3668
3814
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<tr>\n");
|
|
3669
3815
|
const _len$2 = cells.length;
|
|
@@ -3730,11 +3876,11 @@ function _M0FP36kazuph5reviw4core15parse__markdown(input) {
|
|
|
3730
3876
|
let content_start = 0;
|
|
3731
3877
|
if (lines.length > 0 && _M0MP311moonbitlang4core5array5Array2atGsE(lines, 0) === "---") {
|
|
3732
3878
|
let end_idx = -1;
|
|
3733
|
-
const
|
|
3879
|
+
const _end473 = lines.length;
|
|
3734
3880
|
let _tmp = 1;
|
|
3735
3881
|
while (true) {
|
|
3736
3882
|
const i = _tmp;
|
|
3737
|
-
if (i <
|
|
3883
|
+
if (i < _end473) {
|
|
3738
3884
|
if (_M0MP311moonbitlang4core5array5Array2atGsE(lines, i) === "---") {
|
|
3739
3885
|
end_idx = i;
|
|
3740
3886
|
break;
|
|
@@ -3746,11 +3892,11 @@ function _M0FP36kazuph5reviw4core15parse__markdown(input) {
|
|
|
3746
3892
|
}
|
|
3747
3893
|
}
|
|
3748
3894
|
if (end_idx > 0) {
|
|
3749
|
-
const
|
|
3895
|
+
const _end478 = end_idx;
|
|
3750
3896
|
let _tmp$2 = 1;
|
|
3751
3897
|
while (true) {
|
|
3752
3898
|
const i = _tmp$2;
|
|
3753
|
-
if (i <
|
|
3899
|
+
if (i < _end478) {
|
|
3754
3900
|
const line = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
|
|
3755
3901
|
const colon = _M0FP36kazuph5reviw4core15index__of__char(line, 58);
|
|
3756
3902
|
if (colon >= 0) {
|
|
@@ -3770,12 +3916,12 @@ function _M0FP36kazuph5reviw4core15parse__markdown(input) {
|
|
|
3770
3916
|
}
|
|
3771
3917
|
}
|
|
3772
3918
|
const content_lines = [];
|
|
3773
|
-
const
|
|
3774
|
-
const
|
|
3775
|
-
let _tmp =
|
|
3919
|
+
const _start487 = content_start;
|
|
3920
|
+
const _end488 = lines.length;
|
|
3921
|
+
let _tmp = _start487;
|
|
3776
3922
|
while (true) {
|
|
3777
3923
|
const i = _tmp;
|
|
3778
|
-
if (i <
|
|
3924
|
+
if (i < _end488) {
|
|
3779
3925
|
_M0MP311moonbitlang4core5array5Array4pushGsE(content_lines, _M0MP311moonbitlang4core5array5Array2atGsE(lines, i));
|
|
3780
3926
|
_tmp = i + 1 | 0;
|
|
3781
3927
|
continue;
|
|
@@ -3881,19 +4027,21 @@ function _M0FP36kazuph5reviw4core24build__video__fullscreen(buf) {
|
|
|
3881
4027
|
}
|
|
3882
4028
|
function _M0FP36kazuph5reviw4core20build__comment__card(buf) {
|
|
3883
4029
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<div class=\"floating\" id=\"comment-card\">");
|
|
3884
|
-
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<
|
|
3885
|
-
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<
|
|
3886
|
-
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<
|
|
3887
|
-
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<
|
|
3888
|
-
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<button id=\"
|
|
3889
|
-
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "</div></header>");
|
|
3890
|
-
_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>");
|
|
3891
4035
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<textarea id=\"comment-input\" placeholder=\"Enter your comment or note\"></textarea>");
|
|
4036
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "</div>");
|
|
3892
4037
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<div class=\"image-attach-area image-attach-small\" id=\"comment-image-area\">");
|
|
3893
4038
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<label>Image (Paste, max 1)</label>");
|
|
3894
4039
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<div class=\"image-preview-list\" id=\"comment-image-preview\"></div>");
|
|
3895
4040
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "</div>");
|
|
3896
|
-
_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>");
|
|
3897
4045
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "</div>");
|
|
3898
4046
|
}
|
|
3899
4047
|
function _M0FP36kazuph5reviw4core27build__comment__list__aside(buf) {
|
|
@@ -3925,7 +4073,7 @@ function _M0FP36kazuph5reviw4core26build__page__start_2einner(buf, filename, fil
|
|
|
3925
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\">");
|
|
3926
4074
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<script src=\"https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11/build/highlight.min.js\"></script>");
|
|
3927
4075
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<style>");
|
|
3928
|
-
_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: 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 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 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 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-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}\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}");
|
|
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}");
|
|
3929
4077
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "</style></head><body>");
|
|
3930
4078
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<header><div class=\"meta\">");
|
|
3931
4079
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<h1>");
|
|
@@ -4829,23 +4977,23 @@ function _M0FP36kazuph5reviw4core14collect__hunks(lines, start, len) {
|
|
|
4829
4977
|
while (true) {
|
|
4830
4978
|
if (i < len) {
|
|
4831
4979
|
const line = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
|
|
4832
|
-
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 })) {
|
|
4833
4981
|
const header = _M0FP36kazuph5reviw4core19parse__hunk__header(line);
|
|
4834
4982
|
const hunk_lines = [];
|
|
4835
4983
|
i = i + 1 | 0;
|
|
4836
4984
|
while (true) {
|
|
4837
4985
|
if (i < len) {
|
|
4838
4986
|
const l = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
|
|
4839
|
-
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 }))) {
|
|
4840
4988
|
break;
|
|
4841
4989
|
}
|
|
4842
|
-
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 })) {
|
|
4843
4991
|
_M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core8DiffLineE(hunk_lines, { kind: 1, content: _M0FP36kazuph5reviw4core11safe__slice(l, 1) });
|
|
4844
4992
|
} else {
|
|
4845
|
-
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 })) {
|
|
4846
4994
|
_M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core8DiffLineE(hunk_lines, { kind: 2, content: _M0FP36kazuph5reviw4core11safe__slice(l, 1) });
|
|
4847
4995
|
} else {
|
|
4848
|
-
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 })) {
|
|
4849
4997
|
_M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core8DiffLineE(hunk_lines, { kind: 0, content: _M0FP36kazuph5reviw4core11safe__slice(l, 1) });
|
|
4850
4998
|
} else {
|
|
4851
4999
|
_M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core8DiffLineE(hunk_lines, { kind: 0, content: l });
|
|
@@ -4860,7 +5008,7 @@ function _M0FP36kazuph5reviw4core14collect__hunks(lines, start, len) {
|
|
|
4860
5008
|
}
|
|
4861
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 });
|
|
4862
5010
|
} else {
|
|
4863
|
-
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 })) {
|
|
4864
5012
|
break;
|
|
4865
5013
|
} else {
|
|
4866
5014
|
i = i + 1 | 0;
|
|
@@ -4900,7 +5048,7 @@ function _M0FP36kazuph5reviw4core19extract__git__paths(line) {
|
|
|
4900
5048
|
}
|
|
4901
5049
|
}
|
|
4902
5050
|
function _M0FP36kazuph5reviw4core19strip__diff__prefix(path) {
|
|
4903
|
-
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;
|
|
4904
5052
|
}
|
|
4905
5053
|
function _M0FP36kazuph5reviw4core11parse__diff(input) {
|
|
4906
5054
|
const files = [];
|
|
@@ -4910,7 +5058,7 @@ function _M0FP36kazuph5reviw4core11parse__diff(input) {
|
|
|
4910
5058
|
while (true) {
|
|
4911
5059
|
if (i < len) {
|
|
4912
5060
|
const line = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
|
|
4913
|
-
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 })) {
|
|
4914
5062
|
const paths = _M0FP36kazuph5reviw4core19extract__git__paths(line);
|
|
4915
5063
|
let is_new = false;
|
|
4916
5064
|
let is_deleted = false;
|
|
@@ -4919,19 +5067,19 @@ function _M0FP36kazuph5reviw4core11parse__diff(input) {
|
|
|
4919
5067
|
while (true) {
|
|
4920
5068
|
if (i < len) {
|
|
4921
5069
|
const l = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
|
|
4922
|
-
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 })) {
|
|
4923
5071
|
is_new = true;
|
|
4924
5072
|
i = i + 1 | 0;
|
|
4925
5073
|
} else {
|
|
4926
|
-
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 })) {
|
|
4927
5075
|
is_deleted = true;
|
|
4928
5076
|
i = i + 1 | 0;
|
|
4929
5077
|
} else {
|
|
4930
|
-
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 })) {
|
|
4931
5079
|
is_binary = true;
|
|
4932
5080
|
i = i + 1 | 0;
|
|
4933
5081
|
} else {
|
|
4934
|
-
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 }))) {
|
|
4935
5083
|
i = i + 1 | 0;
|
|
4936
5084
|
} else {
|
|
4937
5085
|
break;
|
|
@@ -4948,11 +5096,11 @@ function _M0FP36kazuph5reviw4core11parse__diff(input) {
|
|
|
4948
5096
|
i = result._1;
|
|
4949
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 });
|
|
4950
5098
|
} else {
|
|
4951
|
-
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 })) {
|
|
4952
5100
|
const old_path = _M0FP36kazuph5reviw4core19strip__diff__prefix(_M0FP36kazuph5reviw4core11safe__slice(line, 4));
|
|
4953
5101
|
let new_path = "";
|
|
4954
5102
|
i = i + 1 | 0;
|
|
4955
|
-
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 })) {
|
|
4956
5104
|
new_path = _M0FP36kazuph5reviw4core19strip__diff__prefix(_M0FP36kazuph5reviw4core11safe__slice(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), 4));
|
|
4957
5105
|
i = i + 1 | 0;
|
|
4958
5106
|
}
|
|
@@ -5073,13 +5221,13 @@ function _M0FP36kazuph5reviw4core21csv__data__from__flat(flat) {
|
|
|
5073
5221
|
}
|
|
5074
5222
|
}
|
|
5075
5223
|
function _M0FP36kazuph5reviw6server12exists__sync(_tmp) {
|
|
5076
|
-
return existsSync$
|
|
5224
|
+
return existsSync$2140(_tmp);
|
|
5077
5225
|
}
|
|
5078
5226
|
function _M0FP36kazuph5reviw6server10path__join(_tmp, _tmp$2) {
|
|
5079
|
-
return join$
|
|
5227
|
+
return join$2143(_tmp, _tmp$2);
|
|
5080
5228
|
}
|
|
5081
5229
|
function _M0FP36kazuph5reviw6server16read__file__sync(_tmp, _tmp$2) {
|
|
5082
|
-
return readFileSync$
|
|
5230
|
+
return readFileSync$2146(_tmp, _tmp$2);
|
|
5083
5231
|
}
|
|
5084
5232
|
function _M0FP36kazuph5reviw6server12load__ui__js() {
|
|
5085
5233
|
if (_M0FP36kazuph5reviw6server13ui__js__cache.val.length > 0) {
|
|
@@ -5097,7 +5245,7 @@ function _M0FP36kazuph5reviw6server12load__ui__js() {
|
|
|
5097
5245
|
}
|
|
5098
5246
|
}
|
|
5099
5247
|
function _M0FP36kazuph5reviw6server11os__homedir() {
|
|
5100
|
-
return homedir$
|
|
5248
|
+
return homedir$2148();
|
|
5101
5249
|
}
|
|
5102
5250
|
function _M0FP36kazuph5reviw6server9lock__dir() {
|
|
5103
5251
|
const override_dir = _M0FP36kazuph5reviw6server13get__env__var("REVIW_LOCK_DIR");
|
|
@@ -5108,7 +5256,7 @@ function _M0FP36kazuph5reviw6server10lock__path(port) {
|
|
|
5108
5256
|
return _M0FP36kazuph5reviw6server10path__join(dir, `${_M0IP016_24default__implP311moonbitlang4core7builtin4Show10to__stringGiE(port)}.lock`);
|
|
5109
5257
|
}
|
|
5110
5258
|
function _M0FP36kazuph5reviw6server11mkdir__sync(_tmp, _tmp$2) {
|
|
5111
|
-
return mkdirSync$
|
|
5259
|
+
return mkdirSync$2151(_tmp, _tmp$2);
|
|
5112
5260
|
}
|
|
5113
5261
|
function _M0FP36kazuph5reviw6server17ensure__lock__dir() {
|
|
5114
5262
|
const dir = _M0FP36kazuph5reviw6server9lock__dir();
|
|
@@ -5119,20 +5267,41 @@ function _M0FP36kazuph5reviw6server17ensure__lock__dir() {
|
|
|
5119
5267
|
return;
|
|
5120
5268
|
}
|
|
5121
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
|
+
}
|
|
5122
5276
|
function _M0FP36kazuph5reviw6server16is__port__locked(port) {
|
|
5123
5277
|
const lp = _M0FP36kazuph5reviw6server10lock__path(port);
|
|
5124
|
-
|
|
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
|
+
}
|
|
5125
5297
|
}
|
|
5126
5298
|
function _M0FP36kazuph5reviw6server17write__file__sync(_tmp, _tmp$2) {
|
|
5127
|
-
return writeFileSync$
|
|
5299
|
+
return writeFileSync$2159(_tmp, _tmp$2);
|
|
5128
5300
|
}
|
|
5129
5301
|
function _M0FP36kazuph5reviw6server11write__lock(port) {
|
|
5130
5302
|
_M0FP36kazuph5reviw6server17ensure__lock__dir();
|
|
5131
5303
|
const lp = _M0FP36kazuph5reviw6server10lock__path(port);
|
|
5132
|
-
_M0FP36kazuph5reviw6server17write__file__sync(lp, _M0MP311moonbitlang4core3int3Int18to__string_2einner(
|
|
5133
|
-
}
|
|
5134
|
-
function _M0FP36kazuph5reviw6server12unlink__sync(_tmp) {
|
|
5135
|
-
return unlinkSync$2044(_tmp);
|
|
5304
|
+
_M0FP36kazuph5reviw6server17write__file__sync(lp, _M0MP311moonbitlang4core3int3Int18to__string_2einner(_M0FP36kazuph5reviw6server12process__pid(), 10));
|
|
5136
5305
|
}
|
|
5137
5306
|
function _M0FP36kazuph5reviw6server12remove__lock(port) {
|
|
5138
5307
|
const lp = _M0FP36kazuph5reviw6server10lock__path(port);
|
|
@@ -5162,10 +5331,7 @@ function _M0FP36kazuph5reviw6server21find__available__port(base) {
|
|
|
5162
5331
|
return base;
|
|
5163
5332
|
}
|
|
5164
5333
|
function _M0FP36kazuph5reviw6server13path__dirname(_tmp) {
|
|
5165
|
-
return dirname$
|
|
5166
|
-
}
|
|
5167
|
-
function _M0FP36kazuph5reviw6server16read__file__safe(path) {
|
|
5168
|
-
return _M0FP36kazuph5reviw6server17try__call__string(() => _M0FP36kazuph5reviw6server16read__file__sync(path, "utf-8"), "");
|
|
5334
|
+
return dirname$2163(_tmp);
|
|
5169
5335
|
}
|
|
5170
5336
|
function _M0FP36kazuph5reviw6server21get__package__version() {
|
|
5171
5337
|
let dir = _M0FP36kazuph5reviw6server16get__script__dir();
|
|
@@ -5211,17 +5377,17 @@ function _M0FP36kazuph5reviw6server11parse__port(s) {
|
|
|
5211
5377
|
return n === 0 ? 4989 : n;
|
|
5212
5378
|
}
|
|
5213
5379
|
function _M0FP36kazuph5reviw6server12print__usage() {
|
|
5214
|
-
_M0FP36kazuph5reviw6server12console__log(
|
|
5380
|
+
_M0FP36kazuph5reviw6server12console__log(_M0FP36kazuph5reviw6server26print__usage_2eusage_7c449);
|
|
5215
5381
|
}
|
|
5216
5382
|
function _M0FP36kazuph5reviw6server17read__stdin__sync() {
|
|
5217
5383
|
return _M0FP36kazuph5reviw6server16read__file__sync("/dev/stdin", "utf-8");
|
|
5218
5384
|
}
|
|
5219
5385
|
function _M0FP36kazuph5reviw6server13path__extname(_tmp) {
|
|
5220
|
-
return extname$
|
|
5386
|
+
return extname$2170(_tmp);
|
|
5221
5387
|
}
|
|
5222
5388
|
function _M0FP36kazuph5reviw6server12detect__mode(file_path) {
|
|
5223
5389
|
const ext = _M0FP36kazuph5reviw6server13path__extname(file_path);
|
|
5224
|
-
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);
|
|
5225
5391
|
return _M0MP36kazuph5reviw4core8FileMode15from__extension(ext_lower);
|
|
5226
5392
|
}
|
|
5227
5393
|
function _M0FP36kazuph5reviw6server16detect__encoding(buf) {
|
|
@@ -5319,7 +5485,7 @@ function _M0FP36kazuph5reviw6server16detect__encoding(buf) {
|
|
|
5319
5485
|
return "utf-8";
|
|
5320
5486
|
}
|
|
5321
5487
|
function _M0FP36kazuph5reviw6server18read__file__buffer(_tmp) {
|
|
5322
|
-
return readFileSync$
|
|
5488
|
+
return readFileSync$2146(_tmp);
|
|
5323
5489
|
}
|
|
5324
5490
|
function _M0FP36kazuph5reviw6server12decode__file(path, override_enc) {
|
|
5325
5491
|
const buf = _M0FP36kazuph5reviw6server18read__file__buffer(path);
|
|
@@ -5361,19 +5527,57 @@ function _M0FP36kazuph5reviw6server22load__and__build__html(ctx) {
|
|
|
5361
5527
|
return _M0FP36kazuph5reviw4core16build__csv__html(data, ctx.filename, ctx.port);
|
|
5362
5528
|
}
|
|
5363
5529
|
function _M0FP36kazuph5reviw6server14path__basename(_tmp) {
|
|
5364
|
-
return basename$
|
|
5530
|
+
return basename$2180(_tmp);
|
|
5365
5531
|
}
|
|
5366
5532
|
function _M0FP36kazuph5reviw6server13path__resolve(_tmp) {
|
|
5367
|
-
return resolve$
|
|
5533
|
+
return resolve$2182(_tmp);
|
|
5368
5534
|
}
|
|
5369
5535
|
function _M0FP36kazuph5reviw6server25http__create__server__raw(_tmp) {
|
|
5370
|
-
return createServer$
|
|
5536
|
+
return createServer$2187(_tmp);
|
|
5371
5537
|
}
|
|
5372
5538
|
function _M0FP36kazuph5reviw6server14create__server(handler) {
|
|
5373
5539
|
return _M0FP36kazuph5reviw6server25http__create__server__raw(handler);
|
|
5374
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
|
+
}
|
|
5375
5579
|
function _M0FP36kazuph5reviw6server22write__file__sync__buf(_tmp, _tmp$2) {
|
|
5376
|
-
return writeFileSync$
|
|
5580
|
+
return writeFileSync$2159(_tmp, _tmp$2);
|
|
5377
5581
|
}
|
|
5378
5582
|
function _M0FP36kazuph5reviw6server16base64__to__file(data, dir, index) {
|
|
5379
5583
|
const ext = _M0FP36kazuph5reviw6server20extract__base64__ext(data);
|
|
@@ -5407,7 +5611,7 @@ function _M0FP36kazuph5reviw6server20ensure__history__dir() {
|
|
|
5407
5611
|
}
|
|
5408
5612
|
}
|
|
5409
5613
|
function _M0FP36kazuph5reviw6server20crypto__create__hash(_tmp) {
|
|
5410
|
-
return createHash$
|
|
5614
|
+
return createHash$2206(_tmp);
|
|
5411
5615
|
}
|
|
5412
5616
|
function _M0FP36kazuph5reviw6server14crypto__sha256(s) {
|
|
5413
5617
|
return _M0FP36kazuph5reviw6server27hash__update__digest__hex16(_M0FP36kazuph5reviw6server20crypto__create__hash("sha256"), s);
|
|
@@ -5466,9 +5670,14 @@ function _M0FP36kazuph5reviw6server13save__history(file_path, entry_json) {
|
|
|
5466
5670
|
_M0FP36kazuph5reviw6server11chmod__sync(hp, 384);
|
|
5467
5671
|
}
|
|
5468
5672
|
function _M0FP36kazuph5reviw6server13unwatch__file(_tmp) {
|
|
5469
|
-
return unwatchFile$
|
|
5673
|
+
return unwatchFile$2212(_tmp);
|
|
5470
5674
|
}
|
|
5471
5675
|
function _M0FP36kazuph5reviw6server14handle__submit(ctx, body) {
|
|
5676
|
+
if (ctx.finished) {
|
|
5677
|
+
return undefined;
|
|
5678
|
+
}
|
|
5679
|
+
ctx.finished = true;
|
|
5680
|
+
_M0FP36kazuph5reviw6server22cancel__pending__close(ctx);
|
|
5472
5681
|
const summary = _M0FP36kazuph5reviw6server19json__parse__string("summary", body);
|
|
5473
5682
|
const raw_comments = _M0FP36kazuph5reviw6server21json__parse__comments(body);
|
|
5474
5683
|
const comments = [];
|
|
@@ -5582,8 +5791,95 @@ function _M0FP36kazuph5reviw6server14handle__submit(ctx, body) {
|
|
|
5582
5791
|
return;
|
|
5583
5792
|
}
|
|
5584
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
|
+
}
|
|
5585
5881
|
function _M0FP36kazuph5reviw6server17child__exec__sync(_tmp, _tmp$2) {
|
|
5586
|
-
return execSync$
|
|
5882
|
+
return execSync$2224(_tmp, _tmp$2);
|
|
5587
5883
|
}
|
|
5588
5884
|
function _M0FP36kazuph5reviw6server15command__exists(cmd) {
|
|
5589
5885
|
return _M0FP36kazuph5reviw6server15try__call__bool(() => {
|
|
@@ -5636,10 +5932,10 @@ function _M0FP36kazuph5reviw6server19json__encode__value(s) {
|
|
|
5636
5932
|
return buf.val;
|
|
5637
5933
|
}
|
|
5638
5934
|
function _M0FP36kazuph5reviw6server17fs__mkdtemp__sync(_tmp) {
|
|
5639
|
-
return mkdtempSync$
|
|
5935
|
+
return mkdtempSync$2228(_tmp);
|
|
5640
5936
|
}
|
|
5641
5937
|
function _M0FP36kazuph5reviw6server10os__tmpdir() {
|
|
5642
|
-
return tmpdir$
|
|
5938
|
+
return tmpdir$2229();
|
|
5643
5939
|
}
|
|
5644
5940
|
function _M0FP36kazuph5reviw6server15make__temp__dir() {
|
|
5645
5941
|
return _M0FP36kazuph5reviw6server17fs__mkdtemp__sync(`${_M0FP36kazuph5reviw6server10os__tmpdir()}/reviw-`);
|
|
@@ -5648,13 +5944,13 @@ function _M0FP36kazuph5reviw6server18read__file__base64(path) {
|
|
|
5648
5944
|
return _M0FP36kazuph5reviw6server17try__call__string(() => _M0FP36kazuph5reviw6server15buf__to__base64(_M0FP36kazuph5reviw6server18read__file__buffer(path)), "");
|
|
5649
5945
|
}
|
|
5650
5946
|
function _M0FP36kazuph5reviw6server22fs__readdir__sync__raw(_tmp) {
|
|
5651
|
-
return readdirSync$
|
|
5947
|
+
return readdirSync$2239(_tmp);
|
|
5652
5948
|
}
|
|
5653
5949
|
function _M0FP36kazuph5reviw6server13readdir__sync(path) {
|
|
5654
5950
|
return _M0FP36kazuph5reviw6server24try__call__array__string(() => _M0FP36kazuph5reviw6server22fs__readdir__sync__raw(path));
|
|
5655
5951
|
}
|
|
5656
5952
|
function _M0FP36kazuph5reviw6server12fs__rm__sync(_tmp, _tmp$2) {
|
|
5657
|
-
return rmSync$
|
|
5953
|
+
return rmSync$2248(_tmp, _tmp$2);
|
|
5658
5954
|
}
|
|
5659
5955
|
function _M0FP36kazuph5reviw6server18rm__dir__recursive(path) {
|
|
5660
5956
|
_M0FP36kazuph5reviw6server15try__call__void(() => {
|
|
@@ -5662,13 +5958,13 @@ function _M0FP36kazuph5reviw6server18rm__dir__recursive(path) {
|
|
|
5662
5958
|
});
|
|
5663
5959
|
}
|
|
5664
5960
|
function _M0FP36kazuph5reviw6server12child__spawn(_tmp, _tmp$2, _tmp$3) {
|
|
5665
|
-
return spawn$
|
|
5961
|
+
return spawn$2254(_tmp, _tmp$2, _tmp$3);
|
|
5666
5962
|
}
|
|
5667
5963
|
function _M0FP36kazuph5reviw6server12spawn__async(cmd, args_json) {
|
|
5668
5964
|
return _M0FP36kazuph5reviw6server12child__spawn(cmd, _M0FP36kazuph5reviw6server15js__parse__json(args_json), _M0FP36kazuph5reviw6server21js__spawn__opts__pipe());
|
|
5669
5965
|
}
|
|
5670
5966
|
function _M0FP36kazuph5reviw6server18child__spawn__sync(_tmp, _tmp$2, _tmp$3) {
|
|
5671
|
-
return spawnSync$
|
|
5967
|
+
return spawnSync$2259(_tmp, _tmp$2, _tmp$3);
|
|
5672
5968
|
}
|
|
5673
5969
|
function _M0FP36kazuph5reviw6server19spawn__sync__stdout(cmd, args_json) {
|
|
5674
5970
|
return _M0FP36kazuph5reviw6server17try__call__string(() => _M0FP36kazuph5reviw6server15js__obj__stdout(_M0FP36kazuph5reviw6server18child__spawn__sync(cmd, _M0FP36kazuph5reviw6server15js__parse__json(args_json), _M0FP36kazuph5reviw6server27js__spawn__opts__utf8__pipe())), "");
|
|
@@ -5676,7 +5972,7 @@ function _M0FP36kazuph5reviw6server19spawn__sync__stdout(cmd, args_json) {
|
|
|
5676
5972
|
function _M0FP36kazuph5reviw6server23handle__video__timeline(ctx, url, res) {
|
|
5677
5973
|
const video_path = _M0FP36kazuph5reviw6server19parse__query__param(url, "path");
|
|
5678
5974
|
const scene_str = _M0FP36kazuph5reviw6server19parse__query__param(url, "scene");
|
|
5679
|
-
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 })) {
|
|
5680
5976
|
_M0FP36kazuph5reviw6server16res__write__head(res, 400, "text/plain");
|
|
5681
5977
|
_M0FP36kazuph5reviw6server8res__end(res, "Invalid path");
|
|
5682
5978
|
return undefined;
|
|
@@ -5721,7 +6017,7 @@ function _M0FP36kazuph5reviw6server23handle__video__timeline(ctx, url, res) {
|
|
|
5721
6017
|
const _i = _tmp;
|
|
5722
6018
|
if (_i < _len) {
|
|
5723
6019
|
const file = files[_i];
|
|
5724
|
-
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 })) {
|
|
5725
6021
|
_M0MP311moonbitlang4core5array5Array4pushGsE(scene_files, file);
|
|
5726
6022
|
}
|
|
5727
6023
|
_tmp = _i + 1 | 0;
|
|
@@ -5882,13 +6178,13 @@ function _M0FP36kazuph5reviw6server9index__of(s, target) {
|
|
|
5882
6178
|
return -1;
|
|
5883
6179
|
}
|
|
5884
6180
|
function _M0FP36kazuph5reviw6server14fs__stat__sync(_tmp) {
|
|
5885
|
-
return statSync$
|
|
6181
|
+
return statSync$2274(_tmp);
|
|
5886
6182
|
}
|
|
5887
6183
|
function _M0FP36kazuph5reviw6server14is__file__sync(path) {
|
|
5888
6184
|
return _M0FP36kazuph5reviw6server18js__stat__is__file(_M0FP36kazuph5reviw6server14fs__stat__sync(path));
|
|
5889
6185
|
}
|
|
5890
6186
|
function _M0FP36kazuph5reviw6server30fs__create__read__stream__opts(_tmp, _tmp$2) {
|
|
5891
|
-
return createReadStream$
|
|
6187
|
+
return createReadStream$2278(_tmp, _tmp$2);
|
|
5892
6188
|
}
|
|
5893
6189
|
function _M0FP36kazuph5reviw6server17pipe__file__range(file_path, res, content_type, range_header) {
|
|
5894
6190
|
const stat = _M0FP36kazuph5reviw6server14fs__stat__sync(file_path);
|
|
@@ -5903,7 +6199,7 @@ function _M0FP36kazuph5reviw6server17pipe__file__range(file_path, res, content_t
|
|
|
5903
6199
|
_M0FP36kazuph5reviw6server8js__pipe(stream, res);
|
|
5904
6200
|
}
|
|
5905
6201
|
function _M0FP36kazuph5reviw6server24fs__create__read__stream(_tmp) {
|
|
5906
|
-
return createReadStream$
|
|
6202
|
+
return createReadStream$2278(_tmp);
|
|
5907
6203
|
}
|
|
5908
6204
|
function _M0FP36kazuph5reviw6server24pipe__file__to__response(file_path, res, content_type) {
|
|
5909
6205
|
const stat = _M0FP36kazuph5reviw6server14fs__stat__sync(file_path);
|
|
@@ -5916,8 +6212,8 @@ function _M0FP36kazuph5reviw6server24pipe__file__to__response(file_path, res, co
|
|
|
5916
6212
|
function _M0FP36kazuph5reviw6server19serve__static__file(ctx, url, req, res) {
|
|
5917
6213
|
const qmark = _M0FP36kazuph5reviw6server9index__of(url, 63);
|
|
5918
6214
|
const url_path = qmark >= 0 ? _M0FP36kazuph5reviw4core18safe__slice__range(url, 0, qmark) : url;
|
|
5919
|
-
const relative_path = _M0MP311moonbitlang4core6string6String11has__prefix(url_path, { str:
|
|
5920
|
-
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 })) {
|
|
5921
6217
|
_M0FP36kazuph5reviw6server16res__write__head(res, 403, "text/plain");
|
|
5922
6218
|
_M0FP36kazuph5reviw6server8res__end(res, "Forbidden");
|
|
5923
6219
|
return undefined;
|
|
@@ -5934,7 +6230,7 @@ function _M0FP36kazuph5reviw6server19serve__static__file(ctx, url, req, res) {
|
|
|
5934
6230
|
if (_M0FP36kazuph5reviw6server12exists__sync(resolved_static) && _M0FP36kazuph5reviw6server14is__file__sync(resolved_static)) {
|
|
5935
6231
|
const ext = _M0MP311moonbitlang4core6string6String9to__lower(_M0FP36kazuph5reviw6server13path__extname(resolved_static));
|
|
5936
6232
|
const content_type = _M0FP36kazuph5reviw6server15get__mime__type(ext);
|
|
5937
|
-
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 });
|
|
5938
6234
|
const range = _M0FP36kazuph5reviw6server18req__range__header(req);
|
|
5939
6235
|
if (is_video && range.length > 0) {
|
|
5940
6236
|
_M0FP36kazuph5reviw6server17pipe__file__range(resolved_static, res, content_type, range);
|
|
@@ -5952,8 +6248,8 @@ function _M0FP36kazuph5reviw6server19serve__static__file(ctx, url, req, res) {
|
|
|
5952
6248
|
function _M0FP36kazuph5reviw6server25serve__static__file__head(ctx, url, res) {
|
|
5953
6249
|
const qmark = _M0FP36kazuph5reviw6server9index__of(url, 63);
|
|
5954
6250
|
const url_path = qmark >= 0 ? _M0FP36kazuph5reviw4core18safe__slice__range(url, 0, qmark) : url;
|
|
5955
|
-
const relative_path = _M0MP311moonbitlang4core6string6String11has__prefix(url_path, { str:
|
|
5956
|
-
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 })) {
|
|
5957
6253
|
_M0FP36kazuph5reviw6server16res__write__head(res, 403, "text/plain");
|
|
5958
6254
|
_M0FP36kazuph5reviw6server8res__end(res, "");
|
|
5959
6255
|
return undefined;
|
|
@@ -6014,54 +6310,72 @@ function _M0FP36kazuph5reviw6server15handle__request(ctx, req, res) {
|
|
|
6014
6310
|
_M0FP36kazuph5reviw6server8res__end(res, history_json);
|
|
6015
6311
|
return;
|
|
6016
6312
|
} else {
|
|
6017
|
-
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 })) {
|
|
6018
6314
|
_M0FP36kazuph5reviw6server23handle__video__timeline(ctx, url, res);
|
|
6019
6315
|
return;
|
|
6020
6316
|
} else {
|
|
6021
|
-
if (http_method === "POST" && url === "/
|
|
6317
|
+
if (http_method === "POST" && url === "/session/open") {
|
|
6022
6318
|
_M0FP36kazuph5reviw6server10read__body(req, (body) => {
|
|
6023
|
-
|
|
6319
|
+
_M0FP36kazuph5reviw6server21handle__session__open(ctx, body);
|
|
6024
6320
|
_M0FP36kazuph5reviw6server16res__write__head(res, 200, "application/json");
|
|
6025
6321
|
_M0FP36kazuph5reviw6server8res__end(res, "{\"ok\":true}");
|
|
6026
6322
|
});
|
|
6027
6323
|
return;
|
|
6028
6324
|
} else {
|
|
6029
|
-
if (http_method === "
|
|
6030
|
-
|
|
6031
|
-
|
|
6032
|
-
|
|
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
|
+
});
|
|
6033
6339
|
return;
|
|
6034
6340
|
} else {
|
|
6035
|
-
if (
|
|
6036
|
-
|
|
6037
|
-
|
|
6038
|
-
return;
|
|
6039
|
-
} else {
|
|
6040
|
-
if (url === "/ui.js") {
|
|
6041
|
-
_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");
|
|
6042
6344
|
_M0FP36kazuph5reviw6server8res__end(res, "");
|
|
6043
6345
|
return;
|
|
6044
6346
|
} else {
|
|
6045
|
-
if (url === "/
|
|
6347
|
+
if (url === "/healthz") {
|
|
6046
6348
|
_M0FP36kazuph5reviw6server16res__write__head(res, 200, "application/json");
|
|
6047
6349
|
_M0FP36kazuph5reviw6server8res__end(res, "");
|
|
6048
6350
|
return;
|
|
6049
6351
|
} else {
|
|
6050
|
-
|
|
6051
|
-
|
|
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
|
+
}
|
|
6052
6366
|
}
|
|
6053
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
|
+
}
|
|
6054
6377
|
}
|
|
6055
6378
|
}
|
|
6056
|
-
} else {
|
|
6057
|
-
if (http_method === "GET") {
|
|
6058
|
-
_M0FP36kazuph5reviw6server19serve__static__file(ctx, url, req, res);
|
|
6059
|
-
return;
|
|
6060
|
-
} else {
|
|
6061
|
-
_M0FP36kazuph5reviw6server16res__write__head(res, 404, "text/plain");
|
|
6062
|
-
_M0FP36kazuph5reviw6server8res__end(res, "Not Found");
|
|
6063
|
-
return;
|
|
6064
|
-
}
|
|
6065
6379
|
}
|
|
6066
6380
|
}
|
|
6067
6381
|
}
|
|
@@ -6085,13 +6399,13 @@ function _M0FP36kazuph5reviw6server28try__activate__existing__tab(url) {
|
|
|
6085
6399
|
}
|
|
6086
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`;
|
|
6087
6401
|
const chrome_result = _M0FP36kazuph5reviw6server19spawn__sync__result("osascript", `[\"-e\", ${_M0FP36kazuph5reviw6server19json__encode__value(chrome_script)}]`);
|
|
6088
|
-
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 })) {
|
|
6089
6403
|
_M0FP36kazuph5reviw6server12console__log(`Activated existing Chrome tab: ${url}`);
|
|
6090
6404
|
return true;
|
|
6091
6405
|
}
|
|
6092
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`;
|
|
6093
6407
|
const safari_result = _M0FP36kazuph5reviw6server19spawn__sync__result("osascript", `[\"-e\", ${_M0FP36kazuph5reviw6server19json__encode__value(safari_script)}]`);
|
|
6094
|
-
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 })) {
|
|
6095
6409
|
_M0FP36kazuph5reviw6server12console__log(`Activated existing Safari tab: ${url}`);
|
|
6096
6410
|
return true;
|
|
6097
6411
|
}
|
|
@@ -6134,10 +6448,12 @@ function _M0FP36kazuph5reviw6server11try__listen(ctx, port, attempt, no_open) {
|
|
|
6134
6448
|
return;
|
|
6135
6449
|
}
|
|
6136
6450
|
});
|
|
6137
|
-
|
|
6451
|
+
const host = _M0FP36kazuph5reviw6server10bind__host.val;
|
|
6452
|
+
_M0FP36kazuph5reviw6server14server__listen(server, port, host, () => {
|
|
6138
6453
|
ctx.port = port;
|
|
6139
6454
|
_M0FP36kazuph5reviw6server11write__lock(port);
|
|
6140
|
-
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)}`;
|
|
6141
6457
|
_M0FP36kazuph5reviw6server12console__log(`reviw serving ${ctx.filename} at ${url}`);
|
|
6142
6458
|
if (!no_open) {
|
|
6143
6459
|
_M0FP36kazuph5reviw6server13open__browser(url);
|
|
@@ -6167,13 +6483,16 @@ function _M0FP36kazuph5reviw6server19start__http__server(ctx, no_open) {
|
|
|
6167
6483
|
_M0FP36kazuph5reviw6server11try__listen(ctx, ctx.port, 0, no_open);
|
|
6168
6484
|
}
|
|
6169
6485
|
function _M0FP36kazuph5reviw6server11watch__file(_tmp, _tmp$2) {
|
|
6170
|
-
return watchFile$
|
|
6486
|
+
return watchFile$2315(_tmp, _tmp$2);
|
|
6171
6487
|
}
|
|
6172
6488
|
function _M0FP36kazuph5reviw6server19start__file__server(file_path, port, no_open) {
|
|
6173
6489
|
const resolved = _M0FP36kazuph5reviw6server13path__resolve(file_path);
|
|
6174
6490
|
const filename = _M0FP36kazuph5reviw6server14path__basename(resolved);
|
|
6175
6491
|
const mode = _M0FP36kazuph5reviw6server12detect__mode(resolved);
|
|
6176
|
-
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 };
|
|
6177
6496
|
ctx.html_cache = _M0FP36kazuph5reviw6server22load__and__build__html(ctx);
|
|
6178
6497
|
_M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw6server13ServerContextE(_M0FP36kazuph5reviw6server15active__servers, ctx);
|
|
6179
6498
|
const _p = ctx.file_path;
|
|
@@ -6183,13 +6502,13 @@ function _M0FP36kazuph5reviw6server19start__file__server(file_path, port, no_ope
|
|
|
6183
6502
|
_M0FP36kazuph5reviw6server11watch__file(resolved, (_curr, _prev) => {
|
|
6184
6503
|
ctx.html_cache = _M0FP36kazuph5reviw6server22load__and__build__html(ctx);
|
|
6185
6504
|
const _len = clients.length;
|
|
6186
|
-
let _tmp = 0;
|
|
6505
|
+
let _tmp$3 = 0;
|
|
6187
6506
|
while (true) {
|
|
6188
|
-
const _i = _tmp;
|
|
6507
|
+
const _i = _tmp$3;
|
|
6189
6508
|
if (_i < _len) {
|
|
6190
6509
|
const client = clients[_i];
|
|
6191
6510
|
_M0FP36kazuph5reviw6server9sse__send(client, "reload", "");
|
|
6192
|
-
_tmp = _i + 1 | 0;
|
|
6511
|
+
_tmp$3 = _i + 1 | 0;
|
|
6193
6512
|
continue;
|
|
6194
6513
|
} else {
|
|
6195
6514
|
return;
|
|
@@ -6202,7 +6521,10 @@ function _M0FP36kazuph5reviw6server19start__file__server(file_path, port, no_ope
|
|
|
6202
6521
|
function _M0FP36kazuph5reviw6server20start__stdin__server(content, port, no_open) {
|
|
6203
6522
|
const data = _M0FP36kazuph5reviw4core11parse__diff(content);
|
|
6204
6523
|
const html = _M0FP36kazuph5reviw4core17build__diff__html(data, "stdin", port);
|
|
6205
|
-
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 };
|
|
6206
6528
|
_M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw6server13ServerContextE(_M0FP36kazuph5reviw6server15active__servers, ctx);
|
|
6207
6529
|
_M0FP36kazuph5reviw6server15expected__count.val = 1;
|
|
6208
6530
|
_M0FP36kazuph5reviw6server19start__http__server(ctx, no_open);
|
|
@@ -6210,11 +6532,11 @@ function _M0FP36kazuph5reviw6server20start__stdin__server(content, port, no_open
|
|
|
6210
6532
|
(() => {
|
|
6211
6533
|
const argv = _M0FP36kazuph5reviw6server9get__argv();
|
|
6212
6534
|
const args = [];
|
|
6213
|
-
const
|
|
6535
|
+
const _end453 = argv.length;
|
|
6214
6536
|
let _tmp = 2;
|
|
6215
6537
|
while (true) {
|
|
6216
6538
|
const i = _tmp;
|
|
6217
|
-
if (i <
|
|
6539
|
+
if (i < _end453) {
|
|
6218
6540
|
_M0MP311moonbitlang4core5array5Array4pushGsE(args, _M0MP311moonbitlang4core5array5Array2atGsE(argv, i));
|
|
6219
6541
|
_tmp = i + 1 | 0;
|
|
6220
6542
|
continue;
|
|
@@ -6247,14 +6569,21 @@ function _M0FP36kazuph5reviw6server20start__stdin__server(content, port, no_open
|
|
|
6247
6569
|
if (arg === "--no-open") {
|
|
6248
6570
|
no_open = true;
|
|
6249
6571
|
} else {
|
|
6250
|
-
if (arg === "--
|
|
6572
|
+
if (arg === "--host") {
|
|
6251
6573
|
i = i + 1 | 0;
|
|
6252
6574
|
if (i < args.length) {
|
|
6253
|
-
|
|
6575
|
+
_M0FP36kazuph5reviw6server10bind__host.val = _M0MP311moonbitlang4core5array5Array2atGsE(args, i);
|
|
6254
6576
|
}
|
|
6255
6577
|
} else {
|
|
6256
|
-
if (
|
|
6257
|
-
|
|
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
|
+
}
|
|
6258
6587
|
}
|
|
6259
6588
|
}
|
|
6260
6589
|
}
|