pi-studio 0.5.44 → 0.5.46

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/client/studio.css CHANGED
@@ -225,12 +225,18 @@
225
225
  filter: brightness(0.95);
226
226
  }
227
227
 
228
- #scratchpadBtn.has-content {
228
+ #scratchpadBtn.has-content,
229
+ #reviewNotesBtn.has-content,
230
+ #reviewNotesBtn.is-active {
229
231
  border-color: var(--accent);
230
232
  color: var(--accent);
231
233
  font-weight: 600;
232
234
  }
233
235
 
236
+ #reviewNotesBtn.is-active {
237
+ background: var(--accent-soft);
238
+ }
239
+
234
240
  .section-header select {
235
241
  font-weight: 600;
236
242
  font-size: 14px;
@@ -313,6 +319,51 @@
313
319
  min-height: 0;
314
320
  }
315
321
 
322
+ .source-body {
323
+ display: flex;
324
+ gap: 12px;
325
+ flex: 1 1 auto;
326
+ min-height: 0;
327
+ align-items: stretch;
328
+ }
329
+
330
+ .source-primary {
331
+ display: flex;
332
+ flex: 1 1 auto;
333
+ min-width: 0;
334
+ min-height: 0;
335
+ flex-direction: column;
336
+ gap: 8px;
337
+ }
338
+
339
+ .review-notes-dock-wrap {
340
+ flex: 0 0 clamp(300px, 34%, 420px);
341
+ min-width: 280px;
342
+ min-height: 0;
343
+ display: flex;
344
+ border: 1px solid var(--border);
345
+ border-radius: 10px;
346
+ background: var(--panel);
347
+ box-shadow: var(--panel-shadow);
348
+ overflow: hidden;
349
+ }
350
+
351
+ .review-notes-dock-wrap[hidden] {
352
+ display: none !important;
353
+ }
354
+
355
+ .review-notes-dock {
356
+ width: 100%;
357
+ min-height: 0;
358
+ display: flex;
359
+ flex-direction: column;
360
+ border: 0;
361
+ border-radius: 0;
362
+ overflow: hidden;
363
+ background: var(--panel);
364
+ box-shadow: none;
365
+ }
366
+
316
367
  .source-meta {
317
368
  display: flex;
318
369
  align-items: center;
@@ -338,6 +389,24 @@
338
389
  white-space: nowrap;
339
390
  }
340
391
 
392
+ .source-badge-button {
393
+ cursor: pointer;
394
+ transition: border-color 120ms ease, color 120ms ease, background 120ms ease;
395
+ }
396
+
397
+ .source-badge-button:not(:disabled):hover,
398
+ .source-badge-button:not(:disabled):focus-visible {
399
+ border-color: var(--accent);
400
+ color: var(--text);
401
+ background: var(--accent-soft);
402
+ outline: none;
403
+ }
404
+
405
+ .source-badge-button:disabled {
406
+ cursor: default;
407
+ opacity: 0.75;
408
+ }
409
+
341
410
  .sync-badge.sync {
342
411
  border-color: var(--border-muted);
343
412
  color: var(--muted);
@@ -417,6 +486,7 @@
417
486
  }
418
487
 
419
488
  .editor-highlight-wrap {
489
+ --editor-review-note-gutter-width: 0px;
420
490
  --editor-line-number-gutter-width: 0px;
421
491
  position: relative;
422
492
  display: flex;
@@ -430,16 +500,71 @@
430
500
  overscroll-behavior: none;
431
501
  }
432
502
 
