🚀 Auto-deploy: BrainWind atualizado em 21/07/2026 14:27:40

This commit is contained in:
2026-07-21 14:27:40 +00:00
parent d85cb2151b
commit f88a551c14
9 changed files with 548 additions and 104 deletions
+89
View File
@@ -12,6 +12,8 @@ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@
import { Badge } from '@/components/ui/badge';
import { Separator } from '@/components/ui/separator';
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
import { Tabs, TabsList, TabsTrigger } from '@/components/ui/tabs';
import { AlertCircle, Lightbulb } from 'lucide-react';
import ExportMenu from '../components/ExportMenu';
import { EducationalManual } from '@/components/EducationalManual';
import { PressureLegend } from '@/components/PressureLegend';
@@ -25,6 +27,12 @@ const GalpaoModule: React.FC = () => {
length,
height,
roofPitch,
template,
extraHeight,
skirtHeight,
setTemplate,
setExtraHeight,
setSkirtHeight,
setWidth,
setLength,
setHeight,
@@ -68,6 +76,87 @@ const GalpaoModule: React.FC = () => {
</CardHeader>
<CardContent className="space-y-6">
<WindParametersSummary />
<div className="space-y-3">
<div className="flex justify-between items-center">
<label className="text-sm font-medium text-foreground">Template Visual</label>
</div>
<Tabs value={template} onValueChange={(v) => setTemplate(v as any)} className="w-full">
<TabsList className="w-full grid grid-cols-2 md:grid-cols-4 h-auto p-1">
<TabsTrigger value="standard" className="text-xs py-1.5">Padrão</TabsTrigger>
<TabsTrigger value="parapet" className="text-xs py-1.5">Platibanda</TabsTrigger>
<TabsTrigger value="skirt" className="text-xs py-1.5">Saia</TabsTrigger>
<TabsTrigger value="skirt_parapet" className="text-xs py-1.5">Saia + Plat.</TabsTrigger>
</TabsList>
</Tabs>
{(template === 'parapet' || template === 'skirt_parapet') && (
<div className="bg-amber-500/10 border border-amber-500/20 rounded-md p-3 mt-3">
<div className="flex gap-2">
<AlertCircle className="w-4 h-4 text-amber-500 shrink-0 mt-0.5" />
<p className="text-xs text-amber-600 dark:text-amber-400">
A platibanda bloqueia o fluxo. Calcule os esforços sobre ela no módulo de <b>Muros/Placas</b>.
</p>
</div>
</div>
)}
{(template === 'skirt' || template === 'skirt_parapet') && (
<div className="bg-blue-500/10 border border-blue-500/20 rounded-md p-3 mt-3">
<div className="flex gap-2">
<Lightbulb className="w-4 h-4 text-blue-500 shrink-0 mt-0.5" />
<p className="text-xs text-blue-600 dark:text-blue-400">
Galpão aberto funciona como uma Cobertura Isolada.
</p>
</div>
</div>
)}
</div>
{template !== 'standard' && (
<div className="space-y-4 bg-muted/50 p-3 rounded-lg border border-border">
{(template === 'parapet' || template === 'skirt_parapet') && (
<div className="space-y-3">
<div className="flex justify-between items-center">
<Tooltip>
<TooltipTrigger asChild>
<label className="text-sm font-medium text-foreground cursor-help underline decoration-dashed decoration-muted-foreground underline-offset-4">
Altura da Platibanda
</label>
</TooltipTrigger>
<TooltipContent side="right">
<p className="text-sm">Altura adicional modelada visualmente no topo.</p>
</TooltipContent>
</Tooltip>
<span className="text-sm text-muted-foreground font-mono">{extraHeight} m</span>
</div>
<Slider min={0.5} max={5} step={0.1} value={[extraHeight]} onValueChange={(vals) => setExtraHeight(vals[0])} className="py-1 cursor-pointer" />
</div>
)}
{(template === 'skirt' || template === 'skirt_parapet') && (
<div className="space-y-3">
<div className="flex justify-between items-center">
<Tooltip>
<TooltipTrigger asChild>
<label className="text-sm font-medium text-foreground cursor-help underline decoration-dashed decoration-muted-foreground underline-offset-4">
Altura da Saia
</label>
</TooltipTrigger>
<TooltipContent side="right">
<p className="text-sm">Altura da saia fechada lateral (de cima para baixo).</p>
</TooltipContent>
</Tooltip>
<span className="text-sm text-muted-foreground font-mono">{skirtHeight} m</span>
</div>
<Slider min={0.5} max={height} step={0.1} value={[skirtHeight]} onValueChange={(vals) => setSkirtHeight(vals[0])} className="py-1 cursor-pointer" />
</div>
)}
</div>
)}
<Separator />
<div className="space-y-3">
<div className="flex justify-between items-center">
<Tooltip>