export type ConnectionType = 'single-angle' | 'double-angle' | 'single-plate' | 'tee'; export type SupportType = 'column-flange' | 'column-web' | 'beam-web' | 'hss-column' | 'hss-beam'; export type DesignMethod = 'ASD' | 'LRFD'; export type LoadCombinationOption = 'pre-combined' | 'nominal-loads'; export type ConnectionMethod = 'bolted' | 'welded'; export interface Materials { support: { fy: number; fu: number; }; beam: { fy: number; fu: number; }; angle: { fy: number; fu: number; }; modulusOfElasticity: number; } export interface Support { type: SupportType; designation: string; similarConnectionOtherSide: boolean; // Section properties d?: number; // depth tw?: number; // web thickness tf?: number; // flange thickness bf?: number; // flange width } export interface Beam { designation: string; gapFromSupport: number; topFlangeCopeLengthC: boolean; topFlangeCopeHeightDc: boolean; bottomFlangeCopeLengthC: boolean; bottomFlangeCopeHeightDc: boolean; // Section properties d?: number; // depth tw?: number; // web thickness tf?: number; // flange thickness bf?: number; // flange width } export interface Angle { legOnSupport: number; legOnBeam: number; thickness: number; connectionMethod: ConnectionMethod; edgeDistanceHorizontal: number; edgeDistanceVertical: number; eccentricityToBeamCL: number; } export interface Bolts { numberOfRows: number; diameter: number; // in inches: 0.75, 0.875, 1.0 grade: 'A325' | 'A490'; spacing: number; threadsIncluded: boolean; } export interface Weld { type: string; size: number; strength: number; } export interface Loads { dead: number; live: number; rLive: number; snow: number; wind: number; seismic: number; } export interface LoadCombination { id: number; equation: string; pu: number; passes: boolean; } export interface LimitState { name: string; phi: number; // resistance factor for LRFD omega: number; // safety factor for ASD rn: number; // nominal strength phiRn: number; // design strength LRFD rnOmega: number; // allowable strength ASD applicable: boolean; } export interface GeometryCheck { description: string; lengthC?: number | string; heightDc?: number | string; status: 'OK' | 'NG'; } export interface DesignCheck { connectionStrengthRatio: number; designCheckRatio: number; geometricConstraintsCheck: 'OK' | 'NG'; } export interface ConnectionState { connectionType: ConnectionType; support: Support; beam: Beam; angle: Angle; bolts: Bolts; weld: Weld; materials: Materials; loads: Loads; designMethod: DesignMethod; loadCombinationOption: LoadCombinationOption; // Calculated results loadCombinations: LoadCombination[]; limitStates: LimitState[]; geometryChecks: GeometryCheck[]; designCheck: DesignCheck; // Actions setConnectionType: (type: ConnectionType) => void; setSupport: (support: Partial) => void; setBeam: (beam: Partial) => void; setAngle: (angle: Partial) => void; setBolts: (bolts: Partial) => void; setWeld: (weld: Partial) => void; setMaterials: (materials: Partial) => void; setLoads: (loads: Partial) => void; setDesignMethod: (method: DesignMethod) => void; setLoadCombinationOption: (option: LoadCombinationOption) => void; calculate: () => void; }