@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@filipc77/cowrite",
3
- "version": "0.4.27",
3
+ "version": "0.4.28",
4
4
  "description": "Live commenting plugin for coding agent sessions",
5
5
  "type": "module",
6
6
  "bin": {
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: 760px;
305
+ max-width: 860px;
306
306
  margin: 0 auto;
307
- line-height: 1.8;
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: 1.5em 0 0.6em;
331
+ margin-top: 24px;
332
+ margin-bottom: 16px;
320
333
  font-weight: 600;
321
334
  color: var(--text);
322
- line-height: 1.3;
323
- letter-spacing: -0.3px;
335
+ line-height: 1.25;
324
336
  }
325
337
 
326
338
  .markdown-body h1 {
327
- font-size: 1.75em;
339
+ font-size: 2em;
328
340
  border-bottom: 1px solid var(--border);
329
- padding-bottom: 0.4em;
341
+ padding-bottom: 0.3em;
330
342
  }
331
343
 
332
344
  .markdown-body h2 {
333
- font-size: 1.35em;
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.15em; }
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 { margin: 0.8em 0; }
341
- .markdown-body ul, .markdown-body ol { margin: 0.8em 0; padding-left: 2em; }
342
- .markdown-body li { margin: 0.3em 0; }
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: 0.85em;
376
+ font-size: 85%;
347
377
  background: var(--surface-hover);
348
- padding: 2px 8px;
349
- border-radius: 5px;
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: 20px;
356
- border-radius: var(--radius-md);
384
+ padding: 16px;
385
+ border-radius: 6px;
357
386
  overflow-x: auto;
358
- margin: 1.2em 0;
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: none;
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: 3px solid var(--accent);
370
- padding-left: 16px;
404
+ border-left: 0.25em solid var(--border);
405
+ padding: 0 1em;
371
406
  color: var(--text-dim);
372
- margin: 1em 0;
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 table { border-collapse: collapse; margin: 1em 0; width: 100%; }
379
- .markdown-body th, .markdown-body td { border: 1px solid var(--border); padding: 8px 12px; text-align: left; }
380
- .markdown-body th { background: var(--surface); }
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
+ }