diff --git a/packages/ui/src/lib/inputs/InputNumber.svelte b/packages/ui/src/lib/inputs/InputNumber.svelte index 1118f96..da0d8be 100644 --- a/packages/ui/src/lib/inputs/InputNumber.svelte +++ b/packages/ui/src/lib/inputs/InputNumber.svelte @@ -26,11 +26,18 @@ return Math.min(max, Math.max(min, v)); } - function snap(v: number) { - if (step) v = Math.round(v / step) * step; + function snap(v: number, s = step) { + if (s) v = Math.round(v / s) * s; return +v.toFixed(3); } + function getAutoStep(v: number): number { + const abs = Math.abs(v); + if (abs === 0) return 0.1; // fallback for 0 + const exponent = Math.floor(Math.log10(abs)); + return Math.pow(10, exponent); + } + let dragging = $state(false); let startValue = 0; let rect: DOMRect; @@ -58,7 +65,8 @@ value = snap( e.ctrlKey ? startValue + delta - : clamp(startValue + delta) + : clamp(startValue + delta), + (e.altKey && !step) ? getAutoStep(value) : step ); } @@ -129,7 +137,7 @@