503
+ .editor-review-note-gutter,
433
504
  .editor-line-number-gutter {
434
505
  position: absolute;
435
506
  inset: 0 auto 0 0;
436
- width: var(--editor-line-number-gutter-width);
437
507
  overflow: hidden;
438
- border-right: 1px solid var(--border-muted);
439
508
  background: var(--panel-2);
509
+ z-index: 0;
510
+ }
511
+
512
+ .editor-review-note-gutter {
513
+ width: var(--editor-review-note-gutter-width);
514
+ border-right: 1px solid var(--border-muted);
515
+ z-index: 2;
516
+ }
517
+
518
+ .editor-review-note-gutter-content {
519
+ min-height: 100%;
520
+ padding: 10px 4px;
521
+ }
522
+
523
+ .editor-review-note-row {
524
+ display: flex;
525
+ align-items: center;
526
+ justify-content: center;
527
+ min-height: 1.45em;
528
+ }
529
+
530
+ .editor-review-note-marker {
531
+ width: 18px;
532
+ min-width: 18px;
533
+ height: 18px;
534
+ border-radius: 999px;
535
+ border: 1px solid transparent;
536
+ padding: 0;
537
+ display: inline-flex;
538
+ align-items: center;
539
+ justify-content: center;
540
+ font-size: 10px;
541
+ line-height: 1;
542
+ font-weight: 700;
543
+ color: var(--accent);
544
+ background: var(--accent-soft);
545
+ cursor: pointer;
546
+ }
547
+
548
+ .editor-review-note-marker.has-multiple {
549
+ width: auto;
550
+ min-width: 18px;
551
+ padding: 0 4px;
552
+ border-color: var(--accent);
553
+ }
554
+
555
+ .editor-review-note-marker:hover,
556
+ .editor-review-note-marker:focus-visible {
557
+ border-color: var(--accent);
558
+ filter: brightness(0.96);
559
+ outline: none;
560
+ }
561
+
562
+ .editor-line-number-gutter {
563
+ left: var(--editor-review-note-gutter-width);
564
+ width: var(--editor-line-number-gutter-width);
565
+ border-right: 1px solid var(--border-muted);
440
566
  color: var(--muted);
441
567
  pointer-events: none;
442
- z-index: 0;
443
568
  }
444
569
 
445
570
  .editor-line-number-gutter-content {
@@ -486,13 +611,14 @@
486
611
  margin: 0;
487
612
  border: 0;
488
613
  border-radius: 8px;
489
- padding: 10px 10px 10px calc(10px + var(--editor-line-number-gutter-width));
614
+ padding: 10px 10px 10px calc(10px + var(--editor-review-note-gutter-width) + var(--editor-line-number-gutter-width));
490
615
  overflow: auto;
491
616
  pointer-events: none;
492
617
  white-space: pre-wrap;
493
618
  word-break: normal;
494
619
  overflow-wrap: break-word;
495
620
  overscroll-behavior: none;
621
+ scrollbar-width: none;
496
622
  font-family: var(--font-mono);
497
623
  font-size: 13px;
498
624
  line-height: 1.45;
@@ -501,6 +627,12 @@
501
627
  background: transparent;
502
628
  }
503
629
 
630
+ .editor-highlight::-webkit-scrollbar {
631
+ width: 0;
632
+ height: 0;
633
+ display: none;
634
+ }
635
+
504
636
  #sourceText {
505
637
  position: relative;
506
638
  z-index: 1;
@@ -513,7 +645,7 @@
513
645
  resize: none;
514
646
  outline: none;
515
647
  overscroll-behavior: none;
516
- padding: 10px 10px 10px calc(10px + var(--editor-line-number-gutter-width));
648
+ padding: 10px 10px 10px calc(10px + var(--editor-review-note-gutter-width) + var(--editor-line-number-gutter-width));
517
649
  }
518
650
 
519
651
  #sourceText.highlight-active {
@@ -529,6 +661,29 @@
529
661
  -webkit-text-fill-color: transparent;
530
662
  }
531
663
 
664
+ .editor-selection-comment-btn {
665
+ position: absolute;
666
+ top: 12px;
667
+ right: 12px;
668
+ z-index: 4;
669
+ min-height: 24px;
670
+ border-radius: 999px;
671
+ padding: 0 10px;
672
+ font-size: 12px;
673
+ line-height: 1;
674
+ background: var(--accent-soft);
675
+ border-color: var(--accent);
676
+ color: var(--accent);
677
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
678
+ }
679
+
680
+ .editor-selection-comment-btn:hover,
681
+ .editor-selection-comment-btn:focus-visible {
682
+ background: var(--accent-soft-strong);
683
+ color: var(--accent);
684
+ border-color: var(--accent);
685
+ }
686
+
532
687
  .hl-heading {
533
688
  color: var(--md-heading);
534
689
  font-weight: 700;
@@ -735,6 +890,75 @@
735
890
  margin-bottom: 1em;
736
891
  }
737
892
 
