import React, { useState, useEffect } from 'react'; import { Dialog, DialogTitle, DialogDescription, DialogRoot } from './Dialog'; import { Button } from './Button'; import { IconButton } from './IconButton'; import type { DesignScheme } from '~/types/design-scheme'; import { defaultDesignScheme, designFeatures, designFonts, paletteRoles } from '~/types/design-scheme'; export interface ColorSchemeDialogProps { designScheme?: DesignScheme; setDesignScheme?: (scheme: DesignScheme) => void; } export const ColorSchemeDialog: React.FC = ({ setDesignScheme, designScheme }) => { const [palette, setPalette] = useState<{ [key: string]: string }>(() => { if (designScheme?.palette) { return { ...defaultDesignScheme.palette, ...designScheme.palette }; } return defaultDesignScheme.palette; }); const [features, setFeatures] = useState(designScheme?.features || defaultDesignScheme.features); const [font, setFont] = useState(designScheme?.font || defaultDesignScheme.font); useEffect(() => { if (designScheme) { setPalette(() => ({ ...defaultDesignScheme.palette, ...designScheme.palette })); setFeatures(designScheme.features || defaultDesignScheme.features); setFont(designScheme.font || defaultDesignScheme.font); } else { // Reset to defaults if no designScheme provided setPalette(defaultDesignScheme.palette); setFeatures(defaultDesignScheme.features); setFont(defaultDesignScheme.font); } }, [designScheme]); const handleColorChange = (role: string, value: string) => { setPalette((prev) => ({ ...prev, [role]: value, })); }; const handleFeatureToggle = (key: string) => { setFeatures((prev) => (prev.includes(key) ? prev.filter((f) => f !== key) : [...prev, key])); }; const handleFontToggle = (key: string) => { setFont((prev) => (prev.includes(key) ? prev.filter((f) => f !== key) : [...prev, key])); }; const [isDialogOpen, setIsDialogOpen] = useState(false); const handleSave = () => { setDesignScheme?.({ palette, features, font }); setIsDialogOpen(false); }; const handleReset = () => { setPalette(defaultDesignScheme.palette); setFeatures(defaultDesignScheme.features); setFont(defaultDesignScheme.font); }; return (
setIsDialogOpen(!isDialogOpen)}>
Design Palette & Features Choose your color palette, typography, and key design features. These will be used as design instructions for the LLM.
Color Palette
{paletteRoles.map((role) => (
document.getElementById(`color-input-${role.key}`)?.click()} /> handleColorChange(role.key, e.target.value)} className="absolute inset-0 w-full h-full opacity-0 cursor-pointer" tabIndex={-1} />
{role.label}
{role.description}
{palette[role.key]}
))}
Typography Scroll for more
{designFonts.map((f) => ( ))}
Design Features Scroll for more
{designFeatures.map((f) => { const isSelected = features.includes(f.key); return ( ); })}
); };