@filipc77/cowrite 0.4.27 → 0.4.28
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/package.json +1 -1
- package/ui/client.js +23 -0
- package/ui/index.html +5 -0
- package/ui/styles.css +139 -27
package/package.json
CHANGED
package/ui/client.js
CHANGED
|
@@ -22,6 +22,7 @@ let currentFile = "";
|
|
|
22
22
|
let currentContent = "";
|
|
23
23
|
let ws = null;
|
|
24
24
|
let selectionInfo = null;
|
|
25
|
+
let currentHtml = "";
|
|
25
26
|
|
|
26
27
|
// --- File Picker ---
|
|
27
28
|
|
|
@@ -95,8 +96,10 @@ function connect() {
|
|
|
95
96
|
case "file_update":
|
|
96
97
|
currentFile = msg.file;
|
|
97
98
|
currentContent = msg.content;
|
|
99
|
+
currentHtml = msg.html;
|
|
98
100
|
filePathEl.textContent = msg.file;
|
|
99
101
|
fileContentEl.innerHTML = msg.html;
|
|
102
|
+
renderMermaidDiagrams();
|
|
100
103
|
applyHighlights();
|
|
101
104
|
break;
|
|
102
105
|
case "comments_update":
|
|
@@ -493,6 +496,13 @@ function applyTheme(theme) {
|
|
|
493
496
|
// Update toggle label
|
|
494
497
|
const label = document.querySelector(".toggle-label");
|
|
495
498
|
if (label) label.textContent = theme === "light" ? "Light" : "Dark";
|
|
499
|
+
// Re-render mermaid diagrams with matching theme
|
|
500
|
+
if (window.__mermaid && currentHtml) {
|
|
501
|
+
window.__mermaid.initialize({ startOnLoad: false, theme: theme === "light" ? "default" : "dark" });
|
|
502
|
+
fileContentEl.innerHTML = currentHtml;
|
|
503
|
+
renderMermaidDiagrams();
|
|
504
|
+
applyHighlights();
|
|
505
|
+
}
|
|
496
506
|
}
|
|
497
507
|
|
|
498
508
|
// Load saved preference, default to dark
|
|
@@ -516,5 +526,18 @@ document.addEventListener("selectionchange", () => {
|
|
|
516
526
|
}
|
|
517
527
|
});
|
|
518
528
|
|
|
529
|
+
// --- Mermaid Rendering ---
|
|
530
|
+
|
|
531
|
+
async function renderMermaidDiagrams() {
|
|
532
|
+
if (!window.__mermaid) return;
|
|
533
|
+
const blocks = fileContentEl.querySelectorAll("pre.mermaid");
|
|
534
|
+
if (blocks.length === 0) return;
|
|
535
|
+
try {
|
|
536
|
+
await window.__mermaid.run({ nodes: blocks });
|
|
537
|
+
} catch (err) {
|
|
538
|
+
console.error("Mermaid rendering failed:", err);
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
|
|
519
542
|
// --- Init ---
|
|
520
543
|
connect();
|
package/ui/index.html
CHANGED
|
@@ -64,6 +64,11 @@
|
|
|
64
64
|
</div>
|
|
65
65
|
</div>
|
|
66
66
|
|
|
67
|
+
<script type="module">
|
|
68
|
+
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs';
|
|
69
|
+
mermaid.initialize({ startOnLoad: false, theme: 'dark' });
|
|
70
|
+
window.__mermaid = mermaid;
|
|
71
|
+
</script>
|
|
67
72
|
<script src="client.js"></script>
|
|
68
73
|
</body>
|
|
69
74
|
</html>
|
package/ui/styles.css
CHANGED
|
@@ -302,9 +302,11 @@ main {
|
|
|
302
302
|
}
|
|
303
303
|
|
|
304
304
|
#fileContent {
|
|
305
|
-
max-width:
|
|
305
|
+
max-width: 860px;
|
|
306
306
|
margin: 0 auto;
|
|
307
|
-
|
|
307
|
+
font-size: 16px;
|
|
308
|
+
line-height: 1.5;
|
|
309
|
+
word-wrap: break-word;
|
|
308
310
|
animation: fade-in 0.3s ease;
|
|
309
311
|
}
|
|
310
312
|
|
|
@@ -313,71 +315,160 @@ main {
|
|
|
313
315
|
to { opacity: 1; transform: translateY(0); }
|
|
314
316
|
}
|
|
315
317
|
|
|
316
|
-
/* ---- Markdown styles ---- */
|
|
318
|
+
/* ---- Markdown styles (GitHub-like) ---- */
|
|
319
|
+
.markdown-body {
|
|
320
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif;
|
|
321
|
+
font-size: 16px;
|
|
322
|
+
line-height: 1.5;
|
|
323
|
+
word-wrap: break-word;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
.markdown-body > *:first-child { margin-top: 0; }
|
|
327
|
+
.markdown-body > *:last-child { margin-bottom: 0; }
|
|
328
|
+
|
|
317
329
|
.markdown-body h1, .markdown-body h2, .markdown-body h3,
|
|
318
330
|
.markdown-body h4, .markdown-body h5, .markdown-body h6 {
|
|
319
|
-
margin:
|
|
331
|
+
margin-top: 24px;
|
|
332
|
+
margin-bottom: 16px;
|
|
320
333
|
font-weight: 600;
|
|
321
334
|
color: var(--text);
|
|
322
|
-
line-height: 1.
|
|
323
|
-
letter-spacing: -0.3px;
|
|
335
|
+
line-height: 1.25;
|
|
324
336
|
}
|
|
325
337
|
|
|
326
338
|
.markdown-body h1 {
|
|
327
|
-
font-size:
|
|
339
|
+
font-size: 2em;
|
|
328
340
|
border-bottom: 1px solid var(--border);
|
|
329
|
-
padding-bottom: 0.
|
|
341
|
+
padding-bottom: 0.3em;
|
|
330
342
|
}
|
|
331
343
|
|
|
332
344
|
.markdown-body h2 {
|
|
333
|
-
font-size: 1.
|
|
345
|
+
font-size: 1.5em;
|
|
334
346
|
border-bottom: 1px solid var(--border);
|
|
335
347
|
padding-bottom: 0.3em;
|
|
336
348
|
}
|
|
337
349
|
|
|
338
|
-
.markdown-body h3 { font-size: 1.
|
|
350
|
+
.markdown-body h3 { font-size: 1.25em; }
|
|
351
|
+
.markdown-body h4 { font-size: 1em; }
|
|
352
|
+
.markdown-body h5 { font-size: 0.875em; }
|
|
353
|
+
.markdown-body h6 { font-size: 0.85em; color: var(--text-dim); }
|
|
339
354
|
|
|
340
|
-
.markdown-body p {
|
|
341
|
-
|
|
342
|
-
|
|
355
|
+
.markdown-body p {
|
|
356
|
+
margin-top: 0;
|
|
357
|
+
margin-bottom: 16px;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
.markdown-body ul, .markdown-body ol {
|
|
361
|
+
margin-top: 0;
|
|
362
|
+
margin-bottom: 16px;
|
|
363
|
+
padding-left: 2em;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
.markdown-body li {
|
|
367
|
+
margin-top: 0.25em;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
.markdown-body li + li {
|
|
371
|
+
margin-top: 0.25em;
|
|
372
|
+
}
|
|
343
373
|
|
|
344
374
|
.markdown-body code {
|
|
345
375
|
font-family: var(--font-mono);
|
|
346
|
-
font-size:
|
|
376
|
+
font-size: 85%;
|
|
347
377
|
background: var(--surface-hover);
|
|
348
|
-
padding:
|
|
349
|
-
border-radius:
|
|
350
|
-
border: 1px solid var(--border);
|
|
378
|
+
padding: 0.2em 0.4em;
|
|
379
|
+
border-radius: 6px;
|
|
351
380
|
}
|
|
352
381
|
|
|
353
382
|
.markdown-body pre {
|
|
354
383
|
background: var(--surface);
|
|
355
|
-
padding:
|
|
356
|
-
border-radius:
|
|
384
|
+
padding: 16px;
|
|
385
|
+
border-radius: 6px;
|
|
357
386
|
overflow-x: auto;
|
|
358
|
-
margin:
|
|
387
|
+
margin-top: 0;
|
|
388
|
+
margin-bottom: 16px;
|
|
389
|
+
font-size: 85%;
|
|
390
|
+
line-height: 1.45;
|
|
359
391
|
border: 1px solid var(--border);
|
|
360
392
|
}
|
|
361
393
|
|
|
362
394
|
.markdown-body pre code {
|
|
363
395
|
background: none;
|
|
364
396
|
padding: 0;
|
|
365
|
-
border:
|
|
397
|
+
border-radius: 0;
|
|
398
|
+
font-size: 100%;
|
|
399
|
+
word-break: normal;
|
|
400
|
+
white-space: pre;
|
|
366
401
|
}
|
|
367
402
|
|
|
368
403
|
.markdown-body blockquote {
|
|
369
|
-
border-left:
|
|
370
|
-
padding
|
|
404
|
+
border-left: 0.25em solid var(--border);
|
|
405
|
+
padding: 0 1em;
|
|
371
406
|
color: var(--text-dim);
|
|
372
|
-
margin:
|
|
407
|
+
margin-top: 0;
|
|
408
|
+
margin-bottom: 16px;
|
|
373
409
|
}
|
|
374
410
|
|
|
411
|
+
.markdown-body blockquote > :first-child { margin-top: 0; }
|
|
412
|
+
.markdown-body blockquote > :last-child { margin-bottom: 0; }
|
|
413
|
+
|
|
375
414
|
.markdown-body a { color: var(--accent); text-decoration: none; }
|
|
376
415
|
.markdown-body a:hover { text-decoration: underline; }
|
|
377
416
|
|
|
378
|
-
.markdown-body
|
|
379
|
-
|
|
380
|
-
|
|
417
|
+
.markdown-body img {
|
|
418
|
+
max-width: 100%;
|
|
419
|
+
border-radius: 6px;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
.markdown-body hr {
|
|
423
|
+
height: 0.25em;
|
|
424
|
+
padding: 0;
|
|
425
|
+
margin: 24px 0;
|
|
426
|
+
background: var(--border);
|
|
427
|
+
border: 0;
|
|
428
|
+
border-radius: 2px;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
.markdown-body table {
|
|
432
|
+
border-collapse: collapse;
|
|
433
|
+
border-spacing: 0;
|
|
434
|
+
margin-top: 0;
|
|
435
|
+
margin-bottom: 16px;
|
|
436
|
+
width: auto;
|
|
437
|
+
display: block;
|
|
438
|
+
overflow-x: auto;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
.markdown-body th, .markdown-body td {
|
|
442
|
+
border: 1px solid var(--border);
|
|
443
|
+
padding: 6px 13px;
|
|
444
|
+
text-align: left;
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
.markdown-body th {
|
|
448
|
+
font-weight: 600;
|
|
449
|
+
background: var(--surface);
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
.markdown-body tr:nth-child(2n) {
|
|
453
|
+
background: var(--bg-subtle);
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
.markdown-body dl {
|
|
457
|
+
padding: 0;
|
|
458
|
+
margin-bottom: 16px;
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
.markdown-body dl dt {
|
|
462
|
+
font-weight: 600;
|
|
463
|
+
margin-top: 16px;
|
|
464
|
+
padding: 0;
|
|
465
|
+
font-size: 1em;
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
.markdown-body dl dd {
|
|
469
|
+
padding: 0 16px;
|
|
470
|
+
margin-bottom: 16px;
|
|
471
|
+
}
|
|
381
472
|
|
|
382
473
|
/* Plain text */
|
|
383
474
|
.plain-text {
|
|
@@ -838,3 +929,24 @@ main {
|
|
|
838
929
|
[data-theme="light"] ::selection {
|
|
839
930
|
background: rgba(176, 125, 46, 0.2);
|
|
840
931
|
}
|
|
932
|
+
|
|
933
|
+
/* ---- Mermaid diagrams ---- */
|
|
934
|
+
.mermaid-container {
|
|
935
|
+
margin: 1.2em 0;
|
|
936
|
+
user-select: none;
|
|
937
|
+
-webkit-user-select: none;
|
|
938
|
+
}
|
|
939
|
+
|
|
940
|
+
.mermaid-container pre.mermaid {
|
|
941
|
+
background: var(--surface);
|
|
942
|
+
border: 1px solid var(--border);
|
|
943
|
+
border-radius: var(--radius-md);
|
|
944
|
+
padding: 20px;
|
|
945
|
+
display: flex;
|
|
946
|
+
justify-content: center;
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
.mermaid-container svg {
|
|
950
|
+
max-width: 100%;
|
|
951
|
+
height: auto;
|
|
952
|
+
}
|