Repository navigation
feat(app-shell): Data pillar — object header buttons, seven flat tabs with a 1000 px fold, flush Records body (objectui#12450) - #12477
Merged
objectstack-fleet[bot] merged 5 commits intoOct 15, 2026
Conversation
…000 px fold, flush Records body (objectui#12450) Claude-Session: https://claude.ai/code/session_01SJn1GEkrbbBQkhGC26wEDw Co-authored-by: Claude <noreply@anthropic.com>
…r panels by their flat tab (objectui#12450) Claude-Session: https://claude.ai/code/session_01SJn1GEkrbbBQkhGC26wEDw Co-authored-by: Claude <noreply@anthropic.com>
…(objectui#12450) Claude-Session: https://claude.ai/code/session_01SJn1GEkrbbBQkhGC26wEDw Co-authored-by: Claude <noreply@anthropic.com>
…(objectui#12450) Claude-Session: https://claude.ai/code/session_01SJn1GEkrbbBQkhGC26wEDw Co-authored-by: Claude <noreply@anthropic.com>
…, and the folded tab row (objectui#12450) Claude-Session: https://claude.ai/code/session_01SJn1GEkrbbBQkhGC26wEDw Co-authored-by: Claude <noreply@anthropic.com>
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
|
This was referenced Oct 15, 2026
Contributor
Author
席位核对 — ACCEPT · objectui#12450 · head
|
Contributor
Author
Landing · head
|
objectstack-fleet
Bot
deleted the
claude/issue-12450-data-pillar-layout
branch
October 15, 2026 12:39
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 #12450
Clause-②: no
The Data pillar's content column, after the layout skeleton (objectui#12459): the object header gets its two icon buttons, the five power panels become flat tabs that fold back into "Advanced ▾" below a 1000 px content column, and the Records tab loses the framed card and body padding around the list. Part of epic objectui#12446 (decisions 1, 3 and B).
What changed
Object header (
DataPillarinStudioDesignSurface.tsx)aria-label.Tab row
@container. The five flat tabs carryhidden @min-[1000px]:inline-flexand the trigger carries@min-[1000px]:hidden.dataTabsFold.ts.cf430cdbefore building:advancedDataTabsheld exactlyrules(Validations),hooks,actions,apiandsettings.Records body
maindropspx-6 py-4and the list'srounded-lg bordercard. The toolbar, grid and footer run flush with the column.Records toolbar (
renderStudioGridList)compactToolbar: false: Hide fields, Filter, Group and Sort as labelled buttons, then Refresh, Search and Add record.show*spellings touserActions. The slot's ownuserActionsstill wins.List search button (
packages/plugin-list, the toolbar's producer)aria-label, in the same two-attribute shape as Refresh. Card acceptance 3 asks for one on every icon-only toolbar button.Deviations from the artboard (
data-records.png)ListView's (packages/plugin-list), not plugin-grid's as the card assumed. Its controls holdListView-internal state: filters, sort, grouping, hidden fields, search keyword and refresh key. A host toolbar cannot drive that state, so suppression alone would remove the controls.ListView's toolbar is outside the claimed surface. It is raised as an open question in the dev report.#column is a 40 px cell with the number centred, about 16 px into the column. The artboard has a 48 px column with a 24 px inset, so card acceptance 1 (title edge = row-number edge at 24 px) is not met.ObjectGrid/ data-table internals (packages/plugin-grid,packages/components). The card's surface admits plugin-grid only for a toolbar option. Same open question.ListView's record-count bar. Same open question.objectstack dev, HotCRM's package is read-only and the server refuses to duplicate it (DUPLICATE_SOURCE_NOT_A_BASE). A read-only package draws no More button.Screenshots (1280 px, local console on its own backend)
docs/design/studio-redesign/after/12450-data-records-light.pngdocs/design/studio-redesign/after/12450-data-records-dark.pngdocs/design/studio-redesign/after/12450-data-records-folded-light.pngdocs/design/studio-redesign/after/skeleton-data-records-light.pngand-dark.png, fromcf430cd, as filed by the skeleton change. These were not re-shot.Measured in that browser run (Chromium, 1280 × 900):
aria-label(Refresh, Search).Tests (all at
4c06d3a, from the worktree root, through the shared verify lock)pnpm exec vitest run packages/app-shell/src/views/studio-design/in two runs:StudioDesignSurface.*:Test Files 98 passed (98),Tests 773 passed (773);StudioDesignSurface.*files:Test Files 76 passed (76),Tests 511 passed (511).pnpm exec vitest run packages/plugin-list/:Test Files 133 passed (133),Tests 1432 passed (1432). Run after the plugin-list change; that file has not changed since.DataPillar.flatTabs-12450.test.tsx(9 tests).DATA_TABS_FOLD_WIDTH.aria-labels, More holding Add field, and the read-only control.className={DATA_TAB_FLAT_ONLY}was replaced withclassName={undefined}throughablation-replace.mjs.Tests 1 failed | 8 passed (9), and the failure is the fold-class pin.git diff HEADempty.DataPillar.advancedKeepsName-11794.test.tsx, green.__tests__/dataPillarAddField.ts). Each step that clicked a power panel by name now clicks its flat tab.DataPillar.flatTabs-12450pins that both ways.DataPillar.authorRefusal-11785,choiceWithoutOptions-11253,designerRegistryPopulated,gridProjection,heldIncomplete-11786,inspectorBelongsToView-11781,panelGate,picklistServedOptions-10202, andStudioDesignSurface.autosaveInFlight-11204,autosaveSwitch-11232,cancelledLoad-11331,draftVersionConflict-11773,formFields,gridColumns.gridProjection,gridColumnsandinspectorBelongsToView-11781. All are green.hiddenSystemFields-11780,surfaceRequestandlistViewInspector-11823are unchanged and green.pnpm --filter @object-ui/app-shell --filter @object-ui/plugin-list type-check: both echotype-checkand exit 0. Dependency closure built first.tsconfig.test.json --listFileslists the new test and helper.pnpm --filter @object-ui/plugin-list --filter @object-ui/app-shell build: exit 0. Thearia-labelis inplugin-list/dist/index.js, and the fold classes are inapp-shell/dist/.../dataTabsFold.js.check-changeset-presence,check-changeset-no-major,check:i18n-keys,check:i18n-drift,check:i18n-designer-parity,check:control-bytes,check:new-line-citations(0 new) andcheck:test-path-roots.check-governed-queue-guard --testreports NOT GOVERNED.Acceptance notes
crm_accountat 1280 × 900, the grid drew 6 of the 9 rows the footer counts, and the 6th row stretched to the bottom. The before-screenshot fromcf430cdshows the same shape. The 8-row Acme object does not do it. Not root-caused and not filed. Carrier: none.smbreakpoint, the list toolbar's Filter and Sort buttons hide their labels and carry noaria-label, in both toolbar forms. Carrier: none.origin/mainmoved three commits aftercf430cd; none of them touches this diff's files.i18n:
engine.studio.data.objectSettingsandengine.studio.data.moreActionsare added in en and zh. Changeset:.changeset/12450-data-pillar-layout.md(app-shell minor, plugin-list patch).The dev run's session is
session_01SJn1GEkrbbBQkhGC26wEDw(seatdomain:ui#4).Generated by Claude Code