Tests: The Home widget features read the stored widget settings after flushing the page's settings sync, pin the running account's widgets, and reload once instead of four times
Add New Column: Fixed Cmd+A in the formula editor (macOS) selecting every row and column of the table behind the dialog
Home: Fixed every Home page load writing back all the widget settings it had read, which undid a widget hidden or shown on another page of the same account
GROK-21108: Removed the "Group favorites" context menu; the platform's "Add to favorites" menu covers groups
Viewer gallery: A table view opened before the package's autostart ran kept the core Add viewer icon; every open view is configured now
GROK-21019: Add New Column: Fixed the dialog dropping the error behavior of the call it was opened with
GROK-21019: Add New Column: Added the gear next to the type that sets what happens to the rows the formula fails on: left empty or filled with a value, optionally with a column of per-row messages
Tests: Added the bdd/ project: the TestTrack PowerPack section translated into features — Add New Column (the dialog, the formula editor, the functions panel, formula refreshing, persistence over a file and over Northwind query results), the Home widgets, Enter in the Home search, a project opened by its direct link, XLSX opened five ways, data enrichment; the annotation regions and formula lines features moved here from UsageAnalysis, plus the Formula Lines regressions #2487, #671 and #2747
Formula Lines: Added the item the dialog's preview was handed to its widget status (current item)
Home: Named the widget hosts widget-<name>
Home: Added aria-busy to the search results until the search paths have answered
Home: Fixed the Community widget throwing when the community forum cannot be reached; it now says so
Add New Column: Fixed the Name tooltip's "Column name.", which began with a Cyrillic С, so a search for the text missed it
GROK-20931: Add New Column: Resizing the dialog now widens only the formula and preview pane; the column and function lists keep their width
GROK-20931: Add New Column: Clicking a function in the formula makes it the current object, so its help shows in the context panel
GROK-20931: Add New Column: Table-name and column-name selectors pop up automatically for parameters that take a table or a column, or for string parameters with the TableName / ColumnName semantic type; a column argument is offered from the table named by the parameter's options.table sibling (else the call's table argument), filtered by the parameter's column type filter
GROK-20931: Add New Column: Autocomplete shows the highlighted function's signature and description; the hint below the editor describes the call the caret is inside of; inserted functions use parameter names as placeholders instead of types
GROK-20931: Add New Column: Functions marked with the accessor option (Table, Column) are offered in autocomplete although they return a table or a column; a column-returning call satisfies a column parameter in validation
Viewer gallery: Named the gallery surfaces — viewer-card-<name>, card-label-<name>, viewer-tag-<tag>, viewer-gallery-root, viewer-gallery-controls, viewer-gallery-search, viewer-gallery-list, viewer-gallery-recent — with aria-label, role and aria-disabled on the cards
Status bar: The window toggles now carry name, aria-label and aria-pressed, so they are addressable by what they do rather than by the FontAwesome class of their icon; the Tabs toggle no longer bypasses the shared state setter
GROK-20922: Apply the Learn overflow class to the Spotlight tab pane restored on start
GROK-20753: Added domainRouteView (tags: domainRoutes) — the platform's /domains/<schema>/<table>[/<keyOrId>] addresses resolve to the u2 domain app through it
GROK-17068: Formula Lines: The formula editor now accepts the axis tokens X/Y on the left side of a line (Y = X + 25) or a band (X in(160, 190)), not only a ${column} reference, and no longer rewrites a token into a concrete column when the item is selected or the preview's axis changes
GROK-20909: Open the playlist when the Learn > VIDEO play icon is clicked
GROK-20899: Spotlight: Workspace no longer lists favorites that cannot be pinned there (saved layouts, saved views, tables, function calls), and the "Group favorites" context menu is offered only for entities Workspace can host — favorites written elsewhere (the platform's star icon, the context menu) bypassed the drop-target filter
GROK-20488: Home: Optimized the "Most Recent Entities" query — parameters and entity types are filtered through id sets instead of per-row joins (dev: 1.1 s → 0.5 s warm, 3.3 s → 0.5 s cold)
GROK-20753: Added the columnless "Filter Builder" filter (PowerPack:filterBuilder); the saved state is {model, query}; the status line is off by default (showStatus)
GROK-20753: Semantic-type operators are discovered from meta.role: filterOperators package functions; @datagrok-libraries/u2 and datagrok-api are referenced in-repo by relative path
Search: Apps and functions are now matched ignoring case and spaces, so "modelhub" finds "Model Hub" — previously only the exact spelling with the space worked, because a package function's name is its JS export symbol and the //name: annotation lands in friendlyName. meta.keywords is searched too, and an app no longer appears under both Apps and Functions (the exclusion checked tags only, missing apps declared via meta.role)
Add New Column: Fixed a formula edit being lost when the project reopens. A table that persists as a creation script is rebuilt from it, and the edit was applied straight to the column without being recorded, so the replay brought back the original formula (and the context panel's Apply recorded a plain AddNewColumn, which spawned a duplicate column on every open). Edits now run through the new EditColumnFormula transform, and renaming a column in the same dialog goes through RenameColumn instead of the name setter
GROK-20771: Route every current-user-group lookup through getCurrentUserGroup() and handle an unavailable group instead of dereferencing it
GROK-20631: Fire one open per Workspace row double-click and await the in-flight project preview before opening
Add New Column: Fixed "No such column: name" when picking a column in the columns list — the ColumnGrid internal name column is now __name, so read it through ColumnGrid.nameCol instead of by hardcoded name
23226: Use hasOwnProperty for function-name map lookups in getFunctionNameAtPosition to ignore inherited Object.prototype keys
Add New Column: Added an expression-only widget mode (aux.expressionEditorOnly) that edits a formula as a value — no Apply button, no preview, and the debounced text published back onto the call so a host can read it through call.inputParams['expression'].onChanged
Add New Column: The expression-only mode now validates what it is given — the formula is evaluated on the preview frame and checked against the call's declared type, so a filter/condition editor refuses anything that is not true/false. The verdict is published on the widget root (data-expression-error + an expression-validated event), the only channel that survives the package boundary
Add New Column: Fixed "Edit in dialog" from a hosted expression editor. The dialog shares the FuncCall, so it inherited expression-only mode and took the widget's no-preview path: its preview grid never updated, and it republished the formula on every keystroke, which made the host rebuild its panel and yank focus out of the dialog mid-word. OK now publishes the formula back to the host instead of appending a column, and the widget picks up the accepted text
Add New Column: A hosted widget no longer grabs focus 50ms after mounting — that is dialog behaviour, and in a context panel it steals the caret from wherever the user actually is
Add New Column: A condition editor's type mismatch now reads "The formula is int, not a true/false condition" instead of pointing at a column-type input that is hidden (viewer filters) or absent (hosted editors)
Add New Column: Fixed the widget-hosted editor always getting the DIALOG CodeMirror height (the class was chosen from this.widget before that field was assigned, so it always read undefined)
Added PowerPack:expressionEditorWidget(call), the formula editor as a widget bound to a table. Used by Flow's row-condition nodes; the Dart viewer filter property editor is the same idea in dialog form
Add New Column: Fixed the preview grid ignoring column-name changes after a rename raced with a preview computation (e.g. when the dialog opens with a pre-filled expression and the name is edited right away) — the tracked preview column name could go stale, silently disabling all subsequent renames until the dialog was reopened
Excel tests: moved the xlsx test/benchmark datasets out of Demo files to the public data.datagrok.ai bucket (s3://datagrok-data/tests/excel); tests create an anonymous S3 connection in before()
Moved the PowerPack Playwright E2E suite into the package (playwright/); helpers from @datagrok-libraries/test/src/playwright
Workspace: Fixed the editor-header "Open" doing nothing for a pinned query/function or data connection — it now opens the entity's own view the way the Browse tree does (a query's run view, a connection's queries browser) via the handler's renderPreview, consistently for all entity types, instead of Func.apply() (which ran with empty inputs and added no view) or only setting the context object. Running the query and viewing its table result stays on Run / the bottom-preview "Open"
Search: Added Spaces, Plugins, Notebooks, and Models to the search provider
Search: Added a "Demos" category returning demo functions (those with a meta.demoPath)
Search: Ordered result categories by relevance; when more than 5 categories match, advanced ones collapse behind a "Show advanced" button
Workspace: Pinned predictive models now render their own preview and launch via prepare().edit() on "Open", instead of being treated as a generic Func (which auto-ran them and failed)
Workspace: Pinned predictive models (and other JS-handler entities) now render in the list instead of throwing and breaking the whole section — entityIcon passes the JS entity to the handler, and EntityMetaDartProxy (js-api) now converts it for Dart-backed handlers (renderIcon/renderMarkup/renderTooltip/getCaption/etc. now toDart their argument, like isApplicable already did)
Workspace: Fixed "Open" on a pinned app (e.g. Demo) doing nothing — both the editor and the bottom-preview "Open" now launch the app (the preview button previously called Func.apply() and discarded the returned View)
Workspace: Fixed the bottom-preview "Open" opening an app in a background tab without focusing it — the click no longer bubbles to the Welcome view's activation handler (which reverted the current view back to Home), so the launched app becomes the active view
Workspace: App preview now fills the preview pane and scrolls instead of overflowing past it when the app's content is taller than the pane
Workspace: Pinned project now shows a live preview in the bottom pane (its views' grids with their saved layouts, like the app preview) instead of a blank panel; "Open" closes the preview-opened instance and opens all of its views in the main area, instead of only the first view with an "already open" balloon
GROK-19013: Viewers Gallery: Bio/Peptide sequence viewers (WebLogo, VdRegions, Peptides viewers) and tree viewers (Dendrogram, PhylocanvasGL) are now disabled for incompatible datasets in the Add Viewer dialog
Add New Column dialog: Fixed autocomplete popup closing when clicking its scrollbar
Add New Column dialog: Fixed TypeError when typing into the Name or Type input before CodeMirror finishes its async init
GROK-20040: Workspace: Pin Spaces; selecting a pinned space embeds the Browse-tree DG.SpaceView in the right pane and routes per-item previews into the bottom preview pane
Workspace: Replaced card grid with a list + entity-controls layout; selecting a pinned query or function shows its parameter editor on the right and runs results into a preview area below the Spotlight widget
Workspace: Function/query preview now uses the function's own result views (FuncCall.getResultViews()) — single view shown directly, multiple views wrapped in a tab control; falls back to a plain dataframe grid otherwise
Workspace: Pinned dashboards (projects) now show a project card on the right and a live project preview below
Workspace: Pin entities via drag-and-drop with dynamic drop zones (admin groups + "Myself only")
Activity Dashboard: Reduced Spotlight tab load time by fetching entities server-side in parallel with SQL, and progressively rendering the Recent section
GROK-19613: Add New Column dialog: Fixed duplicate scrollbars appearing on the column and function list panels when the dialog is resized
Activity Dashboard: Replaced the "Mark all as read" floating button in the Notifications tab with a left-aligned "N unread · Mark all as read" summary row to prevent overlap with notification text in narrow panels
Activity Dashboard: Fixed unread count header and tab badge not updating when marking a single notification as read
GROK-20036: Formula Lines dialog: Added host support for box plot, histogram, bar chart, and density plot (matching preview viewer type, orientation-aware popup items, restricted column pickers) and fixed assorted preview, axis-context-menu, and band/region defaults issues