'use client'; import { useState } from 'react'; import { Slider } from '@/components/ui/slider'; import { Button } from '@/components/ui/button'; import { useLighten, useDarken, useSaturate, useDesaturate, useRotate, useComplement } from '@/lib/api/queries'; import { toast } from 'sonner'; interface ManipulationPanelProps { color: string; onColorChange: (color: string) => void; } export function ManipulationPanel({ color, onColorChange }: ManipulationPanelProps) { const [lightenAmount, setLightenAmount] = useState(0.2); const [darkenAmount, setDarkenAmount] = useState(0.2); const [saturateAmount, setSaturateAmount] = useState(0.2); const [desaturateAmount, setDesaturateAmount] = useState(0.2); const [rotateAmount, setRotateAmount] = useState(30); const lightenMutation = useLighten(); const darkenMutation = useDarken(); const saturateMutation = useSaturate(); const desaturateMutation = useDesaturate(); const rotateMutation = useRotate(); const complementMutation = useComplement(); const handleLighten = async () => { try { const result = await lightenMutation.mutateAsync({ colors: [color], amount: lightenAmount, }); if (result.results[0]) { onColorChange(result.results[0].output); toast.success(`Lightened by ${(lightenAmount * 100).toFixed(0)}%`); } } catch (error) { toast.error('Failed to lighten color'); } }; const handleDarken = async () => { try { const result = await darkenMutation.mutateAsync({ colors: [color], amount: darkenAmount, }); if (result.results[0]) { onColorChange(result.results[0].output); toast.success(`Darkened by ${(darkenAmount * 100).toFixed(0)}%`); } } catch (error) { toast.error('Failed to darken color'); } }; const handleSaturate = async () => { try { const result = await saturateMutation.mutateAsync({ colors: [color], amount: saturateAmount, }); if (result.results[0]) { onColorChange(result.results[0].output); toast.success(`Saturated by ${(saturateAmount * 100).toFixed(0)}%`); } } catch (error) { toast.error('Failed to saturate color'); } }; const handleDesaturate = async () => { try { const result = await desaturateMutation.mutateAsync({ colors: [color], amount: desaturateAmount, }); if (result.results[0]) { onColorChange(result.results[0].output); toast.success(`Desaturated by ${(desaturateAmount * 100).toFixed(0)}%`); } } catch (error) { toast.error('Failed to desaturate color'); } }; const handleRotate = async () => { try { const result = await rotateMutation.mutateAsync({ colors: [color], amount: rotateAmount, }); if (result.results[0]) { onColorChange(result.results[0].output); toast.success(`Rotated hue by ${rotateAmount}°`); } } catch (error) { toast.error('Failed to rotate hue'); } }; const handleComplement = async () => { try { const result = await complementMutation.mutateAsync([color]); if (result.results[0]) { onColorChange(result.results[0].output); toast.success('Generated complementary color'); } } catch (error) { toast.error('Failed to generate complement'); } }; const isLoading = lightenMutation.isPending || darkenMutation.isPending || saturateMutation.isPending || desaturateMutation.isPending || rotateMutation.isPending || complementMutation.isPending; return (