A full pass over the user interface, tested in a real browser and in RStudio (dialog, Viewer pane, external browser, the addin, a saved HTML file and a Quarto page), plus new features for clinical data work.
Ctrl+Z / Ctrl+Y) and
a choice of %>% or |>. The drawer has real builder tabs: Join, Filter
(several conditions, AND/OR), Arrange, Mutate, Recode, Reshape and Summarise.sv_join_diagnostics().sv_column_profile() and sv_codebook() do the same from R.sideview(..., state =)
and sideview_widget(..., state =) restore card positions, zoom, sorts,
filters, joins and the pipeline, and sv_load_state(launch = TRUE) now
really launches.M hides it), Ctrl+K to
find a card or column, and double-click a card title to zoom to it. Fit
and Arrange buttons, and a tidy grid layout at launch.theme = "auto" (follows RStudio or the browser), "light",
"dark", sv_theme() or a bslib::bs_theme(). Every text colour meets
WCAG AA contrast.? lists them), real buttons with
labels and visible focus rings, and the OS "reduce motion" setting is
respected.sv_llm_models() lists the models an Ollama or OpenAI-compatible server
offers. AI errors now say how to fix them, and options(sideview.llm_think)
controls Ollama reasoning models. See ?sideview for all options.viewer = "browser" works again. Closing or reloading the tab no longer
leaves the console busy or kills the app (options(sideview.session_grace)).%> instead of %>%.NULL;
"Run in R" keeps its result in a named object (sv_result by default), in
the environment sideview() was called from (new env argument; the
workspace when called from the console).dplyr::case_when() (case_match() is deprecated
in dplyr 1.2).sideview-core HTML dependency with a content-based version, so browsers
never use stale JavaScript or CSS. The bundled pan/zoom code is now honestly
named sv-panzoom.js.tests/testthat/test-layout-browser.R, run with
NOT_CRAN=true) checks layout and behaviour with real mouse and keyboard
input.VirtualTable in sideview.js and sideview.css, bounding active table DOM nodes to ~30 rows with dynamic spacer elements and supporting 100k+ rows at 60 FPS scrolling.sv_normalize.arrow_table(), sv_normalize.Dataset(), sv_normalize.tbl_duckdb_connection()) with soft-dependency guards in Suggests:.sv_code_join() and server reactivity to support vector keys (by = c("key1" = "key1", "key2" = "key2")) and relational multi-table pipeline chaining.sv_code_pivot_longer() and sv_code_pivot_wider() with full syntactic backtick escaping and custom values_fn aggregation.sv_code_group_summarize() generating reproducible dplyr::group_by(...) %>% dplyr::summarise(..., .groups = 'drop') workflows.<svg class="sideview-sparkline">), categorical frequency distribution bars (.sideview-cat-profile), and color-coded missingness badges (.sideview-na-badge) with 25k-sample performance optimization.new_sideview_state(), sv_save_state(), and sv_load_state() supporting both portable .json and native R .rds workspace serialization for canvas pan/zoom, card coordinates, splines, and pipelines.sv_suggest_mappings() computing 3-part composite scores (name similarity with ID suffix detection, type compatibility, and Jaccard overlap) with precomputed unique sets and logical column exclusion..sideview-spline-suggested dashMove) with click-to-accept join mapping, and sv_auto_clean_rules() / sv_code_auto_clean() for automatic dplyr::case_match() crosswalk synthesis.sv_build_chat_prompt()), turn-based history sliding window (20 turns), and active pipeline code guards.tests/testthat/test-computer-use-gui.R and headless DOM test runner gui-test-runner.js verifying 6 core interaction scenarios (canvas coordinates, dragging, port click / spline connect, suggested spline acceptance, sorting/filtering, drawer action dispatch) with diagnostic dumps in tempdir().[🔗] link icon in card headers) now synchronously locks both vertical rows (scrollTop) and horizontal columns (scrollLeft) in proportional lockstep across wide datasets.column_disconnected to dynamically update code generation and downstream operations.clearOperations() to reliably purge active connecting port states (this.activePort) and strip visual .connecting classes when resetting the canvas.tests/testthat/test-assets.R to ensure zero runtime script syntax errors.▲ Ascending, ▼ Descending, original).dplyr::arrange() pipelines in the Action Drawer.🔍).>, >=, <, <=), exact matches (==, !=), and text substring filters (contains).dplyr::filter() pipelines.escapeColIdentifier() in sideview.js so column names with spaces or symbols (e.g. Patient ID, Glucose (mg/dL)) are safely wrapped in backticks across filter and arrange pipelines.sideview_ui() to handle nested list-columns and vectors safely with a [list] placeholder, avoiding length > 1 evaluation errors under R 4.2+.Insert Script: Pastes code at the current cursor location in the active RStudio script document via rstudioapi::insertText().Run & Exit: Sends code to the R console and closes the gadget immediately.Run in R: Evaluates code directly inside the current R environment (.GlobalEnv) with live row/column toast feedback.Run Console: Previews and buffers code for the RStudio console.Clear button in the Action Drawer to reset all active splines, sort orders, and filters.[✓] Auto-clear toggle to automatically reset canvas interactions upon code insertion or copy.gemma4:26b and llama3.2 with zero data leakage (http://localhost:11434).sideview: Multi-Table 2D Infinite Canvas for interactive data exploration, visual field mapping, and LLM-assisted Tidyverse code generation.sv_normalize()) supporting data.frame, tibble, base::table, matrix, gt, flextable, and htmlwidgets.save_sideview().sideview(), sideview_addin()).