Repository navigation
Dock panels, and restore the viewer after a page reload - #23
Merged
Merged
Conversation
Chart panels dock as tabs and splits (dockview-core 4) with stable ids; push_panel() places them (id, where, ref), remove_panel() and panels() are new. R keeps the page's config and re-sends it on reload (protocol 3). Brushes are drawn from their rules, so restored ranges can be dragged. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changes
+menu in each tab bar. The spatial view is not a panel and stays where it is. Default: scatter above histogram (tabs when the dock is short).scatter/scatter:<id>,panel:<id>) and its data file, so moving a panel changes nothing else.push_panel(spec, data, id = NULL, title = NULL, where = c("tab", "right", "below"), ref = NULL)returns the id; pushing to an existing id replaces that chart in place; works before a browser connects.pane =is dropped. New:remove_panel(id),panels().describe()andstate()list panels.persistmiddleware sends the config (layers, images, genes, colouring, annotations, tool settings, layout) to R on change, merged over 300 ms. R keeps it verbatim as JSON text and sends it back first when a page connects (restore), followed by metadata, rules and the pushed panels it holds. Protocol 2 → 3.idsrule keepsparams.brush.Choices
Not in this PR
Tests
tscclean.panel_closed) and e2e tests (placement, reload restoring layout, panels, settings, selection and draggable brushes).devtoo) clicked a rule's × before the page had received the rule; it now waits. 8/8 runs pass.R CMD check --no-tests: 0 errors, 0 warnings, 1 note (R6, grDevices and later listed in Imports but not imported).🤖 Generated with Claude Code