adn / frontend /src /store.ts
dimensionalpulsar's picture
Upload 38 files
9a16769 verified
Raw History Blame Contribute Delete
2.06 kB
import { create } from 'zustand';
export interface FinDesign {
profile: string;
aspectRatio: number;
sweepAngle: number;
thickness: number;
span: number;
quantity: number;
}
export interface ResistanceData {
waveResistance: number;
viscousResistance: number;
finPenalty: number;
totalResistance: number;
froudeNumber: number;
reynoldsNumber: string;
}
interface SimState {
waveAmplitude: number; // 0 – 8 m
temperature: number; // 0 – 40 °C
waveExpansion: number; // 0.1 – 4.0 (spatial frequency multiplier)
finScale: number; // 0.5 – 2.0
finDesign: FinDesign | null;
resistance: ResistanceData | null;
designNote: string;
aiSource: 'huggingface' | 'algorithmic' | 'idle';
isLoadingAI: boolean;
fluidField: number[] | null;
// Setters
setWaveAmplitude: (v: number) => void;
setTemperature: (v: number) => void;
setWaveExpansion: (v: number) => void;
setFinScale: (v: number) => void;
setAIResult: (r: {
suggestedFinScale: number;
finDesign: FinDesign;
resistance: ResistanceData;
designNote: string;
source: string;
}) => void;
setLoadingAI: (v: boolean) => void;
setFluidField: (f: number[]) => void;
}
export const useStore = create<SimState>((set) => ({
waveAmplitude: 1.5,
temperature: 20,
waveExpansion: 1.0,
finScale: 1.0,
finDesign: null,
resistance: null,
designNote: 'Esperando cálculo IA…',
aiSource: 'idle',
isLoadingAI: false,
fluidField: null,
setWaveAmplitude: (v) => set({ waveAmplitude: v }),
setTemperature: (v) => set({ temperature: v }),
setWaveExpansion: (v) => set({ waveExpansion: v }),
setFinScale: (v) => set({ finScale: v }),
setAIResult: (r) =>
set({
finScale: r.suggestedFinScale,
finDesign: r.finDesign,
resistance: r.resistance,
designNote: r.designNote,
aiSource: r.source === 'huggingface' ? 'huggingface' : 'algorithmic',
}),
setLoadingAI: (v) => set({ isLoadingAI: v }),
setFluidField: (f) => set({ fluidField: f }),
}));