893
+ .preview-comment-block {
894
+ position: relative;
895
+ }
896
+
897
+ .preview-comment-block-content {
898
+ scroll-margin-top: 24px;
899
+ }
900
+
901
+ .preview-comment-controls {
902
+ position: absolute;
903
+ top: 0;
904
+ right: 0;
905
+ z-index: 4;
906
+ display: inline-flex;
907
+ align-items: center;
908
+ gap: 8px;
909
+ transform: translateY(-0.38rem);
910
+ }
911
+
912
+ .preview-comment-summary {
913
+ display: none !important;
914
+ }
915
+
916
+ .preview-comment-add {
917
+ display: inline-flex;
918
+ align-items: center;
919
+ justify-content: center;
920
+ min-height: 24px;
921
+ border-radius: 999px;
922
+ padding: 0 10px;
923
+ font-size: 12px;
924
+ line-height: 1;
925
+ opacity: 0;
926
+ pointer-events: none;
927
+ transform: translateY(-2px);
928
+ transition: opacity 120ms ease, transform 120ms ease, color 120ms ease, border-color 120ms ease, background-color 120ms ease;
929
+ background: var(--accent-soft);
930
+ border-color: var(--accent);
931
+ color: var(--accent);
932
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
933
+ }
934
+
935
+ .preview-comment-block.has-selection .preview-comment-add {
936
+ opacity: 1;
937
+ pointer-events: auto;
938
+ transform: translateY(0);
939
+ }
940
+
941
+ .preview-comment-add:hover,
942
+ .preview-comment-add:focus-visible {
943
+ background: var(--accent-soft-strong);
944
+ color: var(--accent);
945
+ border-color: var(--accent);
946
+ }
947
+
948
+ .preview-jump-highlight {
949
+ border-radius: 10px;
950
+ background: linear-gradient(to right, var(--accent-soft-strong) 0, var(--accent-soft) 3px, transparent 3px, transparent 100%);
951
+ box-shadow: 0 0 0 1px var(--accent-soft);
952
+ }
953
+
954
+ .preview-comment-inline-highlight {
955
+ background: var(--accent-soft-strong);
956
+ color: inherit;
957
+ border-radius: 4px;
958
+ padding: 0 0.08em;
959
+ box-shadow: 0 0 0 1px var(--accent-soft);
960
+ }
961
+
738
962
  .rendered-markdown li::marker {
739
963
  color: var(--md-list-bullet);
740
964
  }
@@ -1572,10 +1796,191 @@
1572
1796
  filter: brightness(0.95);
1573
1797
  }
1574
1798
 
