From e0efba1027edd2a293bc0498fa8ebd8007579d01 Mon Sep 17 00:00:00 2001 From: Mehdi Chaid Date: Fri, 22 May 2026 10:10:32 -0400 Subject: [PATCH] fix: hide model_family by mirroring hide signals onto widget._state (#216) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Devtools dump on the user's frontend confirmed setWidgetHidden() was correctly setting widget.type='hidden', widget.hidden=true, computeSize=[0,-4], and draw=noop — but the widget still rendered. The widget object has a _state Proxy that mirrors render-relevant properties; the modern frontend's canvas-drawn ComboWidget renders from _state, not from the top-level widget object. Extend setWidgetHidden() to also mutate widget._state (type, disabled, label) when present, with try/catch in case the Proxy traps make any of those read-only. The original _state values are saved so unhide restores them. Refs #216 (pending runtime verification) --- web/utils.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/web/utils.js b/web/utils.js index f6e5b01..89aee6f 100644 --- a/web/utils.js +++ b/web/utils.js @@ -47,6 +47,7 @@ export function setWidgetHidden(widget, hide) { let saved = _widgetHideState.get(widget); if (hide) { if (saved) return; // already hidden + const state = widget._state || null; // modern ComfyUI proxy mirror saved = { type: widget.type, computeSize: widget.computeSize, @@ -54,6 +55,9 @@ export function setWidgetHidden(widget, hide) { options: widget.options, elementDisplay: widget.element ? widget.element.style.display : null, inputElDisplay: widget.inputEl ? widget.inputEl.style.display : null, + stateType: state ? state.type : null, + stateDisabled: state ? state.disabled : null, + stateLabel: state ? state.label : null, }; _widgetHideState.set(widget, saved); widget.computeSize = () => [0, -4]; @@ -63,6 +67,14 @@ export function setWidgetHidden(widget, hide) { widget.options = { ...(widget.options || {}), serialize: true }; if (widget.element) widget.element.style.display = "none"; if (widget.inputEl) widget.inputEl.style.display = "none"; + // Mirror onto _state (#216 v3): on modern frontends the canvas-drawn + // ComboWidget renders from this Proxy rather than the top-level widget + // object. Setting type='hidden' here is what actually suppresses draw. + if (state) { + try { state.type = "hidden"; } catch { /* proxy may be read-only */ } + try { state.disabled = true; } catch { /* */ } + try { state.label = ""; } catch { /* */ } + } } else { if (!saved) return; // already visible widget.type = saved.type; @@ -73,6 +85,12 @@ export function setWidgetHidden(widget, hide) { widget.hidden = false; if (widget.element && saved.elementDisplay !== null) widget.element.style.display = saved.elementDisplay; if (widget.inputEl && saved.inputElDisplay !== null) widget.inputEl.style.display = saved.inputElDisplay; + const state = widget._state || null; + if (state) { + if (saved.stateType !== null) try { state.type = saved.stateType; } catch { /* */ } + if (saved.stateDisabled !== null) try { state.disabled = saved.stateDisabled; } catch { /* */ } + if (saved.stateLabel !== null) try { state.label = saved.stateLabel; } catch { /* */ } + } _widgetHideState.delete(widget); } }