pi-studio 0.5.43 → 0.5.45

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
@@ -87,14 +87,19 @@
87
87
  }
88
88
 
89
89
  #sendRunBtn,
90
- #queueSteerBtn,
91
- #critiqueBtn {
90
+ #queueSteerBtn {
92
91
  min-width: 10rem;
93
92
  display: inline-flex;
94
93
  justify-content: center;
95
94
  align-items: center;
96
95
  }
97
96
 
97
+ #critiqueBtn {
98
+ display: inline-flex;
99
+ justify-content: center;
100
+ align-items: center;
101
+ }
102
+
98
103
  #sendRunBtn:not(:disabled):not(.request-stop-active),
99
104
  #queueSteerBtn:not(:disabled),
100
105
  #loadResponseBtn:not(:disabled):not([hidden]) {
@@ -220,12 +225,18 @@
220
225
  filter: brightness(0.95);
221
226
  }
222
227
 
223
- #scratchpadBtn.has-content {
228
+ #scratchpadBtn.has-content,
229
+ #reviewNotesBtn.has-content,
230
+ #reviewNotesBtn.is-active {
224
231
  border-color: var(--accent);
225
232
  color: var(--accent);
226
233
  font-weight: 600;
227
234
  }
228
235
 
236
+ #reviewNotesBtn.is-active {
237
+ background: var(--accent-soft);
238
+ }
239
+
229
240
  .section-header select {
230
241
  font-weight: 600;
231
242
  font-size: 14px;
@@ -308,6 +319,51 @@
308
319
  min-height: 0;
309
320
  }
310
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
+
311
367
  .source-meta {
312
368
  display: flex;
313
369
  align-items: center;
@@ -333,6 +389,24 @@
333
389
  white-space: nowrap;
334
390
  }
335
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
+
336
410
  .sync-badge.sync {
337
411
  border-color: var(--border-muted);
338
412
  color: var(--muted);
@@ -412,6 +486,8 @@
412
486
  }
413
487
 
414
488
  .editor-highlight-wrap {
489
+ --editor-review-note-gutter-width: 0px;
490
+ --editor-line-number-gutter-width: 0px;
415
491
  position: relative;
416
492
  display: flex;
417
493
  flex: 1 1 auto;
@@ -424,19 +500,125 @@
424
500
  overscroll-behavior: none;
425
501
  }
426
502
 
503
+ .editor-review-note-gutter,
504
+ .editor-line-number-gutter {
505
+ position: absolute;
506
+ inset: 0 auto 0 0;
507
+ overflow: hidden;
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);
566
+ color: var(--muted);
567
+ pointer-events: none;
568
+ }
569
+
570
+ .editor-line-number-gutter-content {
571
+ min-height: 100%;
572
+ padding: 10px 8px 10px 0;
573
+ text-align: right;
574
+ font-family: var(--font-mono);
575
+ font-size: 12px;
576
+ line-height: 1.45;
577
+ font-variant-numeric: tabular-nums;
578
+ white-space: nowrap;
579
+ }
580
+
581
+ .editor-line-number-row {
582
+ display: block;
583
+ user-select: none;
584
+ }
585
+
586
+ .editor-line-number-measure {
587
+ position: absolute;
588
+ top: 0;
589
+ left: 0;
590
+ visibility: hidden;
591
+ pointer-events: none;
592
+ overflow: hidden;
593
+ white-space: pre-wrap;
594
+ word-break: normal;
595
+ overflow-wrap: break-word;
596
+ font-family: var(--font-mono);
597
+ font-size: 13px;
598
+ line-height: 1.45;
599
+ tab-size: 2;
600
+ z-index: -1;
601
+ }
602
+
603
+ .editor-line-number-measure-line {
604
+ display: block;
605
+ min-height: 1.45em;
606
+ }
607
+
427
608
  .editor-highlight {
428
609
  position: absolute;
429
610
  inset: 0;
430
611
  margin: 0;
431
612
  border: 0;
432
613
  border-radius: 8px;
433
- padding: 10px;
614
+ padding: 10px 10px 10px calc(10px + var(--editor-review-note-gutter-width) + var(--editor-line-number-gutter-width));
434
615
  overflow: auto;
435
616
  pointer-events: none;
436
617
  white-space: pre-wrap;
437
618
  word-break: normal;
438
619
  overflow-wrap: break-word;
439
620
  overscroll-behavior: none;
621
+ scrollbar-width: none;
440
622
  font-family: var(--font-mono);
441
623
  font-size: 13px;
442
624
  line-height: 1.45;
@@ -445,6 +627,12 @@
445
627
  background: transparent;
446
628
  }
