claude-relay 2.2.4 → 2.3.1

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.
@@ -34,6 +34,8 @@
34
34
 
35
35
  /* --- File panel header --- */
36
36
  #file-panel-header {
37
+ display: flex;
38
+ align-items: center;
37
39
  padding: 4px 8px;
38
40
  }
39
41
 
@@ -50,12 +52,33 @@
50
52
  font-size: 14px;
51
53
  font-weight: 400;
52
54
  cursor: pointer;
55
+ flex: 1;
53
56
  transition: background 0.15s, color 0.15s;
54
57
  }
55
58
 
56
59
  #file-panel-back .lucide { width: 16px; height: 16px; flex-shrink: 0; }
57
60
  #file-panel-back:hover { background: var(--sidebar-hover); color: var(--text); }
58
61
 
62
+ #file-panel-refresh {
63
+ display: flex;
64
+ align-items: center;
65
+ justify-content: center;
66
+ width: 32px;
67
+ height: 32px;
68
+ border-radius: 8px;
69
+ border: none;
70
+ background: transparent;
71
+ color: var(--text-muted);
72
+ cursor: pointer;
73
+ flex-shrink: 0;
74
+ transition: background 0.15s, color 0.15s, transform 0.3s;
75
+ }
76
+
77
+ #file-panel-refresh .lucide { width: 14px; height: 14px; }
78
+ #file-panel-refresh:hover { background: var(--sidebar-hover); color: var(--text); }
79
+ #file-panel-refresh.spinning { animation: spin-once 0.5s ease; }
80
+ @keyframes spin-once { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }
81
+
59
82
  /* --- File tree --- */
60
83
  #file-tree { padding: 4px 8px; }
61
84
 
@@ -136,8 +159,13 @@
136
159
  flex-direction: column;
137
160
  overflow: hidden;
138
161
  flex-shrink: 0;
162
+ transition: max-width 0.2s ease, width 0.2s ease;
139
163
  }
140
164
  #file-viewer.hidden { display: none; }
165
+ #file-viewer.file-viewer-wide {
166
+ width: 70%;
167
+ max-width: 1200px;
168
+ }
141
169
  }
142
170
 
143
171
  /* Narrow screens: full overlay */
@@ -298,6 +326,57 @@
298
326
  line-height: inherit;
299
327
  }
300
328
 
329
+ /* Code with line numbers */
330
+ .file-viewer-code {
331
+ display: flex;
332
+ min-height: 0;
333
+ }
334
+
335
+ .file-viewer-code pre {
336
+ margin: 0;
337
+ font-family: "SF Mono", Menlo, Monaco, monospace;
338
+ font-size: 13px;
339
+ line-height: 1.55;
340
+ white-space: pre;
341
+ word-break: normal;
342
+ }
343
+
344
+ .file-viewer-gutter {
345
+ flex-shrink: 0;
346
+ padding: 12px 10px 12px 14px;
347
+ text-align: right;
348
+ color: var(--text-dimmer);
349
+ opacity: 0.5;
350
+ user-select: none;
351
+ -webkit-user-select: none;
352
+ border-right: 1px solid var(--border-subtle);
353
+ min-width: 44px;
354
+ position: sticky;
355
+ left: 0;
356
+ background: var(--bg);
357
+ z-index: 1;
358
+ }
359
+
360
+ .file-viewer-code-content {
361
+ flex: 1;
362
+ padding: 12px 14px;
363
+ min-width: 0;
364
+ }
365
+
366
+ .file-viewer-code-content code {
367
+ font-family: inherit;
368
+ font-size: inherit;
369
+ line-height: inherit;
370
+ background: none;
371
+ padding: 0;
372
+ border-radius: 0;
373
+ }
374
+
375
+ .file-viewer-code-content .hljs {
376
+ background: transparent;
377
+ padding: 0;
378
+ }
379
+
301
380
  .file-viewer-binary {
302
381
  display: flex;
303
382
  align-items: center;
@@ -518,3 +597,495 @@
518
597
  color: var(--text-dimmer);
519
598
  font-style: italic;
520
599
  }
