diff --git a/packages/web/src/editor/inspector/fields.tsx b/packages/web/src/editor/inspector/fields.tsx
index 12ed973..87dd871 100644
--- a/packages/web/src/editor/inspector/fields.tsx
+++ b/packages/web/src/editor/inspector/fields.tsx
@@ -31,7 +31,9 @@ export function Field({
return (
{label}
@@ -55,19 +57,56 @@ export function NumInput({
max?: number;
step?: number;
}) {
+ const formatVal = (v: number) => {
+ if (isNaN(v)) return 0;
+ return Number(v.toFixed(2));
+ };
+
+ const handleWheel = (e: React.WheelEvent
) => {
+ e.preventDefault();
+ const delta = e.deltaY < 0 ? step : -step;
+ let newVal = formatVal((value || 0) + delta);
+ if (min !== undefined) newVal = Math.max(min, newVal);
+ if (max !== undefined) newVal = Math.min(max, newVal);
+ onChange(newVal);
+ };
+
+ const handleKeyDown = (e: React.KeyboardEvent) => {
+ if (e.key === "ArrowUp") {
+ e.preventDefault();
+ let newVal = formatVal((value || 0) + step);
+ if (max !== undefined) newVal = Math.min(max, newVal);
+ onChange(newVal);
+ } else if (e.key === "ArrowDown") {
+ e.preventDefault();
+ let newVal = formatVal((value || 0) - step);
+ if (min !== undefined) newVal = Math.max(min, newVal);
+ onChange(newVal);
+ }
+ };
+
+ const displayVal =
+ value === undefined || value === null
+ ? 0
+ : Number.isInteger(value)
+ ? value
+ : Number(value.toFixed(1));
+
return (
-