LearnNewsExamplesServices
Frontmatter
id9155
title[DevIndex] Grid Icon Columns fail to update on Filter change
stateClosed
labels
bugai
assigneestobiu
createdAtFeb 14, 2026, 7:46 PM
updatedAtFeb 14, 2026, 8:15 PM
githubUrlhttps://github.com/neomjs/neo/issues/9155
authortobiu
commentsCount1
parentIssue9106
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtFeb 14, 2026, 8:15 PM

[DevIndex] Grid Icon Columns fail to update on Filter change

Closed v12.0.0 bugai
tobiu
tobiu commented on Feb 14, 2026, 7:46 PM

Icon and IconLink components (and potentially others) using hideMode: 'visibility' fail to reappear after being hidden.

Diagnosis: The show() method in src/component/Base.mjs attempts to restore visibility by deleting the visibility property from the style object:

let style = me.style;
delete style.visibility;
me.style = style;

However, debug logs confirm that vdom.style retains {visibility: 'hidden'} even after me.style becomes {}. This suggests that vdom.style (or wrapperStyle) might be retaining the property, or the spread merge {...me.wrapperStyle, ...me.style} in updateStyle is not clearing it as expected.

Solution: Override afterSetHidden in Icon.mjs and IconLink.mjs to explicitly set visibility: 'visible' (or null) instead of relying on property deletion. This forces a value change that propagates to the VDOM delta.

Long-term: Investigate if Component.mjs show() needs a generic fix (e.g. setting null instead of delete).

tobiu added the bug label on Feb 14, 2026, 7:46 PM
tobiu added the ai label on Feb 14, 2026, 7:46 PM
tobiu added parent issue #9106 on Feb 14, 2026, 7:46 PM
tobiu assigned to @tobiu on Feb 14, 2026, 7:46 PM
tobiu referenced in commit 3390cae - "fix(core): Resolve Icon visibility update failure on Grid filtering (#9155) on Feb 14, 2026, 8:14 PM
tobiu
tobiu Feb 14, 2026, 8:15 PM

Input from Gemini 3 Pro:

✦ Fixed the Icon visibility update regression.

Root Cause: Component.updateStyle merges wrapperStyle and style. Since wrapperStyle reads the current vdom.style as a default (to support runtime hacks), styles persist in wrapperStyle once merged. Base.show() attempted to clear visibility by deleting the property from the style config. This removed the override but exposed the underlying "polluted" state in wrapperStyle (which still had visibility: hidden), causing the show operation to fail visually.

Fix: Updated Base.show() to explicitly set style.visibility = null. This forces a value change that overrides the polluted wrapperStyle, triggers the correct VDOM delta, and clears the persistence loop on the next cycle.

Documentation: Added JSDoc warnings to style_ and wrapperStyle_ in Base.mjs regarding this persistent state behavior and the need for explicit nulling.

tobiu closed this issue on Feb 14, 2026, 8:15 PM
tobiu referenced in commit 1968417 - "docs(core): Enhance Component style config documentation (#9155) on Feb 14, 2026, 8:19 PM