/** * Metal Weight Types */ export type MetalShape = 'plate' | 'round' | 'pipe' | 'angle'; export type MaterialName = 'steel' | 'stainless304' | 'aluminum' | 'copper' | 'brass' | 'titanium'; interface MetalWeightBase { length: number; materialName: MaterialName; } export type MetalWeightInput = MetalWeightBase & ({ shape: 'plate'; width: number; thickness: number; } | { shape: 'round'; diameter: number; } | { shape: 'pipe'; outerDiameter: number; innerDiameter: number; } | { shape: 'angle'; width: number; height: number; thickness: number; }); export interface MetalWeightResult { weight: number; volume: number; density: number; } /** * Bending Types */ export type BendingMaterial = 'mildSteel' | 'stainless304' | 'aluminum5052' | 'aluminum6061' | 'custom'; export type ShapeType = 'lShape' | 'uShape'; export interface BendAllowanceInput { thickness: number; bendAngle: number; insideRadius: number; kFactor?: number; material?: BendingMaterial; } export interface BendAllowanceResult { bendAllowance: number; bendDeduction: number; outsideSetback: number; kFactor: number; recommendedVDie: number; minBendRadius: number; warnings: string[]; } export interface SpringbackInput { thickness: number; bendRadius: number; bendAngle: number; material?: BendingMaterial; yieldStrength?: number; elasticModulus?: number; } export interface SpringbackResult { springbackFactor: number; finalRadius: number; springbackAngle: number; overbendAngle: number; overbendExceeds180: boolean; radiusBelow2T: boolean; yieldStrength: number; elasticModulus: number; } export interface FlatPatternInput { shapeType: ShapeType; thickness: number; bendAngle: number; insideRadius: number; kFactor?: number; material?: BendingMaterial; flangeA: number; flangeB: number; flangeC?: number; } export interface FlatPatternResult { flatLength: number; bendAllowance: number; bendDeduction: number; kFactor: number; } export interface KFactorReverseInput { thickness: number; bendAngle: number; insideRadius: number; measuredFlatLength: number; legA: number; legB: number; } export interface KFactorReverseResult { kFactor: number; } export interface KFactorReverseRangeResult { kFactor: number; kFactorMin: number; kFactorMax: number; } /** * Press Tonnage Types */ export type PressOperation = 'blanking' | 'bending' | 'drawing' | 'combined'; export type BendType = 'air' | 'bottoming' | 'coining'; export interface PressTonnageInput { operation: PressOperation; thickness: number; tensileStrength: number; shearStrength: number; safetyFactor?: number; cuttingPerimeter?: number; bendLength?: number; dieOpening?: number; bendType?: BendType; punchDiameter?: number; blankDiameter?: number; drawRatio?: number; frictionCoefficient?: number; blankHolderPressure?: number; dieRadius?: number; reductionPercent?: number; operations?: PressOperation[]; } export interface PressTonnageResult { blankingForce: number; bendingForce: number; drawingForce: number; blankHolderForce: number; totalForce: number; recommendedPress: number; drawRatio: number; numberOfDraws: number; breakdown: { operation: string; force: number; }[]; warnings: string[]; } /** * Bearing Types */ export type BearingType = 'ball' | 'roller'; export interface BearingInput { bearingType: BearingType; dynamicLoadRating: number; equivalentLoad: number; rpm: number; } export interface BearingResult { l10: number; l10h: number; lifeExponent: number; } /** * Bolt Types */ export type BoltCalculationMode = 'torqueToPreload' | 'preloadToTorque'; export type LubricationCondition = 'dry' | 'oiled' | 'moly' | 'ptfe' | 'custom'; interface BoltBase { diameter: number; pitch: number; kFactor: number; tensileStrength: number; } export type BoltInput = BoltBase & ({ mode: 'torqueToPreload'; torque: number; } | { mode: 'preloadToTorque'; preload: number; }); export interface BoltResult { torque: number; preload: number; preloadN: number; stressArea: number; tensileStress: number; strengthUtilization: number; kFactor: number; recommendedMaxPreload: number; } /** * Cutting Types */ export type CuttingOperation = 'turning' | 'milling' | 'drilling'; export interface CuttingInput { operation: CuttingOperation; cuttingSpeed: number; toolDiameter: number; feedPerTooth?: number; feedPerRev?: number; numberOfTeeth?: number; depthOfCut?: number; widthOfCut?: number; } export interface CuttingResult { rpm: number; feedRate: number; mrr: number; } /** * Cutting Stock Types */ export type CuttingAlgorithm = 'ffd' | 'bfd'; export interface CuttingPiece { length: number; quantity: number; label?: string; } export interface CuttingStockInput { stockLength: number; kerf: number; pieces: CuttingPiece[]; algorithm: CuttingAlgorithm; } export interface CuttingPattern { pieces: { length: number; label: string; }[]; usedLength: number; waste: number; wastePercent: number; } export interface CuttingStockResult { stocksUsed: number; totalWaste: number; totalKerfLoss: number; wastePercent: number; utilizationPercent: number; patterns: CuttingPattern[]; } /** * Gear Types */ export type GearCalculationMode = 'fromModule' | 'fromPitchDiameter'; export interface GearInput { mode: GearCalculationMode; module?: number; teethGear1?: number; teethGear2?: number; pitchDiameter?: number; numberOfTeeth?: number; } export interface GearResult { module: number; pitchDiameter1: number; pitchDiameter2?: number; centerDistance?: number; addendum: number; dedendum: number; circularPitch: number; baseCircleDiameter1: number; } /** * Hardness Types */ export type HardnessScale = 'HRC' | 'HB' | 'HV' | 'Shore'; export interface HardnessInput { fromScale: HardnessScale; value: number; } export interface HardnessResult { HRC: number; HB: number; HV: number; Shore: number; outOfTableRange: boolean; } /** * Material Types */ export type MaterialCategory = 'steel' | 'stainless' | 'aluminum' | 'copper' | 'titanium'; export interface MaterialInput { category: MaterialCategory; grade: string; } export interface MaterialResult { grade: string; category: string; density: number; tensileStrength: number; yieldStrength: number; youngsModulus: number; /** * Poisson's ratio (v), dimensionless. Optional: published tabulations agree on this * only at family level, and a grade whose sources disagree by more than a rounding * step carries no value rather than a fabricated one. */ poissonsRatio?: number; elongation: number; hardness: string; thermalConductivity: number; meltingPoint: number; } export interface MaterialSpec { density: number; tensileStrength: number; yieldStrength: number; youngsModulus: number; poissonsRatio?: number; elongation: number; hardness: string; thermalConductivity: number; meltingPoint: number; } /** * Press-Fit Types */ export interface PressFitInput { shaftDiameter: number; holeDiameter: number; hubOuterDiameter: number; contactLength: number; youngsModulus: number; poissonRatio: number; frictionCoefficient: number; } export interface PressFitResult { interference: number; interfacePressure: number; assemblyForce: number; assemblyForceKN: number; holdingTorque: number; axialHoldingForce: number; hubHoopStress: number; shaftRadialStress: number; } /** * Roughness Types */ export type RoughnessScale = 'Ra' | 'Rz' | 'N'; export interface RoughnessInput { fromScale: RoughnessScale; value: number; } export interface RoughnessResult { ra: number; rz: number; nClass: number; rms: number; outOfTableRange: boolean; } /** * Screw Types */ export type PitchType = 'coarse' | 'fine'; export interface ScrewInput { designation: string; pitchType: PitchType; } export interface ScrewResult { designation: string; nominalDiameter: number; pitch: number; minorDiameter: number; tapDrill: number; clearanceClose: number; clearanceFree: number; } export interface ScrewSpec { nominal: number; coarsePitch: number; finePitch: number; clearanceClose: number; clearanceFree: number; } /** * Spring Types */ export type SpringMaterial = 'musicWire' | 'stainless302' | 'phosphorBronze' | 'berylliumCopper'; export interface SpringInput { wireDiameter: number; meanCoilDiameter: number; activeCoils: number; force?: number; material?: SpringMaterial; } export interface SpringResult { springRate: number; springIndex: number; stressCorrectionFactor: number; shearStress?: number; shearModulus: number; } /** * Tap Types */ export type ThreadStandard = 'metric' | 'unc' | 'unf'; export interface TapInput { standard: ThreadStandard; majorDiameter: number; pitch: number; threadPercentage?: number; } export interface TapResult { tapDrillSize: number; minorDiameter: number; pitchDiameter: number; threadPercentage: number; threadHeight: number; } /** * Thread Types */ export type ThreadType = 'metric' | 'unified'; export interface ThreadInput { type: ThreadType; size: string; } export interface ThreadResult { size: string; majorDiameter: number; pitch: number; tapDrill: number; minorDiameter: number; pitchDiameter: number; } export interface ThreadSpec { majorDiameter: number; pitch: number; tapDrill: number; minorDiameter: number; pitchDiameter: number; } /** * Tolerance Types */ export type FitType = 'hole' | 'shaft'; export interface ToleranceInput { nominalSize: number; fitType: FitType; deviationLetter: string; itGrade: number; } export interface ToleranceResult { designation: string; upperDeviation: number; lowerDeviation: number; maxSize: number; minSize: number; toleranceBand: number; } /** A hole/shaft pair, the unit ISO 286 is actually used in (`Ø30 H7/g6`). */ export interface FitInput { nominalSize: number; holeDeviation: string; holeGrade: number; shaftDeviation: string; shaftGrade: number; } export interface FitResult { designation: string; hole: ToleranceResult; shaft: ToleranceResult; /** um; positive is a gap, negative is interference. Tightest pairing. */ minClearance: number; /** um; positive is a gap, negative is interference. Loosest pairing. */ maxClearance: number; fitClass: 'clearance' | 'transition' | 'interference'; } /** * Vibration Types */ export type VibrationSystem = 'cantilever' | 'simplySupported' | 'shaftDisk' | 'springMass'; export type CrossSection = 'rectangular' | 'circular' | 'hollow'; export type VibrationMaterial = 'steel' | 'stainless' | 'aluminum' | 'copper' | 'titanium' | 'custom'; export interface VibrationInput { system: VibrationSystem; material: VibrationMaterial; length?: number; crossSection?: CrossSection; width?: number; height?: number; diameter?: number; outerDiameter?: number; innerDiameter?: number; diskMass?: number; diskRadius?: number; springConstant?: number; mass?: number; youngsModulus?: number; density?: number; shearModulus?: number; } export interface FrequencyMode { mode: number; frequency: number; angularFrequency: number; period: number; } export interface VibrationResult { frequencies: FrequencyMode[]; momentOfInertia: number; crossSectionalArea: number; materialProps: { E: number; rho: number; G?: number; }; } /** * Weld Heat Types */ export type WeldProcess = 'smaw' | 'gmaw' | 'gtaw' | 'saw'; export type WeldBaseMetal = 'mildSteel' | 'lowAlloySteel' | 'stainlessSteel' | 'castIron'; export type CrackingRisk = 'low' | 'moderate' | 'high' | 'veryHigh'; /** * Stable code for the preheat-temperature source, for i18n by consumers. * Maps 1:1 to the human-readable `preheatTemp.source` string. */ export type WeldPreheatSourceCode = 'awsTable' | 'awsJudgment' | 'engineeringJudgment'; /** * Stable codes for {@link WeldHeatResult.recommendationCodes}. Each maps to the * corresponding English sentence in `recommendations`, allowing consumers to * localise the advice while interpolating the supplied `params`. */ export type WeldRecommendationCode = 'preheat' | 'fastCooling' | 'slowCooling' | 'increaseHeatInput' | 'highHeatInput' | 'lowHydrogenConsumables' | 'keepConsumablesDry' | 'pwht' | 'highHazHardness' | 'hazHardnessCapped' | 'stainlessInterpass' | 'stainlessFiller' | 'castIronNiFiller' | 'castIronPeen' | 'castIronButter'; /** * Machine-readable form of a single recommendation: a stable `code` plus the * interpolation `params` used in the matching English `recommendations` string. */ export interface WeldRecommendation { code: WeldRecommendationCode; params: Record; } export interface WeldHeatInput { process: WeldProcess; voltage: number; current: number; travelSpeed: number; baseMetal: WeldBaseMetal; carbon?: number; manganese?: number; chromium?: number; molybdenum?: number; vanadium?: number; nickel?: number; copper?: number; silicon?: number; thickness: number; } export interface WeldHeatResult { heatInput: number; efficiency: number; carbonEquivalent: number; carbonEquivalentPcm: number; coolingTime_t85: number; coolingTimeClamped: boolean; coolingRate: number; preheatTemp: { min: number; max: number; source: string; sourceCode: WeldPreheatSourceCode; }; interpassTemp: { min: number; max: number; }; hazHardnessMax: number; hazHardnessClamped: boolean; crackingRisk: CrackingRisk; hydrogenLevel: 'low' | 'medium' | 'high'; /** Human-readable English advice. */ recommendations: string[]; /** Machine-readable form of `recommendations`, parallel by index, for i18n. */ recommendationCodes: WeldRecommendation[]; } /** * Welding Types */ export type WeldingBaseMetal = 'mildSteel' | 'lowAlloySteel' | 'stainlessSteel' | 'castIron' | 'aluminum'; export type JointType = 'butt' | 'fillet' | 'lap' | 'tee'; export type WeldPosition = 'flat' | 'horizontal' | 'vertical' | 'overhead'; export interface WeldingInput { baseMetal: WeldingBaseMetal; jointType: JointType; position: WeldPosition; thickness: number; } export interface WeldingRod { designation: string; awsClass: string; characteristics: string; } export interface WeldingResult { recommendations: WeldingRod[]; rodDiameter: number; currentRange: { min: number; max: number; }; notes: string[]; } /** * Weld Strength Types * * Filler-metal electrode classification. The numeric part is the minimum tensile * strength of the deposited weld metal in ksi (E70 = 70 ksi). {@link weldStrength} * maps each to an SI value; see FEXX table in weldStrength.ts. */ export type WeldElectrodeClass = 'E60' | 'E70' | 'E80' | 'E90' | 'E100' | 'E110'; export interface WeldStrengthInput { legSize: number; weldLength: number; weldCount?: number; electrode: WeldElectrodeClass; appliedLoad: number; } export interface WeldStrengthResult { throat: number; effectiveArea: number; allowableShearStress: number; allowableLoad: number; actualStress: number; utilization: number; minRequiredLeg: number; isSafe: boolean; } /** * Column Buckling (Euler) Types * * Idealized end-restraint condition → effective-length factor K (AISC theoretical): * pinned-pinned 1.0, fixed-fixed 0.5, fixed-free 2.0, fixed-pinned 0.7. */ export type ColumnEndCondition = 'pinned-pinned' | 'fixed-fixed' | 'fixed-free' | 'fixed-pinned'; export interface ColumnBucklingInput { youngsModulus: number; momentOfInertia: number; area: number; length: number; endCondition: ColumnEndCondition; yieldStrength: number; } export interface ColumnBucklingResult { effectiveLengthFactor: number; effectiveLength: number; criticalLoad: number; criticalStress: number; radiusOfGyration: number; slendernessRatio: number; transitionSlenderness: number; yieldLoad: number; isElastic: boolean; } /** * Beam Deflection Types * * Support condition and load type for an elastic, prismatic (constant EI) beam. * The concentrated (point) load acts at the canonical maximum-deflection location for * each support — midspan for simple/fixed, the free end for cantilever — so that a * combined uniform+point case superposes at a single point (linear-elastic, exact). */ export type BeamSupportType = 'simple' | 'cantilever' | 'fixed'; export type BeamLoadType = 'uniform' | 'concentrated' | 'combined'; export interface BeamDeflectionInput { support: BeamSupportType; loadType: BeamLoadType; span: number; youngsModulus: number; momentOfInertia: number; uniformLoad?: number; pointLoad?: number; deflectionLimitRatio: number; } export interface BeamDeflectionResult { maxDeflection: number; maxDeflectionLocation: number; allowableDeflection: number; deflectionRatio: number; isSafe: boolean; } /** * A single sampled point of the elastic deflected shape v(x), for visualizing the * bent beam. Same shape functions that produce {@link BeamDeflectionResult.maxDeflection} * (its max equals maxDeflection by construction) — no second physics. */ export interface BeamDeflectionCurvePoint { position: number; deflection: number; } /** * Material Grade Converter Types */ export type MaterialStandard = 'ASTM' | 'EN' | 'JIS' | 'GB' | 'KS'; export interface MaterialGradeConverterInput { standard: MaterialStandard; grade: string; } export interface MaterialGradeConverterResult { astm: string | null; en: string | null; jis: string | null; gb: string | null; ks: string | null; category: string; notes: string; } /** * Pipe Spec Types */ export type PipeStandard = 'ANSI' | 'DN'; export type PipeSchedule = 'SCH5' | 'SCH10' | 'SCH40' | 'SCH80' | 'SCH160' | 'XXS'; export interface PipeSpecInput { standard: PipeStandard; nominalSize: string; schedule: PipeSchedule; } export interface PipeSpecResult { nominalSize: string; outerDiameter: number; wallThickness: number; innerDiameter: number; weightPerMeter: number; crossSectionArea: number; internalArea: number; } /** * Flange Spec Types */ export type FlangeStandard = 'ASME_B16_5' | 'EN_1092_1'; export type PressureClass = '150' | '300' | '600' | '900' | '1500' | '2500'; export interface FlangeSpecInput { standard: FlangeStandard; pressureClass: PressureClass; nominalSize: string; } export interface FlangeSpecResult { nominalSize: string; pressureClass: string; outerDiameter: number; thickness: number; boltCircleDiameter: number; boltHoles: number; boltSize: string; raisedFaceDiameter: number; weight: number; } export {}; //# sourceMappingURL=types.d.ts.map