neo
neo copied to clipboard
component.Base: vdom => add a scroll attribute
While it is not possible to set the scroll position on DOM level, this would not be a problem for neo: a delta would contain a changed scrollLeft or scrollTop value, and could easily programmatically adjust the scroll state once the node is painted or updated.
E.g.:
{tag: 'div', scroll: {top: '100px'}}
- For getting deltas including scroll changes,
Neo.vdom.Vnodealso needs to get the new scroll attribute. - It is important for this scenario, that user based scroll changes also update the related
vdom&vnodeattributes for the matching component, otherwise we could get deltas when there is no need for a change.
Rationale where I would use it:
https://github.com/user-attachments/assets/9a640ef7-ff2c-4b47-bc27-ee82665bbd9a
I know it is minor, but if you look close, you can see that the scrolling (sometimes painting new rows outside the buffer range on the fly) and the selection change do not always happen inside the same animation frame.
The view triggers an update, passing vdom&vnode to the vdom worker, it figures out the deltas and applies them inside main (cycling rows). in parallel the app worker directly sends a request to main to adjust the scroll position.