diff --git a/client/public/version.js b/client/public/version.js index e39ab5d..b6efac7 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.28 R305"; +window.CHGRID_WEB_VERSION = "2026.02.28 R306"; // Optional display timezone for timestamps. Falls back to America/Detroit if unset/invalid. window.CHGRID_TIME_ZONE = "America/Detroit"; diff --git a/client/src/items/itemPropertyEditor.ts b/client/src/items/itemPropertyEditor.ts index 8d3857c..63607b2 100644 --- a/client/src/items/itemPropertyEditor.ts +++ b/client/src/items/itemPropertyEditor.ts @@ -91,7 +91,7 @@ export function createItemPropertyEditor(deps: EditorDeps): { deps.sfxUiBlip(); return; } - if (code === 'ArrowLeft' || code === 'ArrowRight') { + if (code === 'ArrowLeft' || code === 'ArrowRight' || code === 'PageUp' || code === 'PageDown') { const selectedKey = deps.state.itemPropertyKeys[deps.state.itemPropertyIndex]; if (!deps.isItemPropertyEditable(item, selectedKey)) { deps.updateStatus(`${deps.itemPropertyLabel(selectedKey)} is not editable.`); @@ -105,7 +105,15 @@ export function createItemPropertyEditor(deps: EditorDeps): { 0, options.findIndex((option) => option.toLowerCase() === currentRaw), ); - const delta = code === 'ArrowRight' ? 1 : -1; + const pageJump = Math.min(10, Math.max(1, options.length - 1)); + const delta = + code === 'ArrowRight' + ? 1 + : code === 'ArrowLeft' + ? -1 + : code === 'PageDown' + ? pageJump + : -pageJump; const nextIndex = (currentIndex + delta + options.length) % options.length; const nextValue = options[nextIndex]; deps.suppressItemPropertyEchoMs(600); @@ -137,7 +145,8 @@ export function createItemPropertyEditor(deps: EditorDeps): { : Number.isFinite(min) ? min : 0; - const delta = code === 'ArrowRight' ? step : -step; + const multiplier = code === 'PageUp' || code === 'PageDown' ? 10 : 1; + const delta = (code === 'ArrowRight' || code === 'PageUp' ? step : -step) * multiplier; const anchor = Number.isFinite(min) ? min : 0; const attempted = snapNumberToStep(currentValue + delta, step, anchor); let nextValue = attempted; diff --git a/docs/controls.md b/docs/controls.md index bb1295a..f13fe0e 100644 --- a/docs/controls.md +++ b/docs/controls.md @@ -74,6 +74,7 @@ This document is the authoritative keymap for the client. Applies to effect select, user/item list modes, item selection, item property list, and property option select. - `ArrowUp` / `ArrowDown`: Move selection +- `PageUp` / `PageDown` in item property list: Jump 10 values for left/right-editable option fields - `PageUp` / `PageDown` in item property option select: Jump 10 options backward/forward - `ArrowLeft` / `ArrowRight` in user list: Lower/raise selected user listen volume (`0.5..4.0`) - `Enter`: Confirm selection