Repository navigation
fix(plugin-grid): a rich-content cell keeps the grid's one-line row — the Studio Records grid and console lists draw every row (objectui#12480) - #12502
Merged
objectstack-fleet[bot] merged 2 commits intoOct 15, 2026
Conversation
…objectui#12480) data-table's one-line clamp (`truncate`) bounds inline content only. The markdown/html/richtext cell renderers draw a block document, so one long value grew its row to the document's height and pushed later rows below the scroll box while the footer still counted them. ObjectGrid now wraps a rich-content column's renderer in a one-line clamp unless the column is authored `wrap: true`. Claude-Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB Co-authored-by: Claude <noreply@anthropic.com>
…udio-grid-missing-rows
Contributor
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
objectstack-fleet
Bot
deleted the
claude/issue-12480-studio-grid-missing-rows
branch
October 15, 2026 14:29
This was referenced Oct 15, 2026
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.
Fixes #12480
Clause-②: no
Root cause
The rows are not missing: they are drawn, below the fold of the grid's scroll box. One row is very tall.
data-tablekeeps a cell to one line withtruncateunless the column is authoredwrap: true.truncateis nowrap + overflow hidden + ellipsis. It bounds inline content only. It never bounds the cell body's height.markdown,html,richtext, theRICH_TEXT_FIELD_TYPEStable in@object-ui/fields) draw a block document: paragraphs, headings, lists. Blocks stack under nowrap.crm_accounthas adescriptionmarkdown field. Its seed gives Acme Corporation a long multi-paragraph description. The Studio Records grid shows every non-system field as a column (37 here), so the Description column is in the grid, off-screen to the right.The trigger is the content, not the row count. The 8-row object in the card did not reproduce it because it has no long rich-content value. An 8-row object with one does the same thing (table below).
PR #12479 is not the cause: the screenshot's commit
cf430cdis an ancestor of #12479's merge commit (git merge-base --is-ancestorexit 0).The fix
ObjectGrid(packages/plugin-grid/src/ObjectGrid.tsx). Every column passes throughapplyColumnChrome. That function now also runs a new step,withOneLineRichText. For a column whose field resolves to a rich-content renderer and which is not authoredwrap: true, it wraps the renderer's output in aline-clamp-1box. The first line of the document shows; the rest is cut.wrap: truestill shows the whole document, as authored.Why not in
data-table: it does not know field types. A generic height clamp there would also clip legitimate one-line widgets that are taller than one text line. Measured on the same harness: thumbnails 32 px, select badges 22 px, against a line height of 16 to 19.5 px.Measured per type on the harness: only
markdown,htmlandrichtextexceed one line. Before the fix, at the first row: html 176 px and richtext 104 px. textarea, json, address, multi-select, file, image and code stay within 16–32 px. So the clamp covers the whole class.Browser readings (Chromium
/opt/pw-browsers/chromium, 1280 x 900)Scratch harness in
apps/console(never committed, deleted after). It uses the realObjectView(plugin-view) withrenderStudioGridListas itsrenderListViewslot, inside amin-h-0 flex-1 overflow-autobody like the Data pillar'sdata-records-body. A mock data source suppliescrm_account-shaped fields, plus adescriptionmarkdown field carrying the Acme description on the last row. The "console" rows mountListView(plugin-list) directly with its default toolbar, which is the body the console's object list page renders. No backend ran.Triage's second question: yes, console list pages show the same thing. They render through the same
ObjectGrid, and this fix covers both.Tests (head
256cd24d4)packages/plugin-grid/src/__tests__/ObjectGrid.richTextOneLine-12480.test.tsx(jsdom does no layout, so these read the class contract and the row count).line-clamp-1), one per rich cell; each document is drawn inside its clamp; the text column is not clamped.wrap: trueon the markdown column: no clamp, and the list is drawn.truncates.d4005d878, mutated with objectstack'sscripts/ablation-replace.mjs --holdunder an EXIT trap):withOneLineRichTextwas replaced by an unconditionalreturn col. On disk: anchor count 1 to 0, marker count 0 to 1.git checkout HEAD.git diff HEADis 0 bytes, and the file's blob equals the HEAD blob (887bcfcb3989).../ObjectGridby source path.vitest run packages/plugin-grid/: 216 files / 2015 tests passed (ond4005d878). The new pin plusObjectGrid.columnWrapForward.test.tsx: 8 / 8 passed on256cd24d4.pnpm --filter @object-ui/plugin-grid type-check(bothtscprojects; the test project includessrc/**/*.test.tsx): exit 0, afterpnpm --filter '@object-ui/plugin-grid^...' buildexit 0.Gates
check:phantom-deps,self-import,unreferenced-sources,doc-example-readers,handler-key-reads,side-effects-array,element-data-source-declaration,spec-symbols,action-forward-parity,designer-field-key-parity,icon-record-names,i18n-keys,i18n-drift,i18n-designer-parity,control-bytesandnew-line-citations: all exit 0.node scripts/check-changeset-fixed.mjs,check-changeset-presence.mjsandcheck-changeset-no-major.mjs: exit 0.check:spec-floors: exit 1, its "no-artifact" prerequisite line (it wants a whole-workspace build). NOT MEASURED here. It is the known red on main (objectui#12334).eslint --no-inline-config --format json). The test file has 0 errors.ObjectGrid.tsxhas 1 error and 219 warnings; linted the same way, the base blob has 1 error and 215 warnings. The one error is the same pre-existingreact-hooks/static-componentsfar below the edit. The 4 new warnings areno-explicit-anyon the new step'scol/value/row/ schema reads, the same spelling as its neighbourwithSortability. The repo-widepnpm lintis CI's.Acceptance notes
wrap: truekeeps the full document. A rich-content column authoredwrap: truestill grows its row to the whole document. That is the author's choice, and this change keeps it.ObjectGridresolves its own renderers there, so this change does not reach it.origin/mainwas merged once more right before opening (256cd24d4, a merge commit). PR feat(app-shell): Automations pillar — rail grouped by object, flow meta and switch in the item header, Canvas · Variables · Runs · Problems · Debug tabs (objectui#12454) #12481's region ofStudioDesignSurface.tsxis untouched: this diff does not edit that file.Changeset:
.changeset/12480-studio-grid-missing-rows.md(@object-ui/plugin-gridpatch).The dev run's session is
session_01XVp19E1MYUTFM3dnkwz8gB(seatdomain:ui#2).Generated by Claude Code