collabmd 0.1.18 → 0.1.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/README.md +99 -17
  2. package/package.json +1 -1
  3. package/public/assets/css/style.css +1 -1
  4. package/public/assets/js/chunks/{preview-render-compiler-WD3A76I6.js → chunk-5QRWYPYT.js} +18 -18
  5. package/public/assets/js/chunks/chunk-HEWVH67U.js +9 -0
  6. package/public/assets/js/chunks/chunk-R3DDMJHH.js +1 -0
  7. package/public/assets/js/chunks/editor-session-AH6Z3MXW.js +22 -0
  8. package/public/assets/js/chunks/preview-render-compiler-UZ4SZDQQ.js +1 -0
  9. package/public/assets/js/chunks/quick-switcher-controller-J7I3CUET.js +5 -0
  10. package/public/assets/js/{excalidraw-editor-LKW2AZBU.js → excalidraw-editor-ZDYKMZOL.js} +33 -33
  11. package/public/assets/js/excalidraw-editor.js +1 -1
  12. package/public/assets/js/main.js +59 -59
  13. package/public/assets/js/preview-render-worker.js +19 -19
  14. package/src/client/application/app-shell/presence-feature.js +2 -1
  15. package/src/client/application/app-shell/ui-feature.js +113 -1
  16. package/src/client/application/app-shell/workspace-feature.js +9 -0
  17. package/src/client/application/preview-render-compiler.js +55 -5
  18. package/src/client/application/preview-render-executor.js +8 -0
  19. package/src/client/application/preview-render-worker.js +13 -2
  20. package/src/client/application/preview-renderer.js +5 -0
  21. package/src/client/application/workspace-chrome-controller.js +12 -1
  22. package/src/client/application/workspace-coordinator.js +16 -7
  23. package/src/client/application/workspace-preview-controller.js +45 -5
  24. package/src/client/application/workspace-route-controller.js +4 -0
  25. package/src/client/bootstrap/collabmd-app-shell.js +15 -3
  26. package/src/client/domain/room.js +37 -0
  27. package/src/client/domain/vault-utils.js +46 -0
  28. package/src/client/infrastructure/comment-thread-store.js +98 -0
  29. package/src/client/infrastructure/editor-paste-utils.js +45 -0
  30. package/src/client/infrastructure/editor-session.js +10 -0
  31. package/src/client/infrastructure/editor-view-adapter.js +34 -1
  32. package/src/client/infrastructure/vault-api-client.js +17 -0
  33. package/src/client/presentation/comment-markdown-renderer.js +68 -0
  34. package/src/client/presentation/comment-ui-controller.js +311 -15
  35. package/src/client/presentation/file-explorer-controller.js +5 -0
  36. package/src/client/presentation/file-explorer-view.js +10 -2
  37. package/src/client/presentation/file-tree-state.js +7 -1
  38. package/src/client/presentation/image-lightbox-controller.js +394 -0
  39. package/src/client/styles/style.css +539 -14
  40. package/src/domain/comment-threads.js +95 -13
  41. package/src/domain/file-kind.js +16 -1
  42. package/src/server/infrastructure/http/create-vault-api-command-handler.js +48 -2
  43. package/src/server/infrastructure/http/create-vault-api-query-handler.js +67 -1
  44. package/src/server/infrastructure/http/request-body.js +11 -2
  45. package/src/server/infrastructure/persistence/path-utils.js +1 -1
  46. package/src/server/infrastructure/persistence/vault-file-store.js +187 -2
  47. package/public/assets/js/chunks/chunk-BBHPYU2R.js +0 -1
  48. package/public/assets/js/chunks/chunk-OG2TNZEU.js +0 -9
  49. package/public/assets/js/chunks/chunk-QSTBGTWJ.js +0 -1
  50. package/public/assets/js/chunks/chunk-SR3U53EQ.js +0 -1
  51. package/public/assets/js/chunks/editor-session-IHFTYG5D.js +0 -22
  52. package/public/assets/js/chunks/quick-switcher-controller-JYDIJVAJ.js +0 -5
@@ -2310,6 +2310,17 @@ html[data-initial-file-requested="true"] .editor-page.hidden {
2310
2310
  max-width: none;
2311
2311
  }
2312
2312
 