1799
+ .review-notes-dock .scratchpad-header {
1800
+ padding: 12px 14px 10px;
1801
+ }
1802
+
1803
+ .review-notes-dock .scratchpad-header h2 {
1804
+ font-size: 15px;
1805
+ }
1806
+
1807
+ .review-notes-dock .scratchpad-description {
1808
+ font-size: 11px;
1809
+ line-height: 1.4;
1810
+ word-break: normal;
1811
+ overflow-wrap: normal;
1812
+ }
1813
+
1814
+ .review-notes-inline-token {
1815
+ display: inline-block;
1816
+ white-space: nowrap;
1817
+ font-family: var(--font-mono);
1818
+ }
1819
+
1820
+ .review-notes-toolbar {
1821
+ display: flex;
1822
+ align-items: center;
1823
+ justify-content: space-between;
1824
+ gap: 12px;
1825
+ flex-wrap: wrap;
1826
+ padding: 10px 14px;
1827
+ border-bottom: 1px solid var(--border);
1828
+ background: var(--panel-2);
1829
+ box-shadow: inset 0 -1px 0 var(--border-muted);
1830
+ }
1831
+
1832
+ .review-notes-empty {
1833
+ padding: 14px;
1834
+ font-size: 13px;
1835
+ line-height: 1.5;
1836
+ color: var(--muted);
1837
+ border-bottom: 1px solid var(--border-muted);
1838
+ background: var(--panel);
1839
+ }
1840
+
1841
+ .review-notes-empty[hidden] {
1842
+ display: none !important;
1843
+ }
1844
+
1845
+ .review-notes-list {
1846
+ display: flex;
1847
+ flex: 1 1 auto;
1848
+ min-height: 0;
1849
+ flex-direction: column;
1850
+ gap: 12px;
1851
+ padding: 14px;
1852
+ overflow: auto;
1853
+ background: var(--panel);
1854
+ }
1855
+
1856
+ .review-notes-dock-footer {
1857
+ display: flex;
1858
+ justify-content: flex-end;
1859
+ padding: 10px 14px 12px;
1860
+ border-top: 1px solid var(--border);
1861
+ background: var(--panel-2);
1862
+ box-shadow: inset 0 1px 0 var(--border-muted);
1863
+ }
1864
+
1865
+ .review-notes-dock-footer .scratchpad-actions {
1866
+ width: 100%;
1867
+ justify-content: space-between;
1868
+ }
1869
+
1870
+ .review-note-card {
1871
+ border: 1px solid var(--border-muted);
1872
+ border-radius: 12px;
1873
+ background: var(--panel-2);
1874
+ padding: 12px;
1875
+ display: flex;
1876
+ flex-direction: column;
1877
+ gap: 10px;
1878
+ }
1879
+
1880
+ .review-note-card-header {
1881
+ display: flex;
1882
+ align-items: flex-start;
1883
+ justify-content: space-between;
1884
+ gap: 12px;
1885
+ flex-wrap: wrap;
1886
+ }
1887
+
1888
+ .review-note-card-title {
1889
+ display: flex;
1890
+ flex-direction: column;
1891
+ gap: 4px;
1892
+ min-width: 0;
1893
+ }
1894
+
1895
+ .review-note-anchor {
1896
+ font-size: 12px;
1897
+ font-weight: 600;
1898
+ color: var(--text);
1899
+ }
1900
+
1901
+ .review-note-quote {
1902
+ font-size: 12px;
1903
+ color: var(--muted);
1904
+ font-family: var(--font-mono);
1905
+ white-space: pre-wrap;
1906
+ word-break: break-word;
1907
+ }
1908
+
1909
+ .review-note-card-actions {
1910
+ display: inline-flex;
1911
+ align-items: center;
1912
+ gap: 8px;
1913
+ flex-wrap: wrap;
1914
+ justify-content: flex-end;
1915
+ }
1916
+
1917
+ .review-note-card textarea {
1918
+ width: 100%;
1919
+ min-height: 92px;
1920
+ border-radius: 8px;
1921
+ border: 0;
1922
+ padding: 10px 12px;
1923
+ background: var(--panel);
1924
+ color: var(--text);
1925
+ font-family: var(--font-mono);
1926
+ font-size: 13px;
1927
+ line-height: 1.5;
1928
+ resize: vertical;
1929
+ outline: none;
1930
+ box-shadow: inset 0 0 0 1px var(--border-muted);
1931
+ }
1932
+
1933
+ .review-note-card textarea:focus {
1934
+ box-shadow: inset 0 0 0 1px var(--accent), 0 0 0 2px var(--accent-soft);
1935
+ }
1936
+
1937
+ .review-note-card-footer {
1938
+ display: flex;
1939
+ align-items: center;
1940
+ justify-content: space-between;
1941
+ gap: 12px;
1942
+ flex-wrap: wrap;
1943
+ }
1944
+
1945
+ .review-note-timestamp {
1946
+ font-size: 11px;
1947
+ color: var(--muted);
1948
+ }
1949
+
1950
+ #reviewNotesAddBtn:not(:disabled) {
1951
+ color: var(--muted);
1952
+ border-color: var(--border-muted);
1953
+ background: var(--panel);
1954
+ font-weight: 500;
1955
+ }
1956
+
1957
+ #reviewNotesAddBtn:not(:disabled):hover {
1958
+ color: var(--text);
1959
+ border-color: var(--accent-soft-strong);
1960
+ background: var(--panel-2);
1961
+ }
1962
+
1963
+ .review-note-delete-btn:not(:disabled) {
1964
+ border-color: var(--warn-border);
1965
+ color: var(--warn);
1966
+ }
1967
+
1575
1968
  #status.error { color: var(--error); }
1576
1969
  #status.warning { color: var(--warn); }
1577
1970
  #status.success { color: var(--ok); }
1578
1971
 
1972
+ @media (max-width: 1200px) {
1973
+ .source-body {
1974
+ flex-direction: column;
1975
+ }
1976
+
1977
+ .review-notes-dock-wrap {
1978
+ flex: 0 0 auto;
1979
+ min-width: 0;
1980
+ max-height: min(42vh, 420px);
1981
+ }
1982
+ }
1983
+
1579
1984
  @media (max-width: 980px) {
1580
1985
  footer {
1581
1986
  grid-template-columns: 1fr;