From 93ffc04eb690ea4ba6f4276bb3120d72ab67f63f Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Thu, 14 May 2026 16:42:34 +0000 Subject: [PATCH] Changes Co-authored-by: Reifonas <211114984+Reifonas@users.noreply.github.com> --- src/components/SceneModelList.tsx | 121 ++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 src/components/SceneModelList.tsx diff --git a/src/components/SceneModelList.tsx b/src/components/SceneModelList.tsx new file mode 100644 index 0000000..0575237 --- /dev/null +++ b/src/components/SceneModelList.tsx @@ -0,0 +1,121 @@ +import { Eye, EyeOff, Lock, Unlock, Copy, Trash2, Box, Layers } from 'lucide-react'; +import { Button } from '@/components/ui/button'; +import { useModelStore } from '@/stores/useModelStore'; +import { toast } from 'sonner'; + +interface SceneModelListProps { + compact?: boolean; +} + +export function SceneModelList({ compact = false }: SceneModelListProps) { + const models = useModelStore((s) => s.models); + const activeId = useModelStore((s) => s.activeModelId); + const setActive = useModelStore((s) => s.setActiveModel); + const removeModel = useModelStore((s) => s.removeModel); + const toggleVisible = useModelStore((s) => s.toggleModelVisible); + const toggleLocked = useModelStore((s) => s.toggleModelLocked); + const duplicate = useModelStore((s) => s.duplicateModel); + const max = useModelStore((s) => s.maxModels); + + if (models.length === 0) { + return ( +
+ +

Nenhuma peça na cena

+
+ ); + } + + const textSize = compact ? 'text-[9px]' : 'text-[11px]'; + const padding = compact ? 'p-1.5' : 'p-2'; + + return ( +
+
+
+ + + Cena + +
+ + {models.length}/{max} + +
+ +
+ {models.map((m) => { + const isActive = m.id === activeId; + return ( +
setActive(m.id)} + > +
+ + + {m.fileName} + + + + + +
+ ); + })} +
+
+ ); +}