Reverted to commit c93e56640d

This commit is contained in:
gpt-engineer-app[bot]
2026-05-24 18:56:17 +00:00
parent 13c1ad315d
commit 79b95ce3c8
17 changed files with 1069 additions and 1878 deletions
+6 -86
View File
@@ -1,4 +1,4 @@
import { Eye, Grid3X3, Ruler, Trash2, Camera, LayoutGrid, Palette, Box, Move3D, Undo2, MousePointerClick, EyeOff, Focus, Download, Footprints, Compass, Map } from 'lucide-react';
import { Eye, Grid3X3, Ruler, Trash2, Camera, LayoutGrid, Palette, Box, Move3D, Undo2, MousePointerClick, EyeOff, Focus, Download } from 'lucide-react';
import { Slider } from '@/components/ui/slider';
import { Button } from '@/components/ui/button';
import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';
@@ -20,16 +20,6 @@ const WIRE_COLORS = [
{ label: 'Branco', value: '#e2e8f0' },
];
const colorClassMap: Record<string, string> = {
'#8899aa': 'bg-[#8899aa]',
'#ef4444': 'bg-red-500',
'#22c55e': 'bg-green-500',
'#3b82f6': 'bg-blue-500',
'#eab308': 'bg-yellow-500',
'#f97316': 'bg-orange-500',
'#e2e8f0': 'bg-slate-200',
};
export function ViewerControls() {
const {
opacity, setOpacity, renderMode, setRenderMode,
@@ -44,9 +34,6 @@ export function ViewerControls() {
selectionMode, setSelectionMode,
selectedElementKeys, hiddenElementKeys, isolatedElementKeys,
hideSelectedElements, isolateSelectedElements, showAllElements, clearElementSelection,
desktopCameraMode, setDesktopCameraMode,
xrEnvironment, setXrEnvironment,
xrScaleMode, setXrScaleMode,
} = useModelStore();
const activeModel = models.find(m => m.id === activeModelId);
const hasSelection = selectedElementKeys.size > 0;
@@ -125,13 +112,13 @@ export function ViewerControls() {
size="sm"
className="gap-2 h-9"
onClick={() => {
const next = renderMode === 'solid' ? 'edges' : 'solid';
const next = renderMode === 'solid' ? 'wireframe' : renderMode === 'wireframe' ? 'edges' : 'solid';
setRenderMode(next);
}}
>
{renderMode === 'edges' ? <Box className="h-3.5 w-3.5" /> : <Grid3X3 className="h-3.5 w-3.5" />}
<span className="font-mono text-xs">
{renderMode === 'solid' ? 'Sólido' : 'Bordas'}
{renderMode === 'solid' ? 'Sólido' : renderMode === 'wireframe' ? 'Wireframe' : 'Bordas'}
</span>
</Button>
@@ -141,7 +128,7 @@ export function ViewerControls() {
<PopoverTrigger asChild>
<Button variant="outline" size="sm" className="gap-2 h-9">
<Palette className="h-3.5 w-3.5" />
<div className={`h-3 w-3 rounded-full border border-muted-foreground/30 ${colorClassMap[wireframeColor] || 'bg-[#8899aa]'}`} />
<div className="h-3 w-3 rounded-full border border-muted-foreground/30" style={{ backgroundColor: wireframeColor }} />
</Button>
</PopoverTrigger>
<PopoverContent className="w-56 space-y-3" side="top" align="start">
@@ -151,7 +138,8 @@ export function ViewerControls() {
{WIRE_COLORS.map((c) => (
<button
key={c.value}
className={`h-6 w-6 rounded-full border-2 transition-all ${colorClassMap[c.value] || 'bg-[#8899aa]'} ${wireframeColor === c.value ? 'border-primary scale-110' : 'border-muted-foreground/30'}`}
className={`h-6 w-6 rounded-full border-2 transition-all ${wireframeColor === c.value ? 'border-primary scale-110' : 'border-muted-foreground/30'}`}
style={{ backgroundColor: c.value }}
onClick={() => setWireframeColor(c.value)}
title={c.label}
/>
@@ -293,74 +281,6 @@ export function ViewerControls() {
)}
</div>
{/* Seletor de Câmera (Orbit vs Walk) */}
<Button
variant={desktopCameraMode === 'walk' ? 'default' : 'outline'}
size="sm"
className="gap-2 h-9"
onClick={() => {
const next = desktopCameraMode === 'orbit' ? 'walk' : 'orbit';
setDesktopCameraMode(next);
if (next === 'walk') {
toast.info("Passeio 3D Ativo: clique no visualizador para prender o mouse. WASD = andar, Q/E = subir/descer, ESC = soltar mouse.");
}
}}
title="Alternar entre câmera orbital e passeio em primeira pessoa"
>
{desktopCameraMode === 'walk' ? <Footprints className="h-3.5 w-3.5" /> : <Compass className="h-3.5 w-3.5" />}
<span className="font-mono text-xs">
{desktopCameraMode === 'walk' ? 'Passeio 3D' : 'Câmera'}
</span>
</Button>
{/* Seletor de Cenário 2D */}
<Popover>
<PopoverTrigger asChild>
<Button variant="outline" size="sm" className="gap-2 h-9" title="Alterar cenário de fundo do visualizador">
<Map className="h-3.5 w-3.5" />
<span className="font-mono text-xs">
{xrEnvironment === 'passthrough' ? 'Estúdio' : xrEnvironment === 'office' ? 'Escritório' : 'Campo Aberto'}
</span>
</Button>
</PopoverTrigger>
<PopoverContent className="w-56 space-y-2" side="top" align="start">
<div className="flex flex-col gap-1.5">
<span className="font-mono text-[10px] font-semibold text-muted-foreground uppercase tracking-wider mb-1">
Cenário de Fundo
</span>
<Button
variant={xrEnvironment === 'passthrough' ? 'default' : 'ghost'}
size="sm"
className="justify-start font-mono text-xs h-8"
onClick={() => setXrEnvironment('passthrough')}
>
🌌 Estúdio (Padrão)
</Button>
<Button
variant={xrEnvironment === 'office' ? 'default' : 'ghost'}
size="sm"
className="justify-start font-mono text-xs h-8"
onClick={() => {
setXrEnvironment('office');
setXrScaleMode('tabletop');
}}
>
🏢 Escritório (VR Mesa)
</Button>
<Button
variant={xrEnvironment === 'field' ? 'default' : 'ghost'}
size="sm"
className="justify-start font-mono text-xs h-8"
onClick={() => {
setXrEnvironment('field');
setXrScaleMode('realscale');
}}
>
🌳 Campo Aberto (VR Grama)
</Button>
</div>
</PopoverContent>
</Popover>
{/* Screenshot */}
<Button