import { URDFRobot } from '../../../third_party/urdf-loader'; export interface UrdfDialControlsProps { /** Node key for dial control registration and sceneStore access */ controlKey: string; /** The loaded URDFRobot object (for direct joint updates) */ robot: URDFRobot | undefined; /** External joint values (from props, for syncing) */ jointValues?: Record; } /** * Isolated component for URDF dial controls. * * This component exists to isolate re-renders from dial control state changes. * By keeping dial control logic in a separate component, state updates from * `useSceneStore`, `useDialControls`, etc. won't trigger re-renders in the * parent Urdf component and its UrdfView children. * * ## Data Flow * * Panel interaction: * 1. User drags slider → dialControlsStore updated immediately (smooth UI) * 2. onChange callback fires: * - joint.setJointValue() called immediately (visual response) * - sceneStore update debounced (avoid re-render storms) * * Drag interaction: * - Parent uses direct store access (store.setValue + store.triggerOnChange) * - No subscription in parent, just writes to store * - This component's onChange handles the joint update * * External updates (from sceneStore): * - Synced to dialControlsStore via effect * - Panel automatically reflects new values */ export declare function UrdfDialControls({ controlKey, robot, jointValues, }: UrdfDialControlsProps): any;