From 408fc5e2f81760d178a6fa9adbd303e5cdcb521d Mon Sep 17 00:00:00 2001 From: Vito Sansevero Date: Tue, 27 Oct 2026 10:14:24 -0700 Subject: [PATCH] feat(ui): let swapDimensions work on nodes without a preset widget - Treat a missing preset widget like preset value 'custom' in swapDimensions - Keep every preset access behind the custom check - Add a test that swaps width and height directly on a preset-less node --- tests/js/dimensions.test.mjs | 11 +++++++++++ web/ui/dimensions.js | 4 ++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/tests/js/dimensions.test.mjs b/tests/js/dimensions.test.mjs index 8e7ab80..c848a37 100644 --- a/tests/js/dimensions.test.mjs +++ b/tests/js/dimensions.test.mjs @@ -58,3 +58,14 @@ test('a throwing or recursive preset callback does not leave swapping locked', ( swapDimensions(node, app); assert.deepEqual(node.widgets.map(widget => widget.value), ['640×960', 640, 960]); }); + +test('nodes without a preset widget swap width and height directly', () => { + const calls = []; + const node = { widgets: [ + { name: 'width', value: 1344, callback(value) { calls.push(['width', value]); } }, + { name: 'height', value: 768, callback(value) { calls.push(['height', value]); } }, + ], graph: { setDirtyCanvas() { calls.push(['dirty']); } } }; + swapDimensions(node, app); + assert.deepEqual(node.widgets.map(widget => widget.value), [768, 1344]); + assert.deepEqual(calls, [['width', 768], ['height', 1344], ['dirty']]); +}); diff --git a/web/ui/dimensions.js b/web/ui/dimensions.js index 201d89e..c3bf282 100644 --- a/web/ui/dimensions.js +++ b/web/ui/dimensions.js @@ -38,8 +38,8 @@ export function bindDimensionPresets(node, app) { export function swapDimensions(node, app) { const [preset, width, height] = widgets(node); - if (!preset || !width || !height || swapping.has(node)) return; - const custom = preset.value === 'custom'; + if (!width || !height || swapping.has(node)) return; + const custom = !preset || preset.value === 'custom'; const dimensions = custom ? [width.value, height.value] : dimensionsFromPreset(preset.value); if (!dimensions) return; const [w, h] = dimensions;