"use client"; import { useMemo, useState } from "react"; import ToolShell from "@/components/toolkit/ToolShell"; import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; function num(v: string) { const n = parseFloat(v); return Number.isFinite(n) ? n : 0; } // Spot diameter (µm) ≈ 1.27 * M² * λ(µm) * f(mm) / D(mm) export default function Page() { const [lambdaNm, setLambdaNm] = useState("1064"); // nm (default fiber) const [focalMm, setFocalMm] = useState("160"); // mm const [beamDm, setBeamDm] = useState("6"); // mm (input beam diameter at lens) const [m2, setM2] = useState("1.3"); const dUm = useMemo(() => { const lamUm = num(lambdaNm) / 1000; // convert nm -> µm const f = num(focalMm); const D = num(beamDm); const M2 = Math.max(1, num(m2)); if (lamUm <= 0 || f <= 0 || D <= 0) return 0; return 1.27 * M2 * lamUm * (f / D); }, [lambdaNm, focalMm, beamDm, m2]); const dMm = dUm / 1000; return ( Inputs Result
Spot diameter
{dMm.toFixed(4)} mm
{dUm.toFixed(2)} µm
Spot radius
{(dMm / 2).toFixed(4)} mm
{(dUm / 2).toFixed(2)} µm
); }