600
+
601
+ /* --- Terminal context menu --- */
602
+ .term-ctx-menu {
603
+ position: fixed;
604
+ background: var(--bg-alt);
605
+ border: 1px solid var(--border);
606
+ border-radius: 10px;
607
+ padding: 4px 0;
608
+ min-width: 160px;
609
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
610
+ z-index: 500;
611
+ }
612
+
613
+ .term-ctx-item {
614
+ display: flex;
615
+ align-items: center;
616
+ gap: 8px;
617
+ width: 100%;
618
+ padding: 8px 12px;
619
+ font-size: 13px;
620
+ color: var(--text-secondary);
621
+ background: none;
622
+ border: none;
623
+ font-family: inherit;
624
+ cursor: pointer;
625
+ transition: background 0.15s;
626
+ }
627
+
628
+ .term-ctx-item .lucide { width: 14px; height: 14px; flex-shrink: 0; }
629
+ .term-ctx-item:hover { background: rgba(255, 255, 255, 0.05); }
630
+
631
+ /* --- File Edit History --- */
632
+
633
+ .file-history-panel {
634
+ padding: 16px 20px;
635
+ height: 100%;
636
+ overflow-y: auto;
637
+ }
638
+
639
+ .file-history-header {
640
+ display: flex;
641
+ align-items: center;
642
+ justify-content: space-between;
643
+ font-size: 13px;
644
+ font-weight: 600;
645
+ color: var(--text-secondary);
646
+ margin-bottom: 12px;
647
+ padding-bottom: 8px;
648
+ border-bottom: 1px solid var(--border-subtle);
649
+ }
650
+
651
+ .file-history-list {
652
+ display: flex;
653
+ flex-direction: column;
654
+ gap: 10px;
655
+ }
656
+
657
+ .file-history-entry {
658
+ background: var(--bg-alt);
659
+ border: 1px solid var(--border);
660
+ border-radius: 10px;
661
+ padding: 10px 12px;
662
+ cursor: pointer;
663
+ transition: border-color 0.15s, background 0.15s;
664
+ position: relative;
665
+ }
666
+
667
+ .file-history-entry:hover { border-color: var(--accent); }
668
+ .file-history-entry.no-navigate { cursor: default; opacity: 0.7; }
669
+ .file-history-entry.no-navigate:hover { border-color: var(--border); }
670
+
671
+ .file-history-entry.selected {
672
+ border-color: var(--accent);
673
+ background: var(--accent-bg);
674
+ }
675
+
676
+ .file-history-entry.selected::before {
677
+ content: attr(data-select-num);
678
+ position: absolute;
679
+ top: -6px;
680
+ left: -6px;
681
+ width: 18px;
682
+ height: 18px;
683
+ border-radius: 50%;
684
+ background: var(--accent);
685
+ color: #fff;
686
+ font-size: 11px;
687
+ font-weight: 600;
688
+ display: flex;
689
+ align-items: center;
690
+ justify-content: center;
691
+ }
692
+
693
+ .file-history-entry.git-entry {
694
+ border-left: 3px solid var(--text-dimmer);
695
+ }
696
+
697
+ .file-history-entry.git-entry.selected {
698
+ border-left-color: var(--accent);
699
+ }
700
+
701
+ .file-history-entry-header {
702
+ display: flex;
703
+ justify-content: space-between;
704
+ align-items: center;
705
+ gap: 8px;
706
+ }
707
+
708
+ .file-history-title {
709
+ font-size: 13px;
710
+ font-weight: 500;
711
+ color: var(--text);
712
+ overflow: hidden;
713
+ text-overflow: ellipsis;
714
+ white-space: nowrap;
715
+ min-width: 0;
716
+ flex: 1;
717
+ }
718
+
719
+ .file-history-badge {
720
+ font-size: 11px;
721
+ font-weight: 500;
722
+ padding: 2px 8px;
723
+ border-radius: 10px;
724
+ background: var(--accent-bg);
725
+ color: var(--accent);
726
+ flex-shrink: 0;
727
+ }
728
+
729
+ .file-history-badge.badge-commit {
730
+ background: rgba(255,255,255,0.06);
731
+ color: var(--text-muted);
732
+ }
733
+
734
+ .file-history-code-subtitle {
735
+ font-family: "SF Mono", Menlo, Monaco, monospace;
736
+ font-size: 11px;
737
+ color: var(--text-muted);
738
+ margin-top: 4px;
739
+ padding: 2px 6px;
740
+ background: rgba(255, 255, 255, 0.04);
741
+ border-radius: 3px;
742
+ overflow: hidden;
743
+ text-overflow: ellipsis;
744
+ white-space: nowrap;
745
+ }
746
+
747
+ .file-history-meta {
748
+ font-size: 11px;
749
+ color: var(--text-dimmer);
750
+ margin-top: 4px;
751
+ overflow: hidden;
752
+ text-overflow: ellipsis;
753
+ white-space: nowrap;
754
+ }
755
+
756
+ /* Inline diff preview */
757
+ .file-history-diff {
758
+ max-height: 200px;
759
+ overflow: auto;
760
+ border-radius: 6px;
761
+ background: var(--code-bg);
762
+ margin-top: 8px;
763
+ }
764
+
765
+ .file-history-write-badge {
766
+ padding: 8px 10px;
767
+ font-size: 12px;
768
+ color: var(--text-muted);
769
+ font-style: italic;
770
+ text-align: center;
771
+ }
772
+
773
+ /* Action buttons row */
774
+ .file-history-actions {
775
+ display: flex;
776
+ gap: 6px;
777
+ margin-top: 8px;
778
+ }
779
+
780
+ .file-history-action-btn {
781
+ padding: 3px 8px;
782
+ border-radius: 4px;
783
+ border: 1px solid var(--border);
784
+ background: transparent;
785
+ color: var(--text-muted);
786
+ font-size: 11px;
787
+ font-family: inherit;
788
+ cursor: pointer;
789
+ transition: background 0.15s, color 0.15s, border-color 0.15s;
790
+ }
791
+
792
+ .file-history-action-btn:hover {
793
+ background: var(--sidebar-hover);
794
+ color: var(--text);
795
+ border-color: var(--text-dimmer);
796
+ }
797
+
798
+ .file-history-nav-btn {
799
+ color: var(--accent);
800
+ border-color: transparent;
801
+ }
802
+
803
+ .file-history-nav-btn:hover {
804
+ background: var(--accent-bg);
805
+ color: var(--accent);
806
+ border-color: var(--accent);
807
+ }
808
+
809
+ /* Compare bar */
810
+ .file-history-compare-bar-slots {
811
+ padding: 10px 12px;
812
+ margin-bottom: 8px;
813
+ border-radius: 8px;
814
+ background: rgba(255, 255, 255, 0.04);
815
+ border: 1px solid var(--border);
816
+ }
817
+
818
+ .compare-bar-label {
819
+ display: flex;
820
+ align-items: center;
821
+ gap: 5px;
822
+ font-size: 11px;
823
+ font-weight: 600;
824
+ color: var(--text-secondary);
825
+ margin-bottom: 8px;
826
+ text-transform: uppercase;
827
+ letter-spacing: 0.5px;
828
+ }
829
+
830
+ .compare-bar-label svg {
831
+ width: 13px;
832
+ height: 13px;
833
+ opacity: 0.7;
834
+ }
835
+
836
+ .compare-slots-row {
837
+ display: flex;
838
+ align-items: center;
839
+ gap: 8px;
840
+ }
841
+
842
+ .file-history-compare-slot {
843
+ display: flex;
844
+ align-items: center;
845
+ gap: 6px;
846
+ flex: 1;
847
+ min-width: 0;
848
+ padding: 7px 10px;
849
+ border: 1.5px dashed rgba(255, 255, 255, 0.15);
850
+ border-radius: 6px;
851
+ font-size: 11px;
852
+ color: var(--text-muted);
853
+ background: rgba(255, 255, 255, 0.02);
854
+ transition: border-color 0.15s, background 0.15s;
855
+ }
856
+
857
+ .file-history-compare-slot.filled {
858
+ border-style: solid;
859
+ border-color: var(--accent);
860
+ background: var(--accent-bg);
861
+ color: var(--text-secondary);
862
+ }
863
+
864
+ .compare-slot-num {
865
+ display: flex;
866
+ align-items: center;
867
+ justify-content: center;
868
+ width: 18px;
869
+ height: 18px;
870
+ border-radius: 4px;
871
+ font-size: 10px;
872
+ font-weight: 700;
873
+ flex-shrink: 0;
874
+ background: rgba(255, 255, 255, 0.1);
875
+ color: var(--text-muted);
876
+ }
877
+
878
+ .file-history-compare-slot.filled .compare-slot-num {
879
+ background: var(--accent);
880
+ color: #fff;
881
+ }
882
+
883
+ .compare-slot-text {
884
+ flex: 1;
885
+ min-width: 0;
886
+ overflow: hidden;
887
+ text-overflow: ellipsis;
888
+ white-space: nowrap;
889
+ font-family: "SF Mono", Menlo, Monaco, monospace;
890
+ font-size: 11px;
891
+ }
892
+
893
+ .compare-slot-placeholder {
894
+ font-style: italic;
895
+ opacity: 0.6;
896
+ }
897
+
898
+ .compare-slot-clear {
899
+ flex-shrink: 0;
900
+ border: none;
901
+ background: none;
902
+ color: var(--text-dimmer);
903
+ font-size: 14px;
904
+ cursor: pointer;
905
+ padding: 0 2px;
906
+ line-height: 1;
907
+ }
908
+ .compare-slot-clear:hover { color: var(--text); }
909
+
910
+ .compare-slot-arrow {
911
+ flex-shrink: 0;
912
+ color: var(--text-dimmer);
913
+ opacity: 0.5;
914
+ }
915
+
916
+ .compare-slot-arrow svg {
917
+ width: 14px;
918
+ height: 14px;
919
+ }
920
+
921
+ /* Compare button */
922
+ .file-history-compare-btn {
923
+ display: flex;
924
+ align-items: center;
925
+ gap: 5px;
926
+ padding: 7px 14px;
927
+ border-radius: 6px;
928
+ border: none;
929
+ background: var(--accent);
930
+ color: #fff;
931
+ font-size: 12px;
932
+ font-weight: 500;
933
+ cursor: pointer;
934
+ font-family: inherit;
935
+ flex-shrink: 0;
936
+ transition: opacity 0.15s;
937
+ }
938
+
939
+ .file-history-compare-btn svg {
940
+ width: 13px;
941
+ height: 13px;
942
+ }
943
+
944
+ .file-history-compare-btn:hover { opacity: 0.85; }
945
+
946
+ /* Compare view */
947
+ .file-history-compare-bar {
948
+ margin-bottom: 12px;
949
+ }
950
+
951
+ .file-history-compare-back {
952
+ padding: 6px 12px;
953
+ border-radius: 6px;
954
+ border: 1px solid var(--border);
955
+ background: transparent;
956
+ color: var(--text-secondary);
957
+ font-size: 12px;
958
+ cursor: pointer;
959
+ font-family: inherit;
960
+ transition: background 0.15s, color 0.15s;
961
+ }
962
+
963
+ .file-history-compare-back:hover { background: var(--sidebar-hover); color: var(--text); }
964
+
965
+ /* View file bar (back + toggle) */
966
+ .file-history-view-bar {
967
+ display: flex;
968
+ align-items: center;
969
+ justify-content: space-between;
970
+ padding: 10px 16px;
971
+ flex-shrink: 0;
972
+ }
973
+
974
+ .file-history-view-toggle {
975
+ display: flex;
976
+ border: 1px solid var(--border);
977
+ border-radius: 6px;
978
+ overflow: hidden;
979
+ }
980
+
981
+ .file-history-toggle-btn {
982
+ padding: 4px 10px;
983
+ border: none;
984
+ background: transparent;
985
+ color: var(--text-muted);
986
+ font-size: 11px;
987
+ font-family: inherit;
988
+ cursor: pointer;
989
+ transition: background 0.15s, color 0.15s;
990
+ }
991
+
992
+ .file-history-toggle-btn + .file-history-toggle-btn {
993
+ border-left: 1px solid var(--border);
994
+ }
995
+
996
+ .file-history-toggle-btn:hover {
997
+ background: var(--sidebar-hover);
998
+ color: var(--text);
999
+ }
1000
+
1001
+ .file-history-toggle-btn.active {
1002
+ background: var(--accent-bg);
1003
+ color: var(--accent);
1004
+ }
1005
+
1006
+ /* Full-size diff container (View diff mode) */
1007
+ .file-history-diff-full {
1008
+ flex: 1;
1009
+ overflow: auto;
1010
+ background: var(--code-bg);
1011
+ border-top: 1px solid var(--border-subtle);
1012
+ }
1013
+
1014
+ /* Split view */
1015
+ .file-history-compare-view {
1016
+ display: flex;
1017
+ flex-direction: column;
1018
+ height: 100%;
1019
+ }
1020
+
1021
+ .file-history-compare-view .file-history-compare-bar {
1022
+ padding: 10px 16px;
1023
+ flex-shrink: 0;
1024
+ }
1025
+
1026
+ .file-history-compare-content {
1027
+ display: flex;
1028
+ flex-direction: column;
1029
+ flex: 1;
1030
+ min-height: 0;
1031
+ }
1032
+
1033
+ .file-history-split {
1034
+ display: flex;
1035
+ flex: 1;
1036
+ min-height: 0;
1037
+ border-top: 1px solid var(--border-subtle);
1038
+ }
1039
+
1040
+ .file-history-split-pane {
1041
+ flex: 1;
1042
+ min-width: 0;
1043
+ display: flex;
1044
+ flex-direction: column;
1045
+ }
1046
+
1047
+ .file-history-split-pane + .file-history-split-pane {
1048
+ border-left: 1px solid var(--border-subtle);
1049
+ }
1050
+
1051
+ .file-history-split-label {
1052
+ padding: 6px 12px;
1053
+ font-size: 11px;
1054
+ font-weight: 600;
1055
+ color: var(--text-muted);
1056
+ background: var(--bg-alt);
1057
+ border-bottom: 1px solid var(--border-subtle);
1058
+ overflow: hidden;
1059
+ text-overflow: ellipsis;
1060
+ white-space: nowrap;
1061
+ flex-shrink: 0;
1062
+ }
1063
+
1064
+ .file-history-split-code {
1065
+ flex: 1;
1066
+ overflow: auto;
1067
+ background: var(--code-bg);
1068
+ }
1069
+
1070
+ .file-history-split-code pre {
1071
+ margin: 0;
1072
+ padding: 8px 12px;
1073
+ font-size: 12px;
1074
+ line-height: 1.5;
1075
+ tab-size: 2;
1076
+ }
1077
+
1078
+ .file-history-split-code code {
1079
+ font-family: "SF Mono", Menlo, Monaco, monospace;
1080
+ }
1081
+
1082
+ /* --- Message blink animation --- */
1083
+ @keyframes message-blink {
1084
+ 0%, 100% { background: transparent; }
1085
+ 50% { background: var(--accent-bg); }
1086
+ }
1087
+
1088
+ .message-blink {
1089
+ animation: message-blink 0.5s ease 3;
1090
+ border-radius: 12px;
1091
+ }
@@ -172,6 +172,7 @@
172
172
  object-fit: cover;
173
173
  border-radius: 8px;
174
174
  border: 1px solid var(--border-subtle);
175
+ cursor: pointer;
175
176
  }
176
177
 
177
178
  .image-preview-remove {
@@ -244,6 +245,8 @@
244
245
  max-height: 120px;
245
246
  overflow-y: auto;
246
247
  box-sizing: border-box;
248
+ unicode-bidi: plaintext;
249
+ text-align: start;
247
250
  }
248
251
 
249
252
  #input::placeholder {