Skip to content

Commit 76d7b74

Browse files
committed
Check pt fixing bugs
1 parent d6e4990 commit 76d7b74

File tree

3 files changed

+283
-3
lines changed

3 files changed

+283
-3
lines changed

crates/web-ui/src/handlers.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -654,3 +654,8 @@ fn calculate_complexity_from_symbol_table(_symbol_table: &smart_diff_semantic::S
654654
// Simplified complexity calculation
655655
10 // Placeholder value
656656
}
657+
658+
/// SPA fallback handler - serves index.html for client-side routing
659+
pub async fn spa_fallback() -> Html<&'static str> {
660+
Html(include_str!("../../../static/index.html"))
661+
}

crates/web-ui/src/main.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ async fn main() -> Result<()> {
2424
.route("/api/compare", post(handlers::compare))
2525
.route("/api/analyze", post(handlers::analyze))
2626
.route("/api/configure", post(handlers::configure))
27-
.nest_service("/", ServeDir::new("static").fallback(handlers::spa_fallback))
27+
.nest_service("/", ServeDir::new("static"))
28+
.fallback(handlers::spa_fallback)
2829
.layer(CorsLayer::permissive());
2930

3031
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await?;

static/styles.css

Lines changed: 276 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -770,19 +770,293 @@ textarea:focus-visible {
770770
outline-offset: 2px;
771771
}
772772

773+
/* Comparison Results */
774+
.comparison-summary {
775+
display: grid;
776+
grid-template-columns: 1fr 2fr;
777+
gap: var(--spacing-xl);
778+
padding: var(--spacing-xl);
779+
background: var(--surface-hover);
780+
border-radius: var(--radius-lg);
781+
margin-bottom: var(--spacing-lg);
782+
}
783+
784+
.similarity-score {
785+
text-align: center;
786+
padding: var(--spacing-lg);
787+
background: var(--surface);
788+
border-radius: var(--radius-lg);
789+
border: 2px solid currentColor;
790+
}
791+
792+
.similarity-score h3 {
793+
font-size: var(--font-size-3xl);
794+
font-weight: 700;
795+
margin-bottom: var(--spacing-sm);
796+
}
797+
798+
.comparison-metrics {
799+
display: grid;
800+
grid-template-columns: repeat(3, 1fr);
801+
gap: var(--spacing-md);
802+
}
803+
804+
.changes-list {
805+
background: var(--surface);
806+
border-radius: var(--radius-lg);
807+
padding: var(--spacing-lg);
808+
}
809+
810+
.changes-list h4 {
811+
font-size: var(--font-size-lg);
812+
font-weight: 600;
813+
margin-bottom: var(--spacing-md);
814+
color: var(--text-primary);
815+
}
816+
817+
.change-item {
818+
padding: var(--spacing-md);
819+
border: 1px solid var(--border);
820+
border-radius: var(--radius-md);
821+
margin-bottom: var(--spacing-sm);
822+
background: var(--surface-hover);
823+
}
824+
825+
.change-header {
826+
display: flex;
827+
align-items: center;
828+
justify-content: space-between;
829+
margin-bottom: var(--spacing-sm);
830+
}
831+
832+
.change-type {
833+
padding: var(--spacing-xs) var(--spacing-sm);
834+
border-radius: var(--radius-sm);
835+
font-size: var(--font-size-xs);
836+
font-weight: 600;
837+
text-transform: uppercase;
838+
}
839+
840+
.change-type.add {
841+
background: #dcfce7;
842+
color: #166534;
843+
}
844+
845+
.change-type.modify {
846+
background: #fef3c7;
847+
color: #92400e;
848+
}
849+
850+
.change-type.delete {
851+
background: #fee2e2;
852+
color: #991b1b;
853+
}
854+
855+
.change-confidence {
856+
font-size: var(--font-size-xs);
857+
color: var(--text-muted);
858+
}
859+
860+
.change-description {
861+
font-size: var(--font-size-sm);
862+
color: var(--text-secondary);
863+
}
864+
865+
/* Analysis Results */
866+
.metrics-grid {
867+
display: grid;
868+
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
869+
gap: var(--spacing-lg);
870+
margin-bottom: var(--spacing-xl);
871+
}
872+
873+
.metric-card {
874+
background: var(--surface);
875+
border: 1px solid var(--border);
876+
border-radius: var(--radius-lg);
877+
padding: var(--spacing-lg);
878+
box-shadow: var(--shadow-sm);
879+
}
880+
881+
.metric-card h4 {
882+
font-size: var(--font-size-lg);
883+
font-weight: 600;
884+
margin-bottom: var(--spacing-md);
885+
color: var(--text-primary);
886+
}
887+
888+
.metric-list {
889+
display: flex;
890+
flex-direction: column;
891+
gap: var(--spacing-sm);
892+
}
893+
894+
.metric-item {
895+
display: flex;
896+
justify-content: space-between;
897+
align-items: center;
898+
padding: var(--spacing-sm);
899+
background: var(--surface-hover);
900+
border-radius: var(--radius-md);
901+
}
902+
903+
.duplicates-section {
904+
background: var(--surface);
905+
border-radius: var(--radius-lg);
906+
padding: var(--spacing-lg);
907+
}
908+
909+
.duplicates-section h4 {
910+
font-size: var(--font-size-lg);
911+
font-weight: 600;
912+
margin-bottom: var(--spacing-md);
913+
color: var(--text-primary);
914+
}
915+
916+
.duplicates-list {
917+
display: flex;
918+
flex-direction: column;
919+
gap: var(--spacing-md);
920+
}
921+
922+
.duplicate-item {
923+
padding: var(--spacing-md);
924+
border: 1px solid var(--border);
925+
border-radius: var(--radius-md);
926+
background: var(--surface-hover);
927+
}
928+
929+
.duplicate-header {
930+
display: flex;
931+
align-items: center;
932+
justify-content: space-between;
933+
margin-bottom: var(--spacing-sm);
934+
}
935+
936+
.function-signature {
937+
font-family: var(--font-mono);
938+
font-size: var(--font-size-sm);
939+
font-weight: 600;
940+
color: var(--text-primary);
941+
}
942+
943+
.similarity-badge {
944+
background: var(--warning-color);
945+
color: white;
946+
padding: var(--spacing-xs) var(--spacing-sm);
947+
border-radius: var(--radius-sm);
948+
font-size: var(--font-size-xs);
949+
font-weight: 600;
950+
}
951+
952+
.duplicate-locations {
953+
display: flex;
954+
flex-wrap: wrap;
955+
gap: var(--spacing-sm);
956+
}
957+
958+
.location {
959+
background: var(--surface);
960+
border: 1px solid var(--border);
961+
padding: var(--spacing-xs) var(--spacing-sm);
962+
border-radius: var(--radius-sm);
963+
font-size: var(--font-size-xs);
964+
color: var(--text-secondary);
965+
}
966+
967+
.no-duplicates {
968+
text-align: center;
969+
padding: var(--spacing-2xl);
970+
background: var(--surface);
971+
border-radius: var(--radius-lg);
972+
border: 1px solid var(--border);
973+
}
974+
975+
.no-duplicates h4 {
976+
font-size: var(--font-size-lg);
977+
font-weight: 600;
978+
margin-bottom: var(--spacing-sm);
979+
color: var(--success-color);
980+
}
981+
982+
.no-duplicates p {
983+
color: var(--text-secondary);
984+
}
985+
986+
/* Settings */
987+
.settings-container {
988+
max-width: 800px;
989+
margin: 0 auto;
990+
}
991+
992+
.settings-section {
993+
background: var(--surface);
994+
border: 1px solid var(--border);
995+
border-radius: var(--radius-lg);
996+
padding: var(--spacing-xl);
997+
margin-bottom: var(--spacing-lg);
998+
}
999+
1000+
.settings-section h3 {
1001+
font-size: var(--font-size-lg);
1002+
font-weight: 600;
1003+
margin-bottom: var(--spacing-lg);
1004+
color: var(--text-primary);
1005+
border-bottom: 1px solid var(--border);
1006+
padding-bottom: var(--spacing-sm);
1007+
}
1008+
1009+
.setting-group {
1010+
display: flex;
1011+
flex-direction: column;
1012+
gap: var(--spacing-md);
1013+
}
1014+
1015+
.setting-group label {
1016+
display: flex;
1017+
align-items: center;
1018+
gap: var(--spacing-sm);
1019+
font-size: var(--font-size-sm);
1020+
color: var(--text-secondary);
1021+
}
1022+
1023+
.setting-group input[type="number"],
1024+
.setting-group input[type="range"] {
1025+
padding: var(--spacing-sm);
1026+
border: 1px solid var(--border);
1027+
border-radius: var(--radius-md);
1028+
background: var(--surface);
1029+
color: var(--text-primary);
1030+
font-size: var(--font-size-sm);
1031+
}
1032+
1033+
.setting-group input[type="checkbox"] {
1034+
margin: 0;
1035+
}
1036+
1037+
.settings-actions {
1038+
text-align: center;
1039+
padding: var(--spacing-xl);
1040+
background: var(--surface-hover);
1041+
border-radius: var(--radius-lg);
1042+
display: flex;
1043+
gap: var(--spacing-md);
1044+
justify-content: center;
1045+
}
1046+
7731047
/* Print styles */
7741048
@media print {
7751049
.header,
7761050
.loading-overlay,
7771051
.toast-container {
7781052
display: none !important;
7791053
}
780-
1054+
7811055
.main {
7821056
padding: 0;
7831057
max-width: none;
7841058
}
785-
1059+
7861060
.view {
7871061
display: block !important;
7881062
}

0 commit comments

Comments
 (0)