feat: adaptive record surface + semantic span + responsive columns; fix #2515 (framework#2578)#2237
Merged
Merged
Conversation
…ntic span; fix #2515 (#2578)
Step 2 (objectui renderer) of #2578:
- autoLayout: resolveColSpan — span-aware (`span:'full'` → whole row), clamps a
legacy colSpan to the current grid (never overflows), and lays each section
out at its own column density. applyAutoColSpan gains a `sectionColumns` arg.
- ObjectForm (simple/grouped path): honour per-section `columns` within the
shared form grid, and carry `span`/`colSpan` from section field defs — fixes
#2515 (section.columns was ignored; grouped fields rendered single-column).
- FormField.span ('auto'|'full') added to @object-ui/types; carried through
sectionFields.
- ObjectView: default the record surface from field count via a local
deriveRecordSurface mirror (field-heavy → full page; mobile → page); explicit
schema.layout / navigation config still wins. Consolidate to the
@objectstack/spec export when objectui adopts spec >= 11.10.
autoLayout 43 tests (16 new); plugin-form 173 tests green; changed files type-clean.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…s in the console (#2578) The console renders app-shell's ObjectView, which owns the record-detail surface (defaulted to 'drawer'). Wire deriveRecordSurface so a FIELD-HEAVY object's record peek defaults to a full page — automating the "a heavy detail object can set navigation.mode = 'page'" note the code already carried — while light objects keep the drawer peek. An authored view/object `navigation` still wins. Also export deriveRecordSurface from @object-ui/plugin-view. Browser-verified against a live showcase server: field_zoo (57 fields) row-click navigates to a full /record page; product (6 fields) opens a drawer overlay. turbo type-check green (29/29). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ime overlay width (#2578) - inferColumns: scale the column CAP with field count (<=3->1, <=8->2, <=15->3, 16+->4). The cap is an upper bound; CSS container queries pick the ACTUAL column count from the form's real width, so the same form goes 1->2->3->4 columns as a drawer widens or becomes a page. - recordSurface: deriveOverlaySize + overlayWidthFor — map a size bucket (or 'auto' from field count) to a viewport-clamped width min(cap, 92vw). Consumes spec NavigationConfig.size (no inert key). - app-shell ObjectView: detailNavigation resolves size->width at runtime; the auto drawer is sized to the content. Authored navigation still wins. - types: ViewNavigationConfig.size. autoLayout 43 tests; turbo type-check 29/29. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…(framework#2578) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
Contributor
✅ Console Performance Budget
📦 Bundle Size Report
Size Limits
|
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.
Renderer side of framework#2578. Companion to objectstack-ai/framework#2595 (spec/lint). All metadata is AI-authored → the renderer derives presentation (surface / width / columns) at runtime; AI writes zero presentation.
What
deriveRecordSurface), not authored; mobile always pages. Wired into the app-shellObjectViewdetail navigation (an authored view/objectnavigationstill wins).FormField.span(auto/full); legacycolSpanis clamped so it never overflows the derived grid.ObjectFormhonours per-sectioncolumnsand carriesspan/colSpanfrom section defs — fixes #2515 (type:'simple'ignoredsection.columns, grouped fields rendered single-column).inferColumnsscales the column cap with field count (≤3→1, ≤8→2, ≤15→3, 16+→4); the actual count follows the form's real width via CSS container queries, so the same form goes 1→2→3→4 columns as a drawer widens or becomes a page.NavigationConfig.sizebucket resolved to a viewport-clamped width (overlayWidthFor); a pixel width is never authored.Verified in the browser (live showcase server)
Detail surface —
field_zoo(57 fields) row-click → full page/…/record/<id>;product(6 fields) → drawer overlay.Responsive columns, same
field_zoo57-field create form (measuredgridTemplateColumns):Tests
autoLayout43 +plugin-form173 tests — greenturbo type-check29/29 — greenRefs framework#2578 · companion of objectstack-ai/framework#2595
🤖 Generated with Claude Code