🚀 Auto-deploy: BrainWind atualizado em 12/07/2026 16:34:24
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
import React from 'react';
|
||||
import { Separator } from '@/components/ui/separator';
|
||||
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
|
||||
|
||||
export const PressureLegend: React.FC = () => {
|
||||
return (
|
||||
<div className="absolute bottom-4 left-4 z-10 flex gap-3 p-3 bg-background/90 backdrop-blur-md border border-border rounded-lg shadow-sm">
|
||||
<Tooltip>
|
||||
<TooltipTrigger asChild>
|
||||
<div className="flex items-center gap-2 cursor-help">
|
||||
<div className="w-3 h-3 rounded-full bg-blue-500 shadow-[0_0_8px_rgba(59,130,246,0.5)]" />
|
||||
<span className="text-xs font-medium text-foreground underline decoration-dashed decoration-muted-foreground underline-offset-4">
|
||||
Pressão (Empuxo)
|
||||
</span>
|
||||
</div>
|
||||
</TooltipTrigger>
|
||||
<TooltipContent side="top">
|
||||
<p className="text-sm">
|
||||
<b>Azul (+)</b>: O vento está "empurrando" a superfície para dentro.
|
||||
</p>
|
||||
</TooltipContent>
|
||||
</Tooltip>
|
||||
|
||||
<Separator orientation="vertical" className="h-4" />
|
||||
|
||||
<Tooltip>
|
||||
<TooltipTrigger asChild>
|
||||
<div className="flex items-center gap-2 cursor-help">
|
||||
<div className="w-3 h-3 rounded-full bg-red-500 shadow-[0_0_8px_rgba(239,68,68,0.5)]" />
|
||||
<span className="text-xs font-medium text-foreground underline decoration-dashed decoration-muted-foreground underline-offset-4">
|
||||
Sucção (Arrasto)
|
||||
</span>
|
||||
</div>
|
||||
</TooltipTrigger>
|
||||
<TooltipContent side="top">
|
||||
<p className="text-sm">
|
||||
<b>Vermelho (-)</b>: O vento está "puxando" a superfície para fora.
|
||||
</p>
|
||||
</TooltipContent>
|
||||
</Tooltip>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
@@ -11,6 +11,7 @@ import Cylinder3DViewer from '@/components/three/Cylinder3D';
|
||||
import SceneCapturePanel from '../components/SceneCapturePanel';
|
||||
import ExportMenu from '../components/ExportMenu';
|
||||
import { EducationalManual } from '@/components/EducationalManual';
|
||||
import { PressureLegend } from '@/components/PressureLegend';
|
||||
import { exportGenericToPDF, type GenericPDFSection } from '../lib/export-generic-pdf';
|
||||
|
||||
const CylinderModule: React.FC = () => {
|
||||
@@ -146,6 +147,7 @@ const CylinderModule: React.FC = () => {
|
||||
<div className="absolute top-4 right-4 z-10">
|
||||
<EducationalManual type="cylinder" params={{ surface, endType, cpi: result.cpi }} />
|
||||
</div>
|
||||
<PressureLegend />
|
||||
<div className="w-full h-full bg-muted/20">
|
||||
<Cylinder3DViewer
|
||||
diameter={diameter}
|
||||
|
||||
@@ -11,6 +11,7 @@ import Dome3DViewer from '@/components/three/Dome3D';
|
||||
import SceneCapturePanel from '../components/SceneCapturePanel';
|
||||
import ExportMenu from '../components/ExportMenu';
|
||||
import { EducationalManual } from '@/components/EducationalManual';
|
||||
import { PressureLegend } from '@/components/PressureLegend';
|
||||
import { exportGenericToPDF, type GenericPDFSection } from '../lib/export-generic-pdf';
|
||||
|
||||
const DomeModule: React.FC = () => {
|
||||
@@ -124,6 +125,7 @@ const DomeModule: React.FC = () => {
|
||||
<div className="absolute top-4 right-4 z-10">
|
||||
<EducationalManual type="dome" params={{ rise, diameter, cpi }} />
|
||||
</div>
|
||||
<PressureLegend />
|
||||
<div className="w-full h-full bg-muted/20">
|
||||
<Dome3DViewer
|
||||
diameter={diameter}
|
||||
|
||||
@@ -14,6 +14,7 @@ import { Separator } from '@/components/ui/separator';
|
||||
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
|
||||
import ExportMenu from '../components/ExportMenu';
|
||||
import { EducationalManual } from '@/components/EducationalManual';
|
||||
import { PressureLegend } from '@/components/PressureLegend';
|
||||
|
||||
const GalpaoModule: React.FC = () => {
|
||||
const {
|
||||
@@ -150,17 +151,7 @@ const GalpaoModule: React.FC = () => {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="absolute bottom-4 left-4 z-10 flex gap-3 p-3 bg-background/90 backdrop-blur-md border border-border rounded-lg shadow-sm">
|
||||
<div className="flex items-center gap-2">
|
||||
<div className="w-3 h-3 rounded-full bg-blue-500 shadow-[0_0_8px_rgba(59,130,246,0.5)]" />
|
||||
<span className="text-xs font-medium text-foreground">Pressão (Empuxo)</span>
|
||||
</div>
|
||||
<Separator orientation="vertical" className="h-4" />
|
||||
<div className="flex items-center gap-2">
|
||||
<div className="w-3 h-3 rounded-full bg-red-500 shadow-[0_0_8px_rgba(239,68,68,0.5)]" />
|
||||
<span className="text-xs font-medium text-foreground">Sucção (Arrasto)</span>
|
||||
</div>
|
||||
</div>
|
||||
<PressureLegend />
|
||||
|
||||
<div className="w-full h-full cursor-grab active:cursor-grabbing bg-muted/20">
|
||||
<Warehouse3DViewer />
|
||||
|
||||
@@ -10,6 +10,7 @@ import IsolatedRoof3DViewer from '@/components/three/IsolatedRoof3D';
|
||||
import SceneCapturePanel from '../components/SceneCapturePanel';
|
||||
import ExportMenu from '../components/ExportMenu';
|
||||
import { EducationalManual } from '@/components/EducationalManual';
|
||||
import { PressureLegend } from '@/components/PressureLegend';
|
||||
import { exportGenericToPDF, type GenericPDFSection } from '../lib/export-generic-pdf';
|
||||
|
||||
const IsolatedRoofModule: React.FC = () => {
|
||||
@@ -168,6 +169,7 @@ const IsolatedRoofModule: React.FC = () => {
|
||||
<div className="absolute top-4 right-4 z-10">
|
||||
<EducationalManual type="isolated-roof" params={{ theta, type }} />
|
||||
</div>
|
||||
<PressureLegend />
|
||||
<IsolatedRoof3DViewer
|
||||
type={type}
|
||||
theta={theta}
|
||||
|
||||
@@ -10,6 +10,7 @@ import Sign3DViewer from '@/components/three/Sign3D';
|
||||
import SceneCapturePanel from '../components/SceneCapturePanel';
|
||||
import ExportMenu from '../components/ExportMenu';
|
||||
import { EducationalManual } from '@/components/EducationalManual';
|
||||
import { PressureLegend } from '@/components/PressureLegend';
|
||||
import { exportGenericToPDF, type GenericPDFSection } from '../lib/export-generic-pdf';
|
||||
|
||||
const SignModule: React.FC = () => {
|
||||
@@ -122,6 +123,7 @@ const SignModule: React.FC = () => {
|
||||
<div className="absolute top-4 right-4 z-10">
|
||||
<EducationalManual type="sign" params={{ length, height, alpha, hasEndPlates }} />
|
||||
</div>
|
||||
<PressureLegend />
|
||||
|
||||
<Sign3DViewer
|
||||
length={length}
|
||||
|
||||
@@ -10,6 +10,7 @@ import Vault3DViewer from '@/components/three/Vault3D';
|
||||
import SceneCapturePanel from '../components/SceneCapturePanel';
|
||||
import ExportMenu from '../components/ExportMenu';
|
||||
import { EducationalManual } from '@/components/EducationalManual';
|
||||
import { PressureLegend } from '@/components/PressureLegend';
|
||||
import { exportGenericToPDF, type GenericPDFSection } from '../lib/export-generic-pdf';
|
||||
|
||||
const VaultModule: React.FC = () => {
|
||||
@@ -130,6 +131,7 @@ const VaultModule: React.FC = () => {
|
||||
<div className="absolute top-4 right-4 z-10">
|
||||
<EducationalManual type="vault" params={{ rise, span, regime, localCpi }} />
|
||||
</div>
|
||||
<PressureLegend />
|
||||
<div className="w-full h-full bg-muted/20">
|
||||
<Vault3DViewer span={span} length={length} rise={rise} cpi={localCpi} cpeProfile={{ ...result.windPerpendicular }} />
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user