diff --git a/src/app/App.tsx b/src/app/App.tsx
index 99904b8b..09a4a6d4 100644
--- a/src/app/App.tsx
+++ b/src/app/App.tsx
@@ -22700,6 +22700,187 @@ export function App({
);
})}
+
+
Road Junctions
+
+ Junctions are visual corridor merges only. They clip
+ road edges, repeaters, and generated colliders near the
+ merge without changing NPC or camera path routing.
+
+ {selectedPathJunctionCandidates.length === 0 ? (
+
+ No uncreated road junction candidates for this path.
+
+ ) : (
+
+ {selectedPathJunctionCandidates
+ .slice(0, 6)
+ .map((candidate, candidateIndex) => (
+
+
+
+ Candidate {candidateIndex + 1}
+
+
+ handleCreateSplineCorridorJunction(
+ candidate
+ )
+ }
+ >
+ Create Junction
+
+
+
+ {candidate.connections.length} connections at
+ X {candidate.center.x.toFixed(2)}, Z{" "}
+ {candidate.center.z.toFixed(2)}
+
+
+ ))}
+
+ )}
+ {selectedPathJunctions.length === 0 ? (
+
+ No persisted junctions are connected to this path.
+
+ ) : (
+
+ {selectedPathJunctions.map((junction) => (
+
+
+
+ {junction.name ?? "Road Junction"}
+
+
+ handleDeleteSplineCorridorJunction(
+ junction.id
+ )
+ }
+ >
+ Delete
+
+
+
+ Enabled
+
+ handleSplineCorridorJunctionChange(
+ createSplineCorridorJunction({
+ ...junction,
+ enabled: event.currentTarget.checked
+ }),
+ event.currentTarget.checked
+ ? "Enabled spline corridor junction."
+ : "Disabled spline corridor junction."
+ )
+ }
+ />
+
+
+ Radius
+ {
+ const radius =
+ normalizeSplineCorridorJunctionRadius(
+ Number(event.currentTarget.value)
+ );
+ handleSplineCorridorJunctionChange(
+ createSplineCorridorJunction({
+ ...junction,
+ radius,
+ connections: junction.connections.map(
+ (connection) => ({
+ ...connection,
+ clipDistance: radius
+ })
+ )
+ }),
+ "Updated spline corridor junction radius."
+ );
+ }}
+ />
+
+
+ Material
+
+ handleSplineCorridorJunctionChange(
+ createSplineCorridorJunction({
+ ...junction,
+ materialId:
+ normalizeSplineCorridorJunctionMaterialId(
+ event.currentTarget.value
+ )
+ }),
+ "Updated spline corridor junction material."
+ )
+ }
+ >
+ Unassigned preview
+ {materialList.map((material) => (
+
+ {material.name}
+
+ ))}
+
+
+
+ Terrain Mode
+
+ handleSplineCorridorJunctionChange(
+ createSplineCorridorJunction({
+ ...junction,
+ terrainMode:
+ normalizeSplineCorridorJunctionTerrainMode(
+ event.currentTarget.value
+ ) as SplineCorridorJunctionTerrainMode
+ }),
+ "Updated spline corridor junction terrain mode."
+ )
+ }
+ >
+
+ Flatten and paint
+
+ Paint only
+ None
+
+
+
+ ))}
+
+ )}
+