Skip to content

Feature: (Mostly) AI-Attempt on Issue #798 Support resizable Groups#799

Open
emilkrebs wants to merge 13 commits into
jupyterlab:mainfrom
emilkrebs:main
Open

Feature: (Mostly) AI-Attempt on Issue #798 Support resizable Groups#799
emilkrebs wants to merge 13 commits into
jupyterlab:mainfrom
emilkrebs:main

Conversation

@emilkrebs

@emilkrebs emilkrebs commented Mar 13, 2026

Copy link
Copy Markdown

Disclaimer:
This PR has been mostly written by Claude Sonnet 4.6 and Opus 4.6 4.8 since I do not have a clear overview over the codebase. Human critical thinking skills still apply :)

It works pretty well I think and I desperately want this feature in Eclipse Theia for a more modern IDE expierence.
I will take some time to review the PR myself but since I am not an expert here feel free to drop your opinion on this :)

Thanks a lot!

Fixes:

#798

emilkrebs and others added 7 commits March 13, 2026 14:16
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
[WIP] Add two-axis resizing for intersecting handles
@emilkrebs emilkrebs changed the title (Mostly) AI-Attempt on Issue #798 Support resizable Groups Feature: (Mostly) AI-Attempt on Issue #798 Support resizable Groups Mar 13, 2026
@krassowski krassowski added the enhancement New feature or request label Mar 13, 2026

@krassowski krassowski left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On https://lumino--799.org.readthedocs.build/en/799/examples/dockpanel/index.html preview it looks like it can work, but it's really hard do know when it will because the cursor does not change to 4-way arrow when on hover.

IMO there ought to be a handle in DOM or some specific pixel size of a corner that you can grab otherwise it will be unintuitive and hard to use.

@emilkrebs

Copy link
Copy Markdown
Author

On https://lumino--799.org.readthedocs.build/en/799/examples/dockpanel/index.html preview it looks like it can work, but it's really hard do know when it will because the cursor does not change to 4-way arrow when on hover.

IMO there ought to be a handle in DOM or some specific pixel size of a corner that you can grab otherwise it will be unintuitive and hard to use.

Thanks for testing! I agree, makes a lot more sense to increase the area and indicate before dragging. Currently its a bit annoying to use and doesn't have this "clean" feeling like in vscode. I will try to find a better approach!

@emilkrebs

emilkrebs commented Mar 17, 2026

Copy link
Copy Markdown
Author
image

Updates:

  • cursor upated to move on drag & hover
  • added functionality to style specifaclly on intersection-hover

Example from the image in dockpanel.css

.lm-DockPanel-handle.lm-mod-intersection {
  cursor: move;
  background-color: red;
}

@krassowski

Copy link
Copy Markdown
Member

I tested it and it works well. I skimmed the code and it looks clean, though I did not read deep into it. It looks like some tests will need updating, e.g.:

❌ @lumino/widgets > SplitPanel > #handleEvent() > keydown > should release the mouse if Escape is pressed
AssertionError: expected [ 'pointerdown', 'keydown', …(1) ] to not include 'pointermove'

@krassowski krassowski left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks great on the example preview. I am somewhat worried about potential performance impact here, see my comment. I am not saying that we have to move the listener to handles, but I would suggest trying that and if that is not feasible considering if some of the hit tests can be cached.

Comment on lines +485 to +486
this.node.addEventListener('pointermove', this);
this.node.addEventListener('pointerleave', this);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am somewhat worried about performance impact of constantly listening to pointermove on the entire widget. Can we instead only add listeners on the layout handles objects?

@emilkrebs

Copy link
Copy Markdown
Author

It looks great on the example preview. I am somewhat worried about potential performance impact here, see my comment. I am not saying that we have to move the listener to handles, but I would suggest trying that and if that is not feasible considering if some of the hit tests can be cached.

Good point! I have actually tested the performance using the chrome devtools snd noticed no significant increase in the before and after. However its definitely a good suggestion since I noticed a significant performance drop in both instances when resizing panels, might make sense to think about that in the future 🤔

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

3 participants