|
8 | 8 | import useSeo from '../../hooks/useSeo'; |
9 | 9 | import { useToast } from '../../hooks/useToast'; |
10 | 10 | import BreadcrumbTitle from '../../components/BreadcrumbTitle'; |
| 11 | +import CustomSlider from '../../components/CustomSlider'; |
11 | 12 |
|
12 | 13 | const AbstractWavesPage = () => { |
13 | 14 | useSeo({ |
@@ -206,106 +207,57 @@ const AbstractWavesPage = () => { |
206 | 207 | </div> |
207 | 208 |
|
208 | 209 | <div className="space-y-4"> |
209 | | - <div> |
210 | | - <label className="flex justify-between text-sm font-medium text-gray-700 mb-1"> |
211 | | - <span>Line Count</span> |
212 | | - <span className="text-gray-500">{lineCount}</span> |
213 | | - </label> |
214 | | - <input |
215 | | - type="range" |
216 | | - min="10" |
217 | | - max="100" |
218 | | - value={lineCount} |
219 | | - onChange={(e) => setLineCount(Number(e.target.value))} |
220 | | - className="w-full accent-black" |
221 | | - /> |
222 | | - </div> |
223 | | - <div> |
224 | | - <label className="flex justify-between text-sm font-medium text-gray-700 mb-1"> |
225 | | - <span>Amplitude (Height)</span> |
226 | | - <span className="text-gray-500">{Math.round(amplitude)}</span> |
227 | | - </label> |
228 | | - <input |
229 | | - type="range" |
230 | | - min="0" |
231 | | - max="150" |
232 | | - value={amplitude} |
233 | | - onChange={(e) => setAmplitude(Number(e.target.value))} |
234 | | - className="w-full accent-black" |
235 | | - /> |
236 | | - </div> |
237 | | - <div> |
238 | | - <label className="flex justify-between text-sm font-medium text-gray-700 mb-1"> |
239 | | - <span>Frequency (Width)</span> |
240 | | - <span className="text-gray-500">{frequency.toFixed(3)}</span> |
241 | | - </label> |
242 | | - <input |
243 | | - type="range" |
244 | | - min="0.001" |
245 | | - max="0.05" |
246 | | - step="0.001" |
247 | | - value={frequency} |
248 | | - onChange={(e) => setFrequency(Number(e.target.value))} |
249 | | - className="w-full accent-black" |
250 | | - /> |
251 | | - </div> |
252 | | - <div> |
253 | | - <label className="flex justify-between text-sm font-medium text-gray-700 mb-1"> |
254 | | - <span>Spacing</span> |
255 | | - <span className="text-gray-500">{perspective}px</span> |
256 | | - </label> |
257 | | - <input |
258 | | - type="range" |
259 | | - min="2" |
260 | | - max="40" |
261 | | - value={perspective} |
262 | | - onChange={(e) => setPerspective(Number(e.target.value))} |
263 | | - className="w-full accent-black" |
264 | | - /> |
265 | | - </div> |
266 | | - <div> |
267 | | - <label className="flex justify-between text-sm font-medium text-gray-700 mb-1"> |
268 | | - <span>Noise / Distortion</span> |
269 | | - <span className="text-gray-500">{Math.round(noise)}</span> |
270 | | - </label> |
271 | | - <input |
272 | | - type="range" |
273 | | - min="0" |
274 | | - max="100" |
275 | | - value={noise} |
276 | | - onChange={(e) => setNoise(Number(e.target.value))} |
277 | | - className="w-full accent-black" |
278 | | - /> |
279 | | - </div> |
280 | | - <div> |
281 | | - <label className="flex justify-between text-sm font-medium text-gray-700 mb-1"> |
282 | | - <span>Phase Shift</span> |
283 | | - <span className="text-gray-500">{phase.toFixed(1)}</span> |
284 | | - </label> |
285 | | - <input |
286 | | - type="range" |
287 | | - min="0" |
288 | | - max="10" |
289 | | - step="0.1" |
290 | | - value={phase} |
291 | | - onChange={(e) => setPhase(Number(e.target.value))} |
292 | | - className="w-full accent-black" |
293 | | - /> |
294 | | - </div> |
295 | | - <div> |
296 | | - <label className="flex justify-between text-sm font-medium text-gray-700 mb-1"> |
297 | | - <span>Line Width</span> |
298 | | - <span className="text-gray-500">{lineWidth}px</span> |
299 | | - </label> |
300 | | - <input |
301 | | - type="range" |
302 | | - min="1" |
303 | | - max="10" |
304 | | - value={lineWidth} |
305 | | - onChange={(e) => setLineWidth(Number(e.target.value))} |
306 | | - className="w-full accent-black" |
307 | | - /> |
308 | | - </div> |
| 210 | + <CustomSlider |
| 211 | + label="Line Count" |
| 212 | + min={10} |
| 213 | + max={100} |
| 214 | + value={lineCount} |
| 215 | + onChange={setLineCount} |
| 216 | + /> |
| 217 | + <CustomSlider |
| 218 | + label="Amplitude (Height)" |
| 219 | + min={0} |
| 220 | + max={150} |
| 221 | + value={Math.round(amplitude)} |
| 222 | + onChange={setAmplitude} |
| 223 | + /> |
| 224 | + <CustomSlider |
| 225 | + label="Frequency (Width)" |
| 226 | + min={0.001} |
| 227 | + max={0.05} |
| 228 | + step={0.001} |
| 229 | + value={frequency} |
| 230 | + onChange={setFrequency} |
| 231 | + /> |
| 232 | + <CustomSlider |
| 233 | + label="Spacing" |
| 234 | + min={2} |
| 235 | + max={40} |
| 236 | + value={perspective} |
| 237 | + onChange={setPerspective} |
| 238 | + /> |
| 239 | + <CustomSlider |
| 240 | + label="Noise / Distortion" |
| 241 | + min={0} |
| 242 | + max={100} |
| 243 | + value={Math.round(noise)} |
| 244 | + onChange={setNoise} |
| 245 | + /> |
| 246 | + <CustomSlider |
| 247 | + label="Phase Shift" |
| 248 | + min={0} |
| 249 | + max={10} |
| 250 | + step={0.1} |
| 251 | + value={phase} |
| 252 | + onChange={setPhase} |
| 253 | + /> |
| 254 | + <CustomSlider |
| 255 | + label="Line Width" |
| 256 | + min={1} |
| 257 | + max={10} |
| 258 | + value={lineWidth} |
| 259 | + onChange={setLineWidth} |
| 260 | + /> |
309 | 261 | </div> |
310 | 262 | <div className="bg-gray-100 p-3 rounded-lg text-xs text-gray-600"> |
311 | 263 | <strong>Tip:</strong> "Opaque Lines" hides the waves behind the |
|
0 commit comments