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()).