Skip to content

Commit 4ea293c

Browse files
committed
fix: Add close button to attractor modal and fix slider drag bug
1 parent e2adbea commit 4ea293c

File tree

1 file changed

+28
-14
lines changed

1 file changed

+28
-14
lines changed

src/App.tsx

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useState, useEffect } from 'react';
1+
import { useState, useEffect, memo } from 'react';
22
import { MapContainer, TileLayer, Marker, Circle, useMap, useMapEvents } from 'react-leaflet';
33
import L from 'leaflet';
44
import {
@@ -8,7 +8,8 @@ import {
88
RefreshCw,
99
Settings2,
1010
LocateFixed,
11-
Info
11+
Info,
12+
X
1213
} from 'lucide-react';
1314
import { motion, AnimatePresence } from 'motion/react';
1415
import { fetchQuantumNumbers, calculateAttractor, AttractorResult } from './services/quantumService';
@@ -51,6 +52,20 @@ function MapClickHandler({ onMapClick }: { onMapClick: (lat: number, lon: number
5152
return null;
5253
}
5354

55+
const RadiusSlider = memo(function RadiusSlider({ radius, setRadius }: { radius: number, setRadius: (val: number) => void }) {
56+
return (
57+
<input
58+
type="range"
59+
min="500"
60+
max="5000"
61+
step="100"
62+
value={radius}
63+
onChange={(e) => setRadius(parseInt(e.target.value))}
64+
className="w-full h-2 bg-zinc-800 rounded-lg appearance-none cursor-pointer accent-purple-500 mb-6"
65+
/>
66+
);
67+
});
68+
5469
export default function App() {
5570
const [startPos, setStartPos] = useState<[number, number]>([48.8566, 2.3522]); // Default Paris
5671
const [radius, setRadius] = useState(1000);
@@ -112,7 +127,6 @@ export default function App() {
112127

113128
const handleMapClick = (lat: number, lon: number) => {
114129
setStartPos([lat, lon]);
115-
setAttractor(null);
116130
};
117131

118132
return (
@@ -190,8 +204,16 @@ export default function App() {
190204
<span className="text-xs font-bold uppercase tracking-widest text-purple-400">Destination Found</span>
191205
<h3 className="text-lg font-bold text-white">Quantum Attractor</h3>
192206
</div>
193-
<div className="bg-purple-500/20 px-2 py-1 rounded text-[10px] font-mono text-purple-300 border border-purple-500/30">
194-
Score: {attractor.densityScore.toFixed(2)}
207+
<div className="flex items-center gap-2">
208+
<div className="bg-purple-500/20 px-2 py-1 rounded text-[10px] font-mono text-purple-300 border border-purple-500/30">
209+
Score: {attractor.densityScore.toFixed(2)}
210+
</div>
211+
<button
212+
onClick={() => setAttractor(null)}
213+
className="w-7 h-7 flex items-center justify-center bg-black/20 hover:bg-black/40 rounded-full text-zinc-400 hover:text-white transition-colors border border-white/5"
214+
>
215+
<X className="w-4 h-4" />
216+
</button>
195217
</div>
196218
</div>
197219

@@ -229,15 +251,7 @@ export default function App() {
229251
<span className="text-sm font-bold text-purple-400">{radius}m</span>
230252
</div>
231253

232-
<input
233-
type="range"
234-
min="500"
235-
max="5000"
236-
step="100"
237-
value={radius}
238-
onChange={(e) => setRadius(parseInt(e.target.value))}
239-
className="w-full h-2 bg-zinc-800 rounded-lg appearance-none cursor-pointer accent-purple-500 mb-6"
240-
/>
254+
<RadiusSlider radius={radius} setRadius={setRadius} />
241255

242256
<button
243257
onClick={handleGenerate}

0 commit comments

Comments
 (0)