"use client"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Separator } from "@/components/ui/separator"; import { ScrollArea } from "@/components/ui/scroll-area"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { PropertyItem, PropertyItemLabel, PropertyItemValue, PropertyGroup, } from "../../properties-panel/property-item"; import { FPS_PRESETS } from "@/constants/timeline-constants"; import { useProjectStore } from "@/stores/project-store"; import { useEditorStore } from "@/stores/editor-store"; import { useAspectRatio } from "@/hooks/use-aspect-ratio"; import Image from "next/image"; import { cn } from "@/lib/utils"; import { colors } from "@/data/colors/solid"; import { patternCraftGradients } from "@/data/colors/pattern-craft"; import { PipetteIcon } from "lucide-react"; import { useMemo, memo, useCallback } from "react"; import { syntaxUIGradients } from "@/data/colors/syntax-ui"; export function SettingsView() { return ; } function ProjectSettingsTabs() { return (
Project info Background
); } function ProjectInfoView() { const { activeProject, updateProjectFps } = useProjectStore(); const { canvasPresets, setCanvasSize } = useEditorStore(); const { getDisplayName } = useAspectRatio(); const handleAspectRatioChange = (value: string) => { const preset = canvasPresets.find((p) => p.name === value); if (preset) { setCanvasSize({ width: preset.width, height: preset.height }); } }; const handleFpsChange = (value: string) => { const fps = parseFloat(value); updateProjectFps(fps); }; return (
Name {activeProject?.name || "Untitled project"} Aspect ratio Frame rate
); } const BlurPreview = memo( ({ blur, isSelected, onSelect, }: { blur: { label: string; value: number }; isSelected: boolean; onSelect: () => void; }) => (
{`Blur
{blur.label}
) ); BlurPreview.displayName = "BlurPreview"; const BackgroundPreviews = memo( ({ backgrounds, currentBackgroundColor, isColorBackground, handleColorSelect, useBackgroundColor = false, }: { backgrounds: string[]; currentBackgroundColor: string; isColorBackground: boolean; handleColorSelect: (bg: string) => void; useBackgroundColor?: boolean; }) => { return useMemo( () => backgrounds.map((bg) => (
handleColorSelect(bg)} /> )), [ backgrounds, isColorBackground, currentBackgroundColor, handleColorSelect, useBackgroundColor, ] ); } ); BackgroundPreviews.displayName = "BackgroundPreviews"; function BackgroundView() { const { activeProject, updateBackgroundType } = useProjectStore(); const blurLevels = useMemo( () => [ { label: "Light", value: 4 }, { label: "Medium", value: 8 }, { label: "Heavy", value: 18 }, ], [] ); const handleBlurSelect = useCallback( async (blurIntensity: number) => { await updateBackgroundType("blur", { blurIntensity }); }, [updateBackgroundType] ); const handleColorSelect = useCallback( async (color: string) => { await updateBackgroundType("color", { backgroundColor: color }); }, [updateBackgroundType] ); const currentBlurIntensity = activeProject?.blurIntensity || 8; const isBlurBackground = activeProject?.backgroundType === "blur"; const currentBackgroundColor = activeProject?.backgroundColor || "#000000"; const isColorBackground = activeProject?.backgroundType === "color"; const blurPreviews = useMemo( () => blurLevels.map((blur) => ( handleBlurSelect(blur.value)} /> )), [blurLevels, isBlurBackground, currentBlurIntensity, handleBlurSelect] ); return (
{blurPreviews}
); }