feat: Phase 1 - Canvas with React Flow
- 8 node types (Model, Solver, DesignVar, Extractor, Objective, Constraint, Algorithm, Surrogate) - Drag-drop from palette to canvas - Node configuration panels - Graph validation with error/warning display - Intent JSON serialization - Zustand state management Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
102
atomizer-dashboard/frontend/src/lib/canvas/schema.ts
Normal file
102
atomizer-dashboard/frontend/src/lib/canvas/schema.ts
Normal file
@@ -0,0 +1,102 @@
|
||||
/**
|
||||
* Canvas Schema - Type definitions for optimization workflow nodes
|
||||
*/
|
||||
|
||||
export type NodeType =
|
||||
| 'model'
|
||||
| 'solver'
|
||||
| 'designVar'
|
||||
| 'extractor'
|
||||
| 'objective'
|
||||
| 'constraint'
|
||||
| 'algorithm'
|
||||
| 'surrogate';
|
||||
|
||||
export interface BaseNodeData {
|
||||
label: string;
|
||||
configured: boolean;
|
||||
errors?: string[];
|
||||
}
|
||||
|
||||
export interface ModelNodeData extends BaseNodeData {
|
||||
type: 'model';
|
||||
filePath?: string;
|
||||
fileType?: 'prt' | 'fem' | 'sim';
|
||||
}
|
||||
|
||||
export interface SolverNodeData extends BaseNodeData {
|
||||
type: 'solver';
|
||||
solverType?: 'SOL101' | 'SOL103' | 'SOL105' | 'SOL106' | 'SOL111' | 'SOL112';
|
||||
}
|
||||
|
||||
export interface DesignVarNodeData extends BaseNodeData {
|
||||
type: 'designVar';
|
||||
expressionName?: string;
|
||||
minValue?: number;
|
||||
maxValue?: number;
|
||||
unit?: string;
|
||||
}
|
||||
|
||||
export interface ExtractorNodeData extends BaseNodeData {
|
||||
type: 'extractor';
|
||||
extractorId?: string;
|
||||
extractorName?: string;
|
||||
config?: Record<string, unknown>;
|
||||
}
|
||||
|
||||
export interface ObjectiveNodeData extends BaseNodeData {
|
||||
type: 'objective';
|
||||
name?: string;
|
||||
direction?: 'minimize' | 'maximize';
|
||||
weight?: number;
|
||||
}
|
||||
|
||||
export interface ConstraintNodeData extends BaseNodeData {
|
||||
type: 'constraint';
|
||||
name?: string;
|
||||
operator?: '<' | '<=' | '>' | '>=' | '==';
|
||||
value?: number;
|
||||
}
|
||||
|
||||
export interface AlgorithmNodeData extends BaseNodeData {
|
||||
type: 'algorithm';
|
||||
method?: 'TPE' | 'CMA-ES' | 'NSGA-II' | 'GP-BO' | 'RandomSearch';
|
||||
maxTrials?: number;
|
||||
}
|
||||
|
||||
export interface SurrogateNodeData extends BaseNodeData {
|
||||
type: 'surrogate';
|
||||
enabled?: boolean;
|
||||
modelType?: 'MLP' | 'GNN' | 'Ensemble';
|
||||
minTrials?: number;
|
||||
}
|
||||
|
||||
export type CanvasNodeData =
|
||||
| ModelNodeData
|
||||
| SolverNodeData
|
||||
| DesignVarNodeData
|
||||
| ExtractorNodeData
|
||||
| ObjectiveNodeData
|
||||
| ConstraintNodeData
|
||||
| AlgorithmNodeData
|
||||
| SurrogateNodeData;
|
||||
|
||||
export interface CanvasEdge {
|
||||
id: string;
|
||||
source: string;
|
||||
target: string;
|
||||
sourceHandle?: string;
|
||||
targetHandle?: string;
|
||||
}
|
||||
|
||||
// Valid connections
|
||||
export const VALID_CONNECTIONS: Record<NodeType, NodeType[]> = {
|
||||
model: ['solver', 'designVar'],
|
||||
solver: ['extractor'],
|
||||
designVar: ['model'],
|
||||
extractor: ['objective', 'constraint'],
|
||||
objective: ['algorithm'],
|
||||
constraint: ['algorithm'],
|
||||
algorithm: ['surrogate'],
|
||||
surrogate: [],
|
||||
};
|
||||
Reference in New Issue
Block a user