447
629
 
630
+ .editor-highlight::-webkit-scrollbar {
631
+ width: 0;
632
+ height: 0;
633
+ display: none;
634
+ }
635
+
448
636
  #sourceText {
449
637
  position: relative;
450
638
  z-index: 1;
@@ -457,6 +645,7 @@
457
645
  resize: none;
458
646
  outline: none;
459
647
  overscroll-behavior: none;
648
+ padding: 10px 10px 10px calc(10px + var(--editor-review-note-gutter-width) + var(--editor-line-number-gutter-width));
460
649
  }
461
650
 
462
651
  #sourceText.highlight-active {
@@ -1515,10 +1704,189 @@
1515
1704
  filter: brightness(0.95);
1516
1705
  }
1517
1706
 
1707
+ .review-notes-dock .scratchpad-header {
1708
+ padding: 12px 14px 10px;
1709
+ }
1710
+
1711
+ .review-notes-dock .scratchpad-header h2 {
1712
+ font-size: 15px;
1713
+ }
1714
+
1715
+ .review-notes-dock .scratchpad-description {
1716
+ font-size: 11px;
1717
+ line-height: 1.4;
1718
+ word-break: normal;
1719
+ overflow-wrap: normal;
1720
+ }
1721
+
1722
+ .review-notes-inline-token {
1723
+ display: inline-block;
1724
+ white-space: nowrap;
1725
+ font-family: var(--font-mono);
1726
+ }
1727
+
1728
+ .review-notes-toolbar {
1729
+ display: flex;
1730
+ align-items: center;
1731
+ justify-content: space-between;
1732
+ gap: 12px;
1733
+ flex-wrap: wrap;
1734
+ padding: 10px 14px;
1735
+ border-bottom: 1px solid var(--border);
1736
+ background: var(--panel-2);
1737
+ box-shadow: inset 0 -1px 0 var(--border-muted);
1738
+ }
1739
+
1740
+ .review-notes-empty {
1741
+ padding: 14px;
1742
+ font-size: 13px;
1743
+ line-height: 1.5;
1744
+ color: var(--muted);
1745
+ border-bottom: 1px solid var(--border-muted);
1746
+ background: var(--panel);
1747
+ }
1748
+
1749
+ .review-notes-empty[hidden] {
1750
+ display: none !important;
1751
+ }
1752
+
1753
+ .review-notes-list {
1754
+ display: flex;
1755
+ flex: 1 1 auto;
1756
+ min-height: 0;
1757
+ flex-direction: column;
1758
+ gap: 12px;
1759
+ padding: 14px;
1760
+ overflow: auto;
1761
+ background: var(--panel);
1762
+ }
1763
+
1764
+ .review-notes-dock-footer {
1765
+ display: flex;
1766
+ justify-content: flex-end;
1767
+ padding: 10px 14px 12px;
1768
+ border-top: 1px solid var(--border);
1769
+ background: var(--panel-2);
1770
+ box-shadow: inset 0 1px 0 var(--border-muted);
1771
+ }
1772
+
1773
+ .review-notes-dock-footer .scratchpad-actions {
1774
+ width: 100%;
1775
+ justify-content: space-between;
1776
+ }
1777
+
1778
+ .review-note-card {
1779
+ border: 1px solid var(--border-muted);
1780
+ border-radius: 12px;
1781
+ background: var(--panel-2);
1782
+ padding: 12px;
1783
+ display: flex;
1784
+ flex-direction: column;
1785
+ gap: 10px;
1786
+ }
1787
+
1788
+ .review-note-card-header {
1789
+ display: flex;
1790
+ align-items: flex-start;
1791
+ justify-content: space-between;
1792
+ gap: 12px;
1793
+ flex-wrap: wrap;
1794
+ }
1795
+
1796
+ .review-note-card-title {
1797
+ display: flex;
1798
+ flex-direction: column;
1799
+ gap: 4px;
1800
+ min-width: 0;
1801
+ }
1802
+
1803
+ .review-note-anchor {
1804
+ font-size: 12px;
1805
+ font-weight: 600;
1806
+ color: var(--text);
1807
+ }
1808
+
1809
+ .review-note-quote {
1810
+ font-size: 12px;
1811
+ color: var(--muted);
1812
+ font-family: var(--font-mono);
1813
+ white-space: pre-wrap;
1814
+ word-break: break-word;
1815
+ }
1816
+
1817
+ .review-note-card-actions {
1818
+ display: inline-flex;
1819
+ align-items: center;
1820
+ gap: 8px;
1821
+ flex-wrap: wrap;
1822
+ justify-content: flex-end;
1823
+ }
1824
+
1825
+ .review-note-card textarea {
1826
+ width: 100%;
1827
+ min-height: 92px;
1828
+ border-radius: 8px;
1829
+ border: 0;
1830
+ padding: 10px 12px;
1831
+ background: var(--panel);
1832
+ color: var(--text);
1833
+ font-family: var(--font-mono);
1834
+ font-size: 13px;
1835
+ line-height: 1.5;
1836
+ resize: vertical;
1837
+ outline: none;
1838
+ box-shadow: inset 0 0 0 1px var(--border-muted);
1839
+ }
1840
+
1841
+ .review-note-card textarea:focus {
1842
+ box-shadow: inset 0 0 0 1px var(--accent), 0 0 0 2px var(--accent-soft);
1843
+ }
1844
+
1845
+ .review-note-card-footer {
1846
+ display: flex;
1847
+ align-items: center;
1848
+ justify-content: space-between;
1849
+ gap: 12px;
1850
+ flex-wrap: wrap;
1851
+ }
1852
+
1853
+ .review-note-timestamp {
1854
+ font-size: 11px;
1855
+ color: var(--muted);
1856
+ }
1857
+
1858
+ #reviewNotesAddBtn:not(:disabled) {
1859
+ background: var(--accent);
1860
+ border-color: var(--accent);
1861
+ color: var(--accent-contrast);
1862
+ font-weight: 600;
1863
+ }
1864
+
1865
+ #reviewNotesAddBtn:not(:disabled):hover {
1866
+ filter: brightness(0.95);
1867
+ }
1868
+
1869
+ .review-note-delete-btn:not(:disabled) {
1870
+ border-color: var(--warn-border);
1871
+ color: var(--warn);
1872
+ }
1873
+
1518
1874
  #status.error { color: var(--error); }
1519
1875
  #status.warning { color: var(--warn); }
1520
1876
  #status.success { color: var(--ok); }
1521
1877
 
1878
+ @media (max-width: 1200px) {
1879
+ .source-body {
1880
+ flex-direction: column;
1881
+ }
1882
+
1883
+ .review-notes-dock-wrap {
1884
+ flex: 0 0 auto;
1885
+ min-width: 0;
1886
+ max-height: min(42vh, 420px);
1887
+ }
1888
+ }
1889
+
1522
1890
  @media (max-width: 980px) {
1523
1891
  footer {
1524
1892
  grid-template-columns: 1fr;