"use client"; import { useState } from "react"; import { CharacterColorPresets } from "@/components/character/character-color-presets"; import { CharacterColorSliders } from "@/components/character/character-color-sliders"; import { CharacterLayerPreview } from "@/components/character/character-layer-preview"; import { CharacterLayerTabs } from "@/components/character/character-layer-tabs"; import { CharacterPieceSelector } from "@/components/character/character-piece-selector"; import { Card, CardContent, } from "@/components/ui/card"; import { clampHsl } from "@/lib/character/color-utils"; import { CHARACTER_LAYERS, COLOR_PRESETS, DEFAULT_GRAY_COLOR, LAYER_DEFAULT_COLORS, buildDefaultVariants, getLayerById, type ColorPreset, } from "@/lib/character/presets"; import type { LayerColorState, LayerVariantState } from "@/lib/character/types"; function buildInitialColors(): LayerColorState { return { ...LAYER_DEFAULT_COLORS }; } function SectionLabel({ children }: { children: React.ReactNode }) { return (

{children}

); } export function CharacterCreator() { const [colors, setColors] = useState(buildInitialColors); const [variants, setVariants] = useState( buildDefaultVariants, ); const [activePresetId, setActivePresetId] = useState( DEFAULT_GRAY_COLOR.id, ); const [activeLayerId, setActiveLayerId] = useState< (typeof CHARACTER_LAYERS)[number]["id"] >("skin"); const activeLayer = getLayerById(activeLayerId); const activeColor = colors[activeLayerId]; const pieceVariants = activeLayer.allowVariants ? activeLayer.variants : []; const applyPreset = (preset: ColorPreset) => { setActivePresetId(preset.id); setColors((current) => ({ ...current, [activeLayerId]: { ...preset.hsl }, })); }; const updateActiveColor = (nextColor: typeof activeColor) => { setActivePresetId(""); setColors((current) => ({ ...current, [activeLayerId]: clampHsl(nextColor), })); }; const handleLayerChange = (layerId: (typeof CHARACTER_LAYERS)[number]["id"]) => { setActiveLayerId(layerId); const layerColor = colors[layerId]; const matchingPreset = COLOR_PRESETS.find( (preset) => preset.hsl.h === layerColor.h && preset.hsl.s === layerColor.s && preset.hsl.l === layerColor.l, ); setActivePresetId(matchingPreset?.id ?? ""); }; const handleVariantChange = (variantId: string) => { setVariants((current) => ({ ...current, [activeLayerId]: variantId, })); }; return (
Style
Color
Adjust
); }