import { forwardRef, lazy, Suspense, useImperativeHandle, useState } from 'react'; import StateMachinePanel from './StateMachinePanel'; import TimelinePanel from './TimelinePanel'; import PidPanel from './PidPanel'; import EventLog from './EventLog'; import MetricsPanel from './MetricsPanel'; import SensorPanel from './SensorPanel'; import ScenarioPanel from './ScenarioPanel'; import OzonCriteriaPanel from './OzonCriteriaPanel'; import SorterScene from './SorterScene'; import { DEMO_STEPS } from '../data/demoSteps'; import { SCENARIOS } from '../data/scenarios'; import type { ScenarioId, SimulationState } from '../domain/types'; const ThreeCapabilityCheck = lazy(() => import('./ThreeD/ThreeCapabilityCheck')); export interface EngineeringDetailsHandle { open: () => void; } interface Props { simulation: SimulationState; onScenarioChange: (id: ScenarioId) => void; } const EngineeringDetails = forwardRef( function EngineeringDetails({ simulation, onScenarioChange }, ref) { const [isOpen, setIsOpen] = useState(false); const currentStep = DEMO_STEPS.find((step) => step.scenarioId === simulation.scenario.id) ?? DEMO_STEPS[0]; useImperativeHandle(ref, () => ({ open: () => { setIsOpen(true); requestAnimationFrame(() => { document.getElementById('engineering')?.scrollIntoView({ behavior: 'smooth' }); }); }, })); return (

For experts

Engineering Details

Полные технические панели: state machine, sensors, PID, timeline, event log и критерии.

{isOpen ? (
Loading 3D capability check…

}>
) : null}
); }, ); export default EngineeringDetails;