diff options
| author | Maze Winther <mazewinther@gmail.com> | 2026-03-27 00:55:15 +0100 |
|---|---|---|
| committer | Maze Winther <mazewinther@gmail.com> | 2026-03-29 15:56:48 +0200 |
| commit | 4d127a038bf768eded68aae3cfa5c1b12241bdac (patch) | |
| tree | 16bbb801caf6770546cff4fdb37b6408ec9ead98 /apps/web/src/utils/math.ts | |
| parent | 82817cb50cb0487350573d6129130aec705f924b (diff) | |
| download | opencut-4d127a038bf768eded68aae3cfa5c1b12241bdac.tar.gz | |
chore: normalize line endings
Diffstat (limited to 'apps/web/src/utils/math.ts')
| -rw-r--r-- | apps/web/src/utils/math.ts | 168 |
1 files changed, 84 insertions, 84 deletions
diff --git a/apps/web/src/utils/math.ts b/apps/web/src/utils/math.ts index 24f9eaf4..6e912b43 100644 --- a/apps/web/src/utils/math.ts +++ b/apps/web/src/utils/math.ts @@ -1,84 +1,84 @@ -export function clamp({ - value, - min, - max, -}: { - value: number; - min: number; - max: number; -}): number { - return Math.max(min, Math.min(max, value)); -} - -export function clampRound({ - value, - min, - max, -}: { - value: number; - min: number; - max: number; -}): number { - return Math.round(clamp({ value, min, max })); -} - -function getFractionDigitsForStep({ step }: { step: number }): number { - const normalizedStep = step.toString().toLowerCase(); - if (normalizedStep.includes("e-")) { - return Number(normalizedStep.split("e-")[1] ?? 0); - } - const [, fractionalPart = ""] = normalizedStep.split("."); - return fractionalPart.length; -} - -export function snapToStep({ - value, - step, -}: { - value: number; - step: number; -}): number { - if (step <= 0) return value; - const snappedValue = Math.round(value / step) * step; - return Number( - snappedValue.toFixed(getFractionDigitsForStep({ step })), - ); -} - -export function isNearlyEqual({ - leftValue, - rightValue, - epsilon = 0.0001, -}: { - leftValue: number; - rightValue: number; - epsilon?: number; -}): boolean { - return Math.abs(leftValue - rightValue) <= epsilon; -} - -export function formatNumberForDisplay({ - value, - maxFractionDigits = 6, -}: { - value: number; - maxFractionDigits?: number; -}): string { - return Number(value.toFixed(maxFractionDigits)).toString(); -} - -export function evaluateMathExpression({ - input, -}: { - input: string; -}): number | null { - const sanitized = input.trim(); - if (!/^[\d.\s+\-*/()]+$/.test(sanitized)) return null; - try { - const result = new Function(`return (${sanitized})`)(); - if (typeof result !== "number" || !Number.isFinite(result)) return null; - return result; - } catch { - return null; - } -} +export function clamp({
+ value,
+ min,
+ max,
+}: {
+ value: number;
+ min: number;
+ max: number;
+}): number {
+ return Math.max(min, Math.min(max, value));
+}
+
+export function clampRound({
+ value,
+ min,
+ max,
+}: {
+ value: number;
+ min: number;
+ max: number;
+}): number {
+ return Math.round(clamp({ value, min, max }));
+}
+
+function getFractionDigitsForStep({ step }: { step: number }): number {
+ const normalizedStep = step.toString().toLowerCase();
+ if (normalizedStep.includes("e-")) {
+ return Number(normalizedStep.split("e-")[1] ?? 0);
+ }
+ const [, fractionalPart = ""] = normalizedStep.split(".");
+ return fractionalPart.length;
+}
+
+export function snapToStep({
+ value,
+ step,
+}: {
+ value: number;
+ step: number;
+}): number {
+ if (step <= 0) return value;
+ const snappedValue = Math.round(value / step) * step;
+ return Number(
+ snappedValue.toFixed(getFractionDigitsForStep({ step })),
+ );
+}
+
+export function isNearlyEqual({
+ leftValue,
+ rightValue,
+ epsilon = 0.0001,
+}: {
+ leftValue: number;
+ rightValue: number;
+ epsilon?: number;
+}): boolean {
+ return Math.abs(leftValue - rightValue) <= epsilon;
+}
+
+export function formatNumberForDisplay({
+ value,
+ maxFractionDigits = 6,
+}: {
+ value: number;
+ maxFractionDigits?: number;
+}): string {
+ return Number(value.toFixed(maxFractionDigits)).toString();
+}
+
+export function evaluateMathExpression({
+ input,
+}: {
+ input: string;
+}): number | null {
+ const sanitized = input.trim();
+ if (!/^[\d.\s+\-*/()]+$/.test(sanitized)) return null;
+ try {
+ const result = new Function(`return (${sanitized})`)();
+ if (typeof result !== "number" || !Number.isFinite(result)) return null;
+ return result;
+ } catch {
+ return null;
+ }
+}
|
