/** * Shared type definitions for Urdf parsing from supabase edge function */ export interface UrdfData { name?: string; description?: string; mass?: number; dofs?: number; joints?: { revolute?: number; prismatic?: number; continuous?: number; fixed?: number; other?: number; }; links?: { name?: string; mass?: number; }[]; materials?: { name?: string; percentage?: number; }[]; } /** * Interface representing a Urdf file model */ export interface UrdfFileModel { /** * Path to the Urdf file */ path: string; /** * Blob URL for accessing the file */ blobUrl: string; /** * Name of the model extracted from the file path */ name?: string; } /** * Joint animation configuration interface */ export interface JointAnimationConfig { /** Joint name in the Urdf */ name: string; /** Animation type (sine, linear, etc.) */ type: "sine" | "linear" | "constant"; /** Minimum value for the joint */ min: number; /** Maximum value for the joint */ max: number; /** Speed multiplier for the animation (lower = slower) */ speed: number; /** Phase offset in radians */ offset: number; /** Whether angles are in degrees (will be converted to radians) */ isDegrees?: boolean; /** For more complex movements, a custom function that takes time and returns a value between 0 and 1 */ customEasing?: (time: number) => number; } /** * Robot animation configuration interface */ export interface RobotAnimationConfig { /** Array of joint configurations */ joints: JointAnimationConfig[]; /** Global speed multiplier */ speedMultiplier?: number; } export interface AnimationRequest { robotName: string; urdfContent: string; description: string; // Natural language description of the desired animation } export interface ContentItem { id: string; title: string; imageUrl: string; description?: string; categories: string[]; urdfPath: string; } export interface Category { id: string; name: string; }