diff --git a/client/public/version.js b/client/public/version.js index 6bb8d72..54feca3 100644 --- a/client/public/version.js +++ b/client/public/version.js @@ -1,5 +1,5 @@ // Maintainer-controlled web client version. // Format: YYYY.MM.DD Rn (example: 2026.02.20 R2) -window.CHGRID_WEB_VERSION = "2026.02.21 R86"; +window.CHGRID_WEB_VERSION = "2026.02.21 R87"; // Optional display timezone for timestamps. Falls back to America/Detroit if unset/invalid. window.CHGRID_TIME_ZONE = "America/Detroit"; diff --git a/client/src/audio/effects.ts b/client/src/audio/effects.ts index 6e409f6..d85f02f 100644 --- a/client/src/audio/effects.ts +++ b/client/src/audio/effects.ts @@ -21,7 +21,7 @@ export type EffectRuntime = { export function clampEffectLevel(value: number): number { const clamped = Math.max(0, Math.min(100, value)); - return Math.round(clamped / 5) * 5; + return Math.round(clamped * 10) / 10; } export function disconnectEffectRuntime(runtime: EffectRuntime | null): void { diff --git a/client/src/main.ts b/client/src/main.ts index c5b88f0..60680c1 100644 --- a/client/src/main.ts +++ b/client/src/main.ts @@ -1831,8 +1831,8 @@ function handleItemPropertyEditModeInput(code: string, key: string): void { signaling.send({ type: 'item_update', itemId, params: { effect: normalized } }); } else if (propertyKey === 'effectValue') { const parsed = Number(value); - if (!Number.isInteger(parsed) || parsed < 0 || parsed > 100) { - updateStatus('effectValue must be an integer between 0 and 100.'); + if (!Number.isFinite(parsed) || parsed < 0 || parsed > 100) { + updateStatus('effectValue must be a number between 0 and 100.'); audio.sfxUiCancel(); return; } diff --git a/server/app/server.py b/server/app/server.py index 0cdaef2..154f381 100644 --- a/server/app/server.py +++ b/server/app/server.py @@ -654,7 +654,7 @@ class SignalingServer: next_params["channel"] = channel try: - effect_value = int(next_params.get("effectValue", 50)) + effect_value = float(next_params.get("effectValue", 50)) except (TypeError, ValueError): await self._send_item_result(client, False, "update", "effectValue must be a number.", item.id) return @@ -663,7 +663,7 @@ class SignalingServer: client, False, "update", "effectValue must be between 0 and 100.", item.id ) return - next_params["effectValue"] = round(effect_value / 5) * 5 + next_params["effectValue"] = round(effect_value, 1) item.params = next_params item.updatedAt = self.item_service.now_ms() item.version += 1