The current "atomic move" implementation for Neo.container.Base involves a remove (silent) -> insert sequence. On the main thread, this translates to an insertBefore operation. In Chromium/WebKit, this causes the moved element to lose focus temporarily.
We currently patch this in DeltaUpdates.moveNode by immediately calling focus() on the element if it was active. This results in a rapid focusout -> focusin event sequence sent to the App Worker.
Goal:
Investigate if this event flicker causes unwanted side effects, particularly for:
Neo.form.field.Base validation logic (often triggered on blur).
Neo.manager.Focus state tracking.
Potential Solution:
If side effects are found, implement a "debounce" or "flicker detection" logic in FocusManager or DeltaUpdates. For example: "If an element loses focus, but re-gains it within X ms without another element taking focus in between, treat it as a continuous focus session."
The current "atomic move" implementation for
Neo.container.Baseinvolves aremove(silent) ->insertsequence. On the main thread, this translates to aninsertBeforeoperation. In Chromium/WebKit, this causes the moved element to lose focus temporarily.We currently patch this in
DeltaUpdates.moveNodeby immediately callingfocus()on the element if it was active. This results in a rapidfocusout->focusinevent sequence sent to the App Worker.Goal: Investigate if this event flicker causes unwanted side effects, particularly for:
Neo.form.field.Basevalidation logic (often triggered on blur).Neo.manager.Focusstate tracking.Potential Solution: If side effects are found, implement a "debounce" or "flicker detection" logic in
FocusManagerorDeltaUpdates. For example: "If an element loses focus, but re-gains it within X ms without another element taking focus in between, treat it as a continuous focus session."