2313
+ .preview-content.is-image-file-preview {
2314
+ display: flex;
2315
+ width: 100%;
2316
+ min-height: 100%;
2317
+ margin: 0;
2318
+ padding: var(--space-4);
2319
+ position: relative;
2320
+ box-sizing: border-box;
2321
+ max-width: none;
2322
+ }
2323
+
2313
2324
  .preview-content.is-plantuml-file-preview {
2314
2325
  width: 100%;
2315
2326
  min-height: 100%;
@@ -2337,6 +2348,31 @@ html[data-initial-file-requested="true"] .editor-page.hidden {
2337
2348
  min-height: 100%;
2338
2349
  }
2339
2350
 
2351
+ .preview-content.is-image-file-preview [data-preview-render-host="true"] {
2352
+ display: flex;
2353
+ flex: 1;
2354
+ min-width: 0;
2355
+ min-height: 100%;
2356
+ }
2357
+
2358
+ .image-file-preview-shell {
2359
+ width: 100%;
2360
+ min-height: 100%;
2361
+ margin: 0;
2362
+ display: flex;
2363
+ align-items: center;
2364
+ justify-content: center;
2365
+ }
2366
+
2367
+ .image-file-preview-image {
2368
+ max-width: min(100%, 1200px);
2369
+ max-height: calc(100vh - 180px);
2370
+ object-fit: contain;
2371
+ border-radius: var(--radius-lg);
2372
+ box-shadow: var(--shadow-lg);
2373
+ background: var(--color-surface);
2374
+ }
2375
+
2340
2376
  .preview-content.is-mermaid-file-preview .mermaid-shell {
2341
2377
  margin: 0;
2342
2378
  min-height: 100%;
@@ -2590,6 +2626,163 @@ html[data-initial-file-requested="true"] .editor-page.hidden {
2590
2626
  height: auto;
2591
2627
  border-radius: var(--radius-md);
2592
2628
  margin: var(--space-4) 0;
2629
+ cursor: zoom-in;
2630
+ }
2631
+
2632
+ .image-lightbox-root {
2633
+ position: fixed;
2634
+ inset: 0;
2635
+ z-index: 220;
2636
+ display: grid;
2637
+ place-items: center;
2638
+ pointer-events: auto;
2639
+ }
2640
+
2641
+ .image-lightbox-root[hidden] {
2642
+ display: none !important;
2643
+ }
2644
+
2645
+ .image-lightbox-backdrop {
2646
+ position: absolute;
2647
+ inset: 0;
2648
+ border: none;
2649
+ background: oklch(0.08 0.01 260 / 0.82);
2650
+ backdrop-filter: blur(10px);
2651
+ cursor: zoom-out;
2652
+ }
2653
+
2654
+ .image-lightbox-shell {
2655
+ position: absolute;
2656
+ inset: 0;
2657
+ z-index: 1;
2658
+ }
2659
+
2660
+ .image-lightbox-toolbar {
2661
+ position: absolute;
2662
+ top: var(--space-5);
2663
+ left: var(--space-5);
2664
+ right: var(--space-5);
2665
+ z-index: 2;
2666
+ display: flex;
2667
+ align-items: center;
2668
+ justify-content: space-between;
2669
+ gap: var(--space-3);
2670
+ pointer-events: none;
2671
+ }
2672
+
2673
+ .image-lightbox-title {
2674
+ min-width: 0;
2675
+ font-size: var(--text-xs);
2676
+ font-weight: 600;
2677
+ color: white;
2678
+ overflow: hidden;
2679
+ text-overflow: ellipsis;
2680
+ white-space: nowrap;
2681
+ padding: 8px 12px;
2682
+ border-radius: 999px;
2683
+ background: oklch(0.18 0.02 260 / 0.68);
2684
+ backdrop-filter: blur(12px);
2685
+ box-shadow: 0 16px 40px oklch(0 0 0 / 0.24);
2686
+ pointer-events: auto;
2687
+ }
2688
+
2689
+ .image-lightbox-controls {
2690
+ display: inline-flex;
2691
+ align-items: center;
2692
+ gap: var(--space-2);
2693
+ flex-wrap: wrap;
2694
+ justify-content: flex-end;
2695
+ pointer-events: auto;
2696
+ }
2697
+
2698
+ .image-lightbox-btn {
2699
+ min-width: 0;
2700
+ padding: 8px 12px;
2701
+ border: none;
2702
+ border-radius: 999px;
2703
+ background: oklch(0.18 0.02 260 / 0.68);
2704
+ color: white;
2705
+ font-size: var(--text-xs);
2706
+ font-weight: 600;
2707
+ backdrop-filter: blur(12px);
2708
+ box-shadow: 0 16px 40px oklch(0 0 0 / 0.24);
2709
+ transition: background 0.18s ease, transform 0.18s ease;
2710
+ }
2711
+
2712
+ .image-lightbox-btn:hover:not(:disabled) {
2713
+ background: oklch(0.24 0.02 260 / 0.82);
2714
+ }
2715
+
2716
+ .image-lightbox-btn:disabled {
2717
+ opacity: 0.45;
2718
+ cursor: default;
2719
+ }
2720
+
2721
+ .image-lightbox-zoom-label {
2722
+ min-width: 58px;
2723
+ padding: 8px 12px;
2724
+ border-radius: 999px;
2725
+ background: oklch(0.18 0.02 260 / 0.68);
2726
+ color: white;
2727
+ font-size: var(--text-xs);
2728
+ font-weight: 600;
2729
+ font-variant-numeric: tabular-nums;
2730
+ text-align: center;
2731
+ backdrop-filter: blur(12px);
2732
+ box-shadow: 0 16px 40px oklch(0 0 0 / 0.24);
2733
+ }
2734
+
2735
+ .image-lightbox-viewport {
2736
+ position: absolute;
2737
+ inset: 0;
2738
+ overflow: hidden;
2739
+ touch-action: none;
2740
+ user-select: none;
2741
+ }
2742
+
2743
+ .image-lightbox-viewport.is-dragging .image-lightbox-image {
2744
+ cursor: grabbing !important;
2745
+ }
2746
+
2747
+ .image-lightbox-image {
2748
+ position: absolute;
2749
+ inset: 0;
2750
+ margin: auto;
2751
+ max-width: calc(100vw - (var(--space-8) * 2));
2752
+ max-height: calc(100vh - (var(--space-8) * 2));
2753
+ width: auto;
2754
+ height: auto;
2755
+ object-fit: contain;
2756
+ transform-origin: center center;
2757
+ will-change: transform;
2758
+ box-shadow: 0 28px 80px oklch(0 0 0 / 0.28);
2759
+ }
2760
+
2761
+ body.image-lightbox-open {
2762
+ overflow: hidden;
2763
+ }
2764
+
2765
+ @media (max-width: 768px) {
2766
+ .image-lightbox-toolbar {
2767
+ top: var(--space-3);
2768
+ left: var(--space-3);
2769
+ right: var(--space-3);
2770
+ align-items: flex-start;
2771
+ flex-direction: column;
2772
+ }
2773
+
2774
+ .image-lightbox-controls {
2775
+ justify-content: flex-start;
2776
+ }
2777
+
2778
+ .image-lightbox-btn {
2779
+ flex: 0 0 auto;
2780
+ }
2781
+
2782
+ .image-lightbox-image {
2783
+ max-width: calc(100vw - (var(--space-4) * 2));
2784
+ max-height: calc(100vh - (var(--space-4) * 2));
2785
+ }
2593
2786
  }
2594
2787
 
2595
2788
  .preview-content .video-embed-shell {
@@ -2923,13 +3116,29 @@ body.plantuml-maximized-open::before {
2923
3116
  font-family: var(--font-mono);
2924
3117
  font-size: 11.5px;
2925
3118
  line-height: 1.65;
2926
- white-space: pre;
2927
- overflow-x: auto;
2928
- overflow-y: hidden;
2929
- word-break: normal;
2930
- text-wrap: nowrap;
3119
+ white-space: pre-wrap;
3120
+ overflow: auto;
3121
+ overflow-wrap: anywhere;
3122
+ word-break: break-word;
3123
+ max-height: 9.5rem;
2931
3124
  scrollbar-width: thin;
2932
- padding-bottom: calc(var(--space-2) + 2px);
3125
+ padding-bottom: calc(var(--space-3) + 2px);
3126
+ }
3127
+
3128
+ .comments-drawer-item-preview {
3129
+ position: relative;
3130
+ max-height: 7.8rem;
3131
+ overflow: hidden;
3132
+ color: var(--color-text-muted);
3133
+ }
3134
+
3135
+ .comments-drawer-item-preview:after {
3136
+ content: "";
3137
+ position: absolute;
3138
+ inset: auto 0 0 0;
3139
+ height: 2.5rem;
3140
+ background: linear-gradient(180deg, oklch(0 0 0 / 0), color-mix(in srgb, var(--color-surface-2) 95%, var(--color-comment) 5%));
3141
+ pointer-events: none;
2933
3142
  }
2934
3143
 
2935
3144
  .comments-drawer-item-footer {
@@ -2937,6 +3146,12 @@ body.plantuml-maximized-open::before {
2937
3146
  color: var(--color-text-muted);
2938
3147
  font-weight: 600;
2939
3148
  letter-spacing: 0.01em;
3149
+ align-items: flex-end;
3150
+ flex-wrap: wrap;
3151
+ }
3152
+
3153
+ .comments-drawer-item-updated {
3154
+ color: var(--color-text-faint);
2940
3155
  }
2941
3156
 
2942
3157
  .comment-editor-layer,
@@ -3029,7 +3244,7 @@ body.plantuml-maximized-open::before {
3029
3244
  }
3030
3245
 
3031
3246
  .comment-card {
3032
- width: min(100%, 360px);
3247
+ width: min(100%, 520px);
3033
3248
  border-radius: 18px;
3034
3249
  border: 1px solid color-mix(in srgb, var(--color-border) 82%, var(--color-comment) 18%);
3035
3250
  background: color-mix(in srgb, var(--color-surface) 94%, var(--color-comment) 6%);
@@ -3038,6 +3253,8 @@ body.plantuml-maximized-open::before {
3038
3253
  display: flex;
3039
3254
  flex-direction: column;
3040
3255
  gap: var(--space-3);
3256
+ max-height: min(78vh, 720px);
3257
+ overflow: hidden;
3041
3258
  animation: comment-card-in 140ms cubic-bezier(0.16, 1, 0.3, 1);
3042
3259
  }
3043
3260
 
@@ -3056,6 +3273,19 @@ body.plantuml-maximized-open::before {
3056
3273
  justify-content: space-between;
3057
3274
  }
3058
3275
 
3276
+ .comment-card-header {
3277
+ flex-shrink: 0;
3278
+ }
3279
+
3280
+ .comment-card-scroll {
3281
+ display: flex;
3282
+ flex-direction: column;
3283
+ gap: var(--space-3);
3284
+ min-height: 0;
3285
+ overflow: auto;
3286
+ padding-right: 2px;
3287
+ }
3288
+
3059
3289
  .comment-card-title {
3060
3290
  font-size: 15px;
3061
3291
  font-weight: 700;
@@ -3110,15 +3340,15 @@ body.plantuml-maximized-open::before {
3110
3340
  }
3111
3341
 
3112
3342
  .comment-card-quote {
3113
- white-space: pre;
3114
- overflow-x: auto;
3115
- overflow-y: hidden;
3116
- word-break: normal;
3117
- text-wrap: nowrap;
3343
+ white-space: pre-wrap;
3344
+ overflow: auto;
3345
+ overflow-wrap: anywhere;
3346
+ word-break: break-word;
3118
3347
  font-family: var(--font-mono);
3119
3348
  font-size: 11.5px;
3120
3349
  line-height: 1.65;
3121
- padding-bottom: calc(var(--space-2) + 2px);
3350
+ max-height: 11rem;
3351
+ padding-bottom: calc(var(--space-3) + 2px);
3122
3352
  scrollbar-width: thin;
3123
3353
  }
3124
3354
 
@@ -3137,11 +3367,24 @@ body.plantuml-maximized-open::before {
3137
3367
  .comment-thread-card {
3138
3368
  display: flex;
3139
3369
  flex-direction: column;
3140
- gap: var(--space-2);
3370
+ gap: var(--space-3);
3141
3371
  padding-top: var(--space-3);
3142
3372
  border-top: 1px solid var(--color-divider);
3143
3373
  }
3144
3374
 
3375
+ .comment-thread-card-header {
3376
+ align-items: flex-start;
3377
+ flex-wrap: wrap;
3378
+ }
3379
+
3380
+ .comment-thread-card-heading {
3381
+ display: flex;
3382
+ flex: 1 1 160px;
3383
+ flex-wrap: wrap;
3384
+ gap: var(--space-1) var(--space-2);
3385
+ min-width: 0;
3386
+ }
3387
+
3145
3388
  .comment-thread-card-author,
3146
3389
  .comment-message-card-author {
3147
3390
  font-size: 12px;
@@ -3156,8 +3399,10 @@ body.plantuml-maximized-open::before {
3156
3399
 
3157
3400
  .comment-thread-card-actions {
3158
3401
  display: inline-flex;
3402
+ flex-wrap: wrap;
3159
3403
  gap: var(--space-1);
3160
3404
  margin-left: auto;
3405
+ justify-content: flex-end;
3161
3406
  }
3162
3407
 
3163
3408
  .comment-message-card {
@@ -3170,6 +3415,246 @@ body.plantuml-maximized-open::before {
3170
3415
  .comment-message-card-body {
3171
3416
  margin-top: var(--space-1);
3172
3417
  font-size: 12px;
3418
+ line-height: 1.65;
3419
+ }
3420
+
3421
+ .comment-reaction-bar {
3422
+ display: flex;
3423
+ align-items: flex-start;
3424
+ justify-content: space-between;
3425
+ gap: var(--space-2);
3426
+ flex-wrap: wrap;
3427
+ margin-top: var(--space-2);
3428
+ }
3429
+
3430
+ .comment-reaction-chips {
3431
+ display: flex;
3432
+ flex-wrap: wrap;
3433
+ gap: var(--space-2);
3434
+ }
3435
+
3436
+ .comment-reaction-actions {
3437
+ display: flex;
3438
+ align-items: center;
3439
+ flex-wrap: wrap;
3440
+ gap: var(--space-2);
3441
+ }
3442
+
3443
+ .comment-reaction-chip,
3444
+ .comment-reaction-more-trigger {
3445
+ display: inline-flex;
3446
+ align-items: center;
3447
+ justify-content: center;
3448
+ gap: 6px;
3449
+ min-height: 30px;
3450
+ padding: 4px 10px;
3451
+ border-radius: var(--radius-full);
3452
+ border: 1px solid color-mix(in srgb, var(--color-divider) 88%, var(--color-comment) 12%);
3453
+ background: color-mix(in srgb, var(--color-surface) 90%, var(--color-comment) 10%);
3454
+ color: var(--color-text-muted);
3455
+ font-size: 11px;
3456
+ font-weight: 600;
3457
+ transition: background var(--transition-interactive), border-color var(--transition-interactive), color var(--transition-interactive), transform 140ms ease;
3458
+ }
3459
+
3460
+ .comment-reaction-chip:hover,
3461
+ .comment-reaction-more-trigger:hover {
3462
+ color: var(--color-text);
3463
+ border-color: oklch(from var(--color-comment) l c h / 0.22);
3464
+ background: color-mix(in srgb, var(--color-surface-offset) 76%, var(--color-comment) 24%);
3465
+ }
3466
+
3467
+ .comment-reaction-chip.is-active {
3468
+ color: var(--color-comment);
3469
+ border-color: oklch(from var(--color-comment) l c h / 0.28);
3470
+ background: color-mix(in srgb, var(--color-surface-offset) 64%, var(--color-comment) 36%);
3471
+ }
3472
+
3473
+ .comment-reaction-chip-emoji,
3474
+ .comment-reaction-chip-count {
3475
+ line-height: 1;
3476
+ }
3477
+
3478
+ .comment-reaction-quick-add,
3479
+ .comment-reaction-picker-btn {
3480
+ display: inline-flex;
3481
+ align-items: center;
3482
+ justify-content: center;
3483
+ min-width: 34px;
3484
+ min-height: 34px;
3485
+ padding: 0;
3486
+ border-radius: var(--radius-md);
3487
+ border: 1px solid color-mix(in srgb, var(--color-divider) 88%, var(--color-comment) 12%);
3488
+ background: color-mix(in srgb, var(--color-surface-2) 92%, var(--color-comment) 8%);
3489
+ font-size: 18px;
3490
+ transition: background var(--transition-interactive), border-color var(--transition-interactive), transform 140ms ease;
3491
+ }
3492
+
3493
+ .comment-reaction-quick-add:hover,
3494
+ .comment-reaction-picker-btn:hover {
3495
+ border-color: oklch(from var(--color-comment) l c h / 0.24);
3496
+ background: color-mix(in srgb, var(--color-surface-offset) 78%, var(--color-comment) 22%);
3497
+ transform: translateY(-1px);
3498
+ }
3499
+
3500
+ .comment-reaction-picker-wrap {
3501
+ position: relative;
3502
+ display: inline-flex;
3503
+ }
3504
+
3505
+ .comment-reaction-picker {
3506
+ position: absolute;
3507
+ top: calc(100% + 8px);
3508
+ right: 0;
3509
+ z-index: 2;
3510
+ min-width: 220px;
3511
+ display: flex;
3512
+ flex-direction: column;
3513
+ gap: var(--space-2);
3514
+ padding: var(--space-3);
3515
+ border-radius: var(--radius-lg);
3516
+ border: 1px solid color-mix(in srgb, var(--color-border) 82%, var(--color-comment) 18%);
3517
+ background: color-mix(in srgb, var(--color-surface) 96%, var(--color-comment) 4%);
3518
+ box-shadow: var(--shadow-lg);
3519
+ overflow: auto;
3520
+ scrollbar-width: thin;
3521
+ }
3522
+
3523
+ .comment-reaction-picker.is-upward {
3524
+ top: auto;
3525
+ bottom: calc(100% + 8px);
3526
+ }
3527
+
3528
+ .comment-reaction-picker-grid {
3529
+ display: grid;
3530
+ grid-template-columns: repeat(5, minmax(0, 1fr));
3531
+ gap: var(--space-2);
3532
+ }
3533
+
3534
+ .comment-markdown {
3535
+ color: var(--color-text);
3536
+ font-size: 12px;
3537
+ line-height: 1.65;
3538
+ }
3539
+
3540
+ .comment-markdown > :first-child {
3541
+ margin-top: 0;
3542
+ }
3543
+
3544
+ .comment-markdown > :last-child {
3545
+ margin-bottom: 0;
3546
+ }
3547
+
3548
+ .comment-markdown p,
3549
+ .comment-markdown ul,
3550
+ .comment-markdown ol,
3551
+ .comment-markdown blockquote,
3552
+ .comment-markdown pre,
3553
+ .comment-markdown .comment-markdown-table,
3554
+ .comment-markdown table {
3555
+ max-width: none;
3556
+ }
3557
+
3558
+ .comment-markdown p,
3559
+ .comment-markdown ul,
3560
+ .comment-markdown ol,
3561
+ .comment-markdown blockquote,
3562
+ .comment-markdown pre,
3563
+ .comment-markdown .comment-markdown-table {
3564
+ margin: var(--space-2) 0;
3565
+ }
3566
+
3567
+ .comment-markdown li + li {
3568
+ margin-top: 4px;
3569
+ }
3570
+
3571
+ .comment-markdown ul,
3572
+ .comment-markdown ol {
3573
+ padding-left: var(--space-5);
3574
+ }
3575
+
3576
+ .comment-markdown a {
3577
+ color: var(--color-primary);
3578
+ overflow-wrap: anywhere;
3579
+ text-decoration: underline;
3580
+ }
3581
+
3582
+ .comment-markdown blockquote {
3583
+ padding: var(--space-2) var(--space-3);
3584
+ border-left: 3px solid oklch(from var(--color-comment) l c h / 0.45);
3585
+ border-radius: 0 var(--radius-md) var(--radius-md) 0;
3586
+ background: color-mix(in srgb, var(--color-surface-offset) 84%, var(--color-comment) 16%);
3587
+ color: var(--color-text-muted);
3588
+ }
3589
+
3590
+ .comment-markdown code {
3591
+ font-family: var(--font-mono);
3592
+ font-size: 0.9em;
3593
+ background: color-mix(in srgb, var(--color-surface-offset) 88%, var(--color-comment) 12%);
3594
+ padding: 2px 6px;
3595
+ border-radius: var(--radius-sm);
3596
+ color: var(--color-primary);
3597
+ }
3598
+
3599
+ .comment-markdown pre {
3600
+ border-radius: var(--radius-lg);
3601
+ overflow: auto;
3602
+ border: 1px solid color-mix(in srgb, var(--color-divider) 88%, var(--color-comment) 12%);
3603
+ background: color-mix(in srgb, var(--color-surface) 96%, var(--color-comment) 4%);
3604
+ max-width: 100%;
3605
+ }
3606
+
3607
+ .comment-markdown pre code {
3608
+ display: block;
3609
+ padding: var(--space-3);
3610
+ background: none;
3611
+ color: var(--color-text);
3612
+ font-size: 12px;
3613
+ line-height: 1.6;
3614
+ white-space: pre;
3615
+ width: max-content;
3616
+ min-width: 100%;
3617
+ }
3618
+
3619
+ .comment-markdown .comment-markdown-table {
3620
+ border: 1px solid color-mix(in srgb, var(--color-divider) 88%, var(--color-comment) 12%);
3621
+ border-radius: var(--radius-md);
3622
+ overflow: auto;
3623
+ }
3624
+
3625
+ .comment-markdown table {
3626
+ width: 100%;
3627
+ border-collapse: collapse;
3628
+ }
3629
+
3630
+ .comment-markdown th,
3631
+ .comment-markdown td {
3632
+ padding: var(--space-2) var(--space-3);
3633
+ text-align: left;
3634
+ border-bottom: 1px solid var(--color-divider);
3635
+ font-size: 12px;
3636
+ }
3637
+
3638
+ .comment-markdown th {
3639
+ background: color-mix(in srgb, var(--color-surface-offset) 90%, var(--color-comment) 10%);
3640
+ }
3641
+
3642
+ .comment-markdown-preview > :not(pre):not(blockquote):not(.comment-markdown-table) {
3643
+ display: -webkit-box;
3644
+ -webkit-box-orient: vertical;
3645
+ -webkit-line-clamp: 4;
3646
+ overflow: hidden;
3647
+ }
3648
+
3649
+ .comment-markdown-preview pre code {
3650
+ max-height: 6.6rem;
3651
+ min-width: 0;
3652
+ width: 100%;
3653
+ overflow: hidden;
3654
+ }
3655
+
3656
+ .comment-markdown-preview .comment-markdown-table {
3657
+ display: none;
3173
3658
  }
3174
3659
 
3175
3660
  @keyframes comment-card-in {
@@ -3410,6 +3895,9 @@ body.plantuml-maximized-open::before {
3410
3895
  .editor-layout[data-view="preview"] .preview-content.is-excalidraw-file-preview {
3411
3896
  max-width: none;
3412
3897
  }
3898
+ .editor-layout[data-view="preview"] .preview-content.is-image-file-preview {
3899
+ max-width: none;
3900
+ }
3413
3901
  .editor-layout[data-view="preview"] .preview-content.is-mermaid-file-preview {
3414
3902
  max-width: none;
3415
3903
  }
@@ -3631,6 +4119,23 @@ body.plantuml-maximized-open::before {
3631
4119
  .chat-send-btn {
3632
4120
  padding-inline: var(--space-3);
3633
4121
  }
4122
+
4123
+ .comment-card {
4124
+ width: min(100vw - 32px, 520px);
4125
+ max-height: min(72vh, 680px);
4126
+ }
4127
+
4128
+ .comment-thread-card-actions {
4129
+ width: 100%;
4130
+ margin-left: 0;
4131
+ justify-content: flex-start;
4132
+ }
4133
+
4134
+ .comment-reaction-picker {
4135
+ left: 0;
4136
+ right: auto;
4137
+ min-width: min(240px, calc(100vw - 64px));
4138
+ }
3634
4139
  }
3635
4140
 
3636
4141
  @media (min-width: 769px) {
@@ -3655,8 +4160,12 @@ body.plantuml-maximized-open::before {
3655
4160
  .git-panel,
3656
4161
  .diff-scroll,
3657
4162
  .comments-drawer-list,
4163
+ .comments-drawer-item-quote,
3658
4164
  .comment-card-quote,
4165
+ .comment-card-scroll,
3659
4166
  .markdown-toolbar,
4167
+ .comment-markdown pre,
4168
+ .comment-markdown .comment-markdown-table,
3660
4169
  .preview-content pre,
3661
4170
  .preview-content .table-wrapper,
3662
4171
  .preview-content .mermaid-frame,
@@ -3672,8 +4181,12 @@ body.plantuml-maximized-open::before {
3672
4181
  .git-panel::-webkit-scrollbar,
3673
4182
  .diff-scroll::-webkit-scrollbar,
3674
4183
  .comments-drawer-list::-webkit-scrollbar,
4184
+ .comments-drawer-item-quote::-webkit-scrollbar,
3675
4185
  .comment-card-quote::-webkit-scrollbar,
4186
+ .comment-card-scroll::-webkit-scrollbar,
3676
4187
  .markdown-toolbar::-webkit-scrollbar,
4188
+ .comment-markdown pre::-webkit-scrollbar,
4189
+ .comment-markdown .comment-markdown-table::-webkit-scrollbar,
3677
4190
  .preview-content pre::-webkit-scrollbar,
3678
4191
  .preview-content .table-wrapper::-webkit-scrollbar,
3679
4192
  .preview-content .mermaid-frame::-webkit-scrollbar,
@@ -3688,8 +4201,12 @@ body.plantuml-maximized-open::before {
3688
4201
  .git-panel::-webkit-scrollbar-track,
3689
4202
  .diff-scroll::-webkit-scrollbar-track,
3690
4203
  .comments-drawer-list::-webkit-scrollbar-track,
4204
+ .comments-drawer-item-quote::-webkit-scrollbar-track,
3691
4205
  .comment-card-quote::-webkit-scrollbar-track,
4206
+ .comment-card-scroll::-webkit-scrollbar-track,
3692
4207
  .markdown-toolbar::-webkit-scrollbar-track,
4208
+ .comment-markdown pre::-webkit-scrollbar-track,
4209
+ .comment-markdown .comment-markdown-table::-webkit-scrollbar-track,
3693
4210
  .preview-content pre::-webkit-scrollbar-track,
3694
4211
  .preview-content .table-wrapper::-webkit-scrollbar-track,
3695
4212
  .preview-content .mermaid-frame::-webkit-scrollbar-track,
@@ -3703,8 +4220,12 @@ body.plantuml-maximized-open::before {
3703
4220
  .git-panel::-webkit-scrollbar-thumb,
3704
4221
  .diff-scroll::-webkit-scrollbar-thumb,
3705
4222
  .comments-drawer-list::-webkit-scrollbar-thumb,
4223
+ .comments-drawer-item-quote::-webkit-scrollbar-thumb,
3706
4224
  .comment-card-quote::-webkit-scrollbar-thumb,
4225
+ .comment-card-scroll::-webkit-scrollbar-thumb,
3707
4226
  .markdown-toolbar::-webkit-scrollbar-thumb,
4227
+ .comment-markdown pre::-webkit-scrollbar-thumb,
4228
+ .comment-markdown .comment-markdown-table::-webkit-scrollbar-thumb,
3708
4229
  .preview-content pre::-webkit-scrollbar-thumb,
3709
4230
  .preview-content .table-wrapper::-webkit-scrollbar-thumb,
3710
4231
  .preview-content .mermaid-frame::-webkit-scrollbar-thumb,
@@ -3719,8 +4240,12 @@ body.plantuml-maximized-open::before {
3719
4240
  .git-panel::-webkit-scrollbar-thumb:hover,
3720
4241
  .diff-scroll::-webkit-scrollbar-thumb:hover,
3721
4242
  .comments-drawer-list::-webkit-scrollbar-thumb:hover,
4243
+ .comments-drawer-item-quote::-webkit-scrollbar-thumb:hover,
3722
4244
  .comment-card-quote::-webkit-scrollbar-thumb:hover,
4245
+ .comment-card-scroll::-webkit-scrollbar-thumb:hover,
3723
4246
  .markdown-toolbar::-webkit-scrollbar-thumb:hover,
4247
+ .comment-markdown pre::-webkit-scrollbar-thumb:hover,
4248
+ .comment-markdown .comment-markdown-table::-webkit-scrollbar-thumb:hover,
3724
4249
  .preview-content pre::-webkit-scrollbar-thumb:hover,
3725
4250
  .preview-content .table-wrapper::-webkit-scrollbar-thumb:hover,
3726
4251
  .preview-content .mermaid-frame::-webkit-scrollbar-thumb:hover,