chore: release packages#2282
Merged
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
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.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
@object-ui/app-shell@11.5.0
Minor Changes
544d8eb: Add the app → Studio reverse bridge (ADR-0080): workspace admins see a "Design in Studio" entry in the app top bar that deep-links to the running app's owning package on the Studio design surface (
/studio/:packageId/data). Hidden for non-admins and for apps with no owning package; package writability stays server-side (read-only packages open as browse-only).6fffd3d: Client-side data-invalidation bus — refresh data, don't rebuild UI (objectui#2269 P1).
@object-ui/reactgains the bus:notifyDataChanged({objectName, recordId?}),useDataInvalidation(objectName, recordId?)(reader nonce),subscribeDataChanges, anduseMutationInvalidationBridge(dataSource)which fans every dataSource write (MutationEvent) onto the bus. The bus also dispatches the legacyobjectui:related-changedwindow event, so pre-bus listeners keep working.key={refreshKey}remount ofRecordDetailView(AppContent) and thekey={actionRefreshKey}remount ofDetailView(RecordDetailView) are GONE: record data now refetches in place via the bus — scroll, collapsed sections, tabs and in-progress inline edits survive every save/action/undo. All nine action-success bumps became precisely-scopednotifyDataChangedcalls; undo/redo use the operation's ownobjectName/recordId.RelatedCountStoreis wired to the bus (tab count badges refetch after any change to their object) and itsuseSyncExternalStoresnapshot is now a monotonic version — previously it returned the sameMapreference, soemit()never re-rendered subscribers and invalidations left badges stale;useRelatedCountVersion()is exported and drives the probe effect's re-fetch.urlParams.ts—form/formObject/formLink/tab/recordId/palette/shortcutsconstants replace scattered string literals) and AGENTS.md Commandment feat: add live playground for interactive schema demonstration #8 (UI-state classification: state that must survive a data refresh may never live only in an uncontrolled component).9255686: Record detail tabs are URL-addressable (
?tab=) and survive subtree remounts (objectui#2257, ADR-0054 C3).buildDefaultTabsemits STABLE semantic tab values (details/related:<child>/related/activity/history) instead of leaving the renderer to synthesize index-derived ones.PageTabsRendererhonorsitem.value, a host-providedschema.defaultTab(validated against actual tabs) andschema.onTabChange; index fallback kept for authored schemas without values.RecordDetailViewrestores the active tab from?tab=and writes it back withreplace(tab switches never stack history), via the purewithPageTabsUrlSyncpage-tree injector (never mutates authored/memoized page schemas). LegacyDetailView.autoTabswired to the same contract (defaultTab/onTabChange).refreshKey-style) and dev-StrictMode URL churn; enables?tab=deep links; invalid values fall back to Details.6c1ad9e: Record task flows open as derived overlays with lossless return (framework#2604, extends framework#2578).
?form=new/?form=<id>): browser Back closes the overlay with the origin (list scroll/filters, detail state) intact; field-heavy objects derive a full-screen modal (modalSize:'full') via the newderiveRecordFlowSurfacemirror in plugin-view, light ones keep the auto-sized modal.editMode:'page'opt-in unchanged.replace:trueso Back skips the transient form entry.?form=…&formObject=<child>&formLink=<fk>:<parentId>; the one global overlay pre-links the parent (refresh-safe), sizes to the CHILD object, and on save stays on the parent while only the child's related lists refetch. ModalForm now forwardsinitialValuesinto its master-detail (subforms) branch so pre-links survive for children with inline line items.fbec4e1: feat(studio): pick a connector action from the chosen connector (no more hand-typed action ids)
In a flow's Connector Action node, the
actionIdfield was a free-text box(
sendMessage · sendplaceholder) — a typo silently produced a node that failsat run time. It was left as text because a connector's actions have "no flat
catalog"; but each connector already advertises its actions in the runtime
descriptors (
GET /api/v1/automation/connectors→{ name, actions:[{key,label}] }).actionIdis now a picker of the chosen connector's actions, resolved fromthe sibling
connectorId(mirroring howobject-fieldlists the fields of itsresolved object). New reference kind
connector-action+connectorSourceonFlowReferenceSpec;useConnectorActionOptionsfetches the descriptors andresolveConnectorNamereads the connector from the node'sconnectorConfig. Likeevery reference in the designer it stays an editable combobox — with no
connector chosen (or none installed) it degrades to free text with a hint
("Choose a Connector above to list its actions" / "Actions of .").
Closes the last critical hand-typed-identifier gap in flow-node config (the
object / field / flow / role / connector / template references were already
pickers). Unit-tested (
resolveConnectorName,connectorActionsToOptions).7a6837c: Studio package-create dogfood follow-ups (Studio package-create UX dogfood follow-ups (2026-07 browser walkthrough) objectstack#2615):
field_Nnames, so relabeling "New field" to "Status" yields astatuscolumn instead offield_2forever (objectui#2260).5ed8d2d: feat(studio): automation enable/disable switch + live status in the Automations rail
The Automations pillar showed only an icon + label per flow, and no way to turn a
flow on or off — so an author couldn't tell whether an automation was live, or
stop one without deleting it (the header even said "Off by default · review before
enabling", but nothing reflected or controlled it). UX eval Fix documentation deployment for www.objectui.org #6.
fetched from the engine's
GET /api/v1/automation/_status(persistedstatusis intent; this is what's actually enabled + bound to its trigger). Refetched
after a publish; degrades silently on an older backend. A flow the engine
doesn't know yet (never published) shows no dot — the amber "unpublished draft"
chip already covers that.
status(active ↔ obsolete) and saves the draft immediately; the change goeslive when the package is published (so "review before enabling" is preserved).
Pairs with framework's engine-side gate (
obsolete/invalid→ not bound).New
engine.studio.auto.*i18n keys (en + zh). Unit-tested (FlowStatusDot:enabled→On, disabled→Off, no-state→nothing, bound-vs-unbound tooltip). Verified in
a live browser: the rail shows a green "On" against every showcase flow and the
header switch reads "Enabled".
70c4a3f: Studio package-create dogfood follow-ups (framework#2615 — P2 wizard + P3 polish):
landing create, landing duplicate) share a new
PackageIdInput: illegalcharacters are still normalized away, but no longer silently — a notice
says what was removed — a reverse-domain format hint shows while the id
doesn't parse, and a CJK-only name that yields no id suggestion is told to
type one manually instead of leaving the id box mysteriously empty.
actionsis now dropped from the Studio grid's data columns, so it nolonger collides with the always-pinned row-actions column (it stays
editable in the form designer).
ObjectViewtoolbar create buttonresolved a hardcoded English "Create"; it now uses the same
console.objectView.new("New" / 新建) key as the runtime object pages soStudio and the running app agree.
bare "Loading…"; it now shows the branded, boot-safe
LoadingScreen.longer truncate — the six controls that shared one cramped row are split
into a two-row layout so the inputs get the full panel width.
success toast and a "last saved HH:MM" indicator, matching the App and
Automations pillars.
Patch Changes
ec6bb16: Studio Automations rail now shows authored-but-unpublished (draft) flows.
The Automations pillar loaded its rail with
client.list('flow', …)only, whichreturns published/active metadata — so a flow authored (saved as a draft) but not
yet published was invisible in the rail, even while the "Changes · N" counter
showed a pending draft existed. Every sibling pillar (Data / Interfaces / Access)
already merged
client.listDrafts; Automations was the sole outlier.The published ∪ draft merge is extracted into a shared, unit-tested
loadPackageSurfaceshelper and adopted by the Automations pillar, which also nowre-reads on
publishNonceso drafts that go live collapse back into the publishedrail after a package publish. A draft-only flow now appears in its rail (badged
"Unpublished draft"), is selectable, and loads its draft body for editing —
matching the other pillars. Fixes the empty-rail report for writable-base packages
whose flows are all still drafts.
4fbf910: Stop double-firing action toasts on record-detail script actions and the delete handler.
ActionRunner.handlePostExecutionalready surfaces a result'serroras a toast(and a success toast unless
silent). Two handlers ALSO toasted themselves whilereturning
{success:false, error}(or a non-silentsuccess), so on a runnerseeded with
onToastthe same message fired twice:RecordDetailViewserverActionHandler(script actions): the HTTP/inner-failbranch and the catch branch each called
toast.errorbefore returning the error.fix(app-shell): stop double-toasting failed script/modal action errors #2177 fixed the twin in
useConsoleActionRuntime(interface pages) but not thiscopy, so record-detail script-action failures (e.g. a
RECORD_LOCKEDfrom anapproval-locked record) still showed the error twice for everyone on the published
console bundle. Both branches now return the error and let the runner toast it once.
useObjectActionsdeletehandler (ObjectView list/detail deletes): kept itsricher localized toast (label + description, or the bulk succeeded/failed summary)
and now returns WITHOUT
erroron failure so the runner doesn't re-toast it, andmarks successful deletes
silentso the runner doesn't append a second generic"Action completed successfully" toast.
Adds
useObjectActions.test.tsxasserting exactly one toast on deletesuccess / failure / partial-bulk-failure.
6f15e43: test(studio): extend the create-conformance gate to the inline pillar creators
createConformance.test.tsguards that every authorable type's defaultcreate-form output passes spec validation — catching the recurring "the designer
emits a minimal shape the spec rejects, so create→save 422s" dead-end family. But
it read only the metadata-admin registry, so the Studio's inline "New X"
creators (Data → object, Automations → flow, Interfaces → app, Access →
permission) — which build their skeletons directly in
StudioDesignSurface.tsx,bypassing the registry — were uncovered. A future edit to one of those shapes
could turn its "New" button into a silent dead-end with nothing to catch it.
Extracted the four inline skeletons into pure, exported builders
(
studio-design/skeletons.ts) consumed by BOTH the pillars and a new gate block,so the test can't drift from what the "New" button actually emits. No behavior
change — the builders return the byte-identical skeletons. The gate now covers all
create paths (registry + inline); the four inline skeletons validate clean.
Updated dependencies [544d8eb]
Updated dependencies [6fffd3d]
Updated dependencies [9255686]
Updated dependencies [fae75e2]
Updated dependencies [1072701]
@object-ui/components@11.5.0
Minor Changes
6fffd3d: Client-side data-invalidation bus — refresh data, don't rebuild UI (objectui#2269 P1).
@object-ui/reactgains the bus:notifyDataChanged({objectName, recordId?}),useDataInvalidation(objectName, recordId?)(reader nonce),subscribeDataChanges, anduseMutationInvalidationBridge(dataSource)which fans every dataSource write (MutationEvent) onto the bus. The bus also dispatches the legacyobjectui:related-changedwindow event, so pre-bus listeners keep working.key={refreshKey}remount ofRecordDetailView(AppContent) and thekey={actionRefreshKey}remount ofDetailView(RecordDetailView) are GONE: record data now refetches in place via the bus — scroll, collapsed sections, tabs and in-progress inline edits survive every save/action/undo. All nine action-success bumps became precisely-scopednotifyDataChangedcalls; undo/redo use the operation's ownobjectName/recordId.RelatedCountStoreis wired to the bus (tab count badges refetch after any change to their object) and itsuseSyncExternalStoresnapshot is now a monotonic version — previously it returned the sameMapreference, soemit()never re-rendered subscribers and invalidations left badges stale;useRelatedCountVersion()is exported and drives the probe effect's re-fetch.urlParams.ts—form/formObject/formLink/tab/recordId/palette/shortcutsconstants replace scattered string literals) and AGENTS.md Commandment feat: add live playground for interactive schema demonstration #8 (UI-state classification: state that must survive a data refresh may never live only in an uncontrolled component).9255686: Record detail tabs are URL-addressable (
?tab=) and survive subtree remounts (objectui#2257, ADR-0054 C3).buildDefaultTabsemits STABLE semantic tab values (details/related:<child>/related/activity/history) instead of leaving the renderer to synthesize index-derived ones.PageTabsRendererhonorsitem.value, a host-providedschema.defaultTab(validated against actual tabs) andschema.onTabChange; index fallback kept for authored schemas without values.RecordDetailViewrestores the active tab from?tab=and writes it back withreplace(tab switches never stack history), via the purewithPageTabsUrlSyncpage-tree injector (never mutates authored/memoized page schemas). LegacyDetailView.autoTabswired to the same contract (defaultTab/onTabChange).refreshKey-style) and dev-StrictMode URL churn; enables?tab=deep links; invalid values fall back to Details.Patch Changes
@object-ui/data-objectstack@11.5.0
Minor Changes
mappingmetadata artifacts targeting it, the wizard shows a "Saved mapping" selector; picking one hands rename + transforms + write semantics to the server (the artifact is authoritative), replaces the manual column table with a read-only summary of the mapping, and submitsmappingNameover source-header rows (mutually exclusive with the inline column rename).ImportRequestOptionsgainsmappingName; the objectstack adapter gainslistImportMappings(objectName)(feature-detected — the selector simply doesn't appear when unsupported). Newgrid.import.*strings added across all locales.Patch Changes
@object-ui/i18n@11.5.0
Minor Changes
/studio/:packageId/data). Hidden for non-admins and for apps with no owning package; package writability stays server-side (read-only packages open as browse-only).mappingmetadata artifacts targeting it, the wizard shows a "Saved mapping" selector; picking one hands rename + transforms + write semantics to the server (the artifact is authoritative), replaces the manual column table with a read-only summary of the mapping, and submitsmappingNameover source-header rows (mutually exclusive with the inline column rename).ImportRequestOptionsgainsmappingName; the objectstack adapter gainslistImportMappings(objectName)(feature-detected — the selector simply doesn't appear when unsupported). Newgrid.import.*strings added across all locales.@object-ui/plugin-detail@11.5.0
Minor Changes
6fffd3d: Client-side data-invalidation bus — refresh data, don't rebuild UI (objectui#2269 P1).
@object-ui/reactgains the bus:notifyDataChanged({objectName, recordId?}),useDataInvalidation(objectName, recordId?)(reader nonce),subscribeDataChanges, anduseMutationInvalidationBridge(dataSource)which fans every dataSource write (MutationEvent) onto the bus. The bus also dispatches the legacyobjectui:related-changedwindow event, so pre-bus listeners keep working.key={refreshKey}remount ofRecordDetailView(AppContent) and thekey={actionRefreshKey}remount ofDetailView(RecordDetailView) are GONE: record data now refetches in place via the bus — scroll, collapsed sections, tabs and in-progress inline edits survive every save/action/undo. All nine action-success bumps became precisely-scopednotifyDataChangedcalls; undo/redo use the operation's ownobjectName/recordId.RelatedCountStoreis wired to the bus (tab count badges refetch after any change to their object) and itsuseSyncExternalStoresnapshot is now a monotonic version — previously it returned the sameMapreference, soemit()never re-rendered subscribers and invalidations left badges stale;useRelatedCountVersion()is exported and drives the probe effect's re-fetch.urlParams.ts—form/formObject/formLink/tab/recordId/palette/shortcutsconstants replace scattered string literals) and AGENTS.md Commandment feat: add live playground for interactive schema demonstration #8 (UI-state classification: state that must survive a data refresh may never live only in an uncontrolled component).9255686: Record detail tabs are URL-addressable (
?tab=) and survive subtree remounts (objectui#2257, ADR-0054 C3).buildDefaultTabsemits STABLE semantic tab values (details/related:<child>/related/activity/history) instead of leaving the renderer to synthesize index-derived ones.PageTabsRendererhonorsitem.value, a host-providedschema.defaultTab(validated against actual tabs) andschema.onTabChange; index fallback kept for authored schemas without values.RecordDetailViewrestores the active tab from?tab=and writes it back withreplace(tab switches never stack history), via the purewithPageTabsUrlSyncpage-tree injector (never mutates authored/memoized page schemas). LegacyDetailView.autoTabswired to the same contract (defaultTab/onTabChange).refreshKey-style) and dev-StrictMode URL churn; enables?tab=deep links; invalid values fall back to Details.Patch Changes
@object-ui/plugin-grid@11.5.0
Minor Changes
mappingmetadata artifacts targeting it, the wizard shows a "Saved mapping" selector; picking one hands rename + transforms + write semantics to the server (the artifact is authoritative), replaces the manual column table with a read-only summary of the mapping, and submitsmappingNameover source-header rows (mutually exclusive with the inline column rename).ImportRequestOptionsgainsmappingName; the objectstack adapter gainslistImportMappings(objectName)(feature-detected — the selector simply doesn't appear when unsupported). Newgrid.import.*strings added across all locales.Patch Changes
@object-ui/plugin-view@11.5.0
Minor Changes
6c1ad9e: Record task flows open as derived overlays with lossless return (framework#2604, extends framework#2578).
?form=new/?form=<id>): browser Back closes the overlay with the origin (list scroll/filters, detail state) intact; field-heavy objects derive a full-screen modal (modalSize:'full') via the newderiveRecordFlowSurfacemirror in plugin-view, light ones keep the auto-sized modal.editMode:'page'opt-in unchanged.replace:trueso Back skips the transient form entry.?form=…&formObject=<child>&formLink=<fk>:<parentId>; the one global overlay pre-links the parent (refresh-safe), sizes to the CHILD object, and on save stays on the parent while only the child's related lists refetch. ModalForm now forwardsinitialValuesinto its master-detail (subforms) branch so pre-links survive for children with inline line items.Patch Changes
70c4a3f: Studio package-create dogfood follow-ups (framework#2615 — P2 wizard + P3 polish):
landing create, landing duplicate) share a new
PackageIdInput: illegalcharacters are still normalized away, but no longer silently — a notice
says what was removed — a reverse-domain format hint shows while the id
doesn't parse, and a CJK-only name that yields no id suggestion is told to
type one manually instead of leaving the id box mysteriously empty.
actionsis now dropped from the Studio grid's data columns, so it nolonger collides with the always-pinned row-actions column (it stays
editable in the form designer).
ObjectViewtoolbar create buttonresolved a hardcoded English "Create"; it now uses the same
console.objectView.new("New" / 新建) key as the runtime object pages soStudio and the running app agree.
bare "Loading…"; it now shows the branded, boot-safe
LoadingScreen.longer truncate — the six controls that shared one cramped row are split
into a two-row layout so the inputs get the full panel width.
success toast and a "last saved HH:MM" indicator, matching the App and
Automations pillars.
Updated dependencies [544d8eb]
Updated dependencies [6fffd3d]
Updated dependencies [9255686]
Updated dependencies [fae75e2]
Updated dependencies [1072701]
Updated dependencies [ec9c8ee]
Updated dependencies [6c1ad9e]
@object-ui/react@11.5.0
Minor Changes
6fffd3d: Client-side data-invalidation bus — refresh data, don't rebuild UI (objectui#2269 P1).
@object-ui/reactgains the bus:notifyDataChanged({objectName, recordId?}),useDataInvalidation(objectName, recordId?)(reader nonce),subscribeDataChanges, anduseMutationInvalidationBridge(dataSource)which fans every dataSource write (MutationEvent) onto the bus. The bus also dispatches the legacyobjectui:related-changedwindow event, so pre-bus listeners keep working.key={refreshKey}remount ofRecordDetailView(AppContent) and thekey={actionRefreshKey}remount ofDetailView(RecordDetailView) are GONE: record data now refetches in place via the bus — scroll, collapsed sections, tabs and in-progress inline edits survive every save/action/undo. All nine action-success bumps became precisely-scopednotifyDataChangedcalls; undo/redo use the operation's ownobjectName/recordId.RelatedCountStoreis wired to the bus (tab count badges refetch after any change to their object) and itsuseSyncExternalStoresnapshot is now a monotonic version — previously it returned the sameMapreference, soemit()never re-rendered subscribers and invalidations left badges stale;useRelatedCountVersion()is exported and drives the probe effect's re-fetch.urlParams.ts—form/formObject/formLink/tab/recordId/palette/shortcutsconstants replace scattered string literals) and AGENTS.md Commandment feat: add live playground for interactive schema demonstration #8 (UI-state classification: state that must survive a data refresh may never live only in an uncontrolled component).Patch Changes
fae75e2: Fix two bugs verified still-present after Fix objectui-side follow-ups from Showcase E2E audit (framework#2620) #2254 claimed to resolve them (framework#2620 / framework#2616 Showcase UX pass, tracked in Verification of #2254: B1 (wizard submitBehavior) and D (chart width/labels) still broken #2268):
Wizard/form
submitBehavior: 'thank-you'allowed duplicate resubmission. Fix objectui-side follow-ups from Showcase E2E audit (framework#2620) #2254 fixed the spec-bridge droppingsubmitBehaviorbefore it reached the renderer, so the configured toast message started appearing — butWizardForm's last step andObjectForm's submit handler only ever calledtoast.success(...)forthank-you/next-record; the form stayed mounted and fully filled with its submit button re-enabled once the request settled, so a second click created a second record. Both components now track a terminalsubmittedstate and, when set, replace the form with a confirmation panel (using the behavior'stitle/message, which were also never read before) — mirroring the patternapps/console/src/components/FormPage.tsxalready used for its own standalone forms.Command Center-style 3-up chart bands stayed collapsed to ~100-130px, and a dataset-bound chart's measure leaked its raw field name.
responsiveStyles(andstyle) were declared on the page-specPageComponentbridge input type but never copied onto theSchemaNodeinspec-bridge/bridges/page.ts::mapComponent()— so a page author's ADR-0065 layout override (e.g. forcingdisplay: 'grid'on atype: 'flex'band) never reachedSchemaRenderer, and the node silently fell back to its default flex layout. Both fields are now mapped through.ObjectChart's dataset-bound fetch path (schema.dataset+ds.queryDataset(...)) discarded the response'sfieldsarray (which carries each measure'slabel, e.g.{ name: 'task_count', label: 'Tasks' }) before it ever reachedbuildChartSeries()— whosefieldsparam already resolves this correctly (seechart-series.test.ts) — so the legend/tooltip always fell back to the raw field name. The fetchedfieldsare now captured and threaded through.Updated dependencies [544d8eb]
Updated dependencies [9255686]
Updated dependencies [1072701]
@object-ui/types@11.5.0
Minor Changes
mappingmetadata artifacts targeting it, the wizard shows a "Saved mapping" selector; picking one hands rename + transforms + write semantics to the server (the artifact is authoritative), replaces the manual column table with a read-only summary of the mapping, and submitsmappingNameover source-header rows (mutually exclusive with the inline column rename).ImportRequestOptionsgainsmappingName; the objectstack adapter gainslistImportMappings(objectName)(feature-detected — the selector simply doesn't appear when unsupported). Newgrid.import.*strings added across all locales.Patch Changes
9255686: Record detail tabs are URL-addressable (
?tab=) and survive subtree remounts (objectui#2257, ADR-0054 C3).buildDefaultTabsemits STABLE semantic tab values (details/related:<child>/related/activity/history) instead of leaving the renderer to synthesize index-derived ones.PageTabsRendererhonorsitem.value, a host-providedschema.defaultTab(validated against actual tabs) andschema.onTabChange; index fallback kept for authored schemas without values.RecordDetailViewrestores the active tab from?tab=and writes it back withreplace(tab switches never stack history), via the purewithPageTabsUrlSyncpage-tree injector (never mutates authored/memoized page schemas). LegacyDetailView.autoTabswired to the same contract (defaultTab/onTabChange).refreshKey-style) and dev-StrictMode URL churn; enables?tab=deep links; invalid values fall back to Details.@object-ui/console@11.5.0
Patch Changes
@object-ui/auth@11.5.0
Patch Changes
@object-ui/cli@11.5.0
Patch Changes
@object-ui/collaboration@11.5.0
Patch Changes
@object-ui/core@11.5.0
Patch Changes
@object-ui/fields@11.5.0
Patch Changes
@object-ui/layout@11.5.0
Patch Changes
@object-ui/mobile@11.5.0
Patch Changes
@object-ui/permissions@11.5.0
Patch Changes
@object-ui/plugin-ai@11.5.0
Patch Changes
@object-ui/plugin-calendar@11.5.0
Patch Changes
@object-ui/plugin-charts@11.5.0
Patch Changes
fae75e2: Fix two bugs verified still-present after Fix objectui-side follow-ups from Showcase E2E audit (framework#2620) #2254 claimed to resolve them (framework#2620 / framework#2616 Showcase UX pass, tracked in Verification of #2254: B1 (wizard submitBehavior) and D (chart width/labels) still broken #2268):
Wizard/form
submitBehavior: 'thank-you'allowed duplicate resubmission. Fix objectui-side follow-ups from Showcase E2E audit (framework#2620) #2254 fixed the spec-bridge droppingsubmitBehaviorbefore it reached the renderer, so the configured toast message started appearing — butWizardForm's last step andObjectForm's submit handler only ever calledtoast.success(...)forthank-you/next-record; the form stayed mounted and fully filled with its submit button re-enabled once the request settled, so a second click created a second record. Both components now track a terminalsubmittedstate and, when set, replace the form with a confirmation panel (using the behavior'stitle/message, which were also never read before) — mirroring the patternapps/console/src/components/FormPage.tsxalready used for its own standalone forms.Command Center-style 3-up chart bands stayed collapsed to ~100-130px, and a dataset-bound chart's measure leaked its raw field name.
responsiveStyles(andstyle) were declared on the page-specPageComponentbridge input type but never copied onto theSchemaNodeinspec-bridge/bridges/page.ts::mapComponent()— so a page author's ADR-0065 layout override (e.g. forcingdisplay: 'grid'on atype: 'flex'band) never reachedSchemaRenderer, and the node silently fell back to its default flex layout. Both fields are now mapped through.ObjectChart's dataset-bound fetch path (schema.dataset+ds.queryDataset(...)) discarded the response'sfieldsarray (which carries each measure'slabel, e.g.{ name: 'task_count', label: 'Tasks' }) before it ever reachedbuildChartSeries()— whosefieldsparam already resolves this correctly (seechart-series.test.ts) — so the legend/tooltip always fell back to the raw field name. The fetchedfieldsare now captured and threaded through.Updated dependencies [544d8eb]
Updated dependencies [6fffd3d]
Updated dependencies [9255686]
Updated dependencies [fae75e2]
Updated dependencies [1072701]
@object-ui/plugin-chatbot@11.5.0
Patch Changes
@object-ui/plugin-dashboard@11.5.0
Patch Changes
@object-ui/plugin-designer@11.5.0
Patch Changes
@object-ui/plugin-editor@11.5.0
Patch Changes
@object-ui/plugin-form@11.5.0
Patch Changes
fae75e2: Fix two bugs verified still-present after Fix objectui-side follow-ups from Showcase E2E audit (framework#2620) #2254 claimed to resolve them (framework#2620 / framework#2616 Showcase UX pass, tracked in Verification of #2254: B1 (wizard submitBehavior) and D (chart width/labels) still broken #2268):
Wizard/form
submitBehavior: 'thank-you'allowed duplicate resubmission. Fix objectui-side follow-ups from Showcase E2E audit (framework#2620) #2254 fixed the spec-bridge droppingsubmitBehaviorbefore it reached the renderer, so the configured toast message started appearing — butWizardForm's last step andObjectForm's submit handler only ever calledtoast.success(...)forthank-you/next-record; the form stayed mounted and fully filled with its submit button re-enabled once the request settled, so a second click created a second record. Both components now track a terminalsubmittedstate and, when set, replace the form with a confirmation panel (using the behavior'stitle/message, which were also never read before) — mirroring the patternapps/console/src/components/FormPage.tsxalready used for its own standalone forms.Command Center-style 3-up chart bands stayed collapsed to ~100-130px, and a dataset-bound chart's measure leaked its raw field name.
responsiveStyles(andstyle) were declared on the page-specPageComponentbridge input type but never copied onto theSchemaNodeinspec-bridge/bridges/page.ts::mapComponent()— so a page author's ADR-0065 layout override (e.g. forcingdisplay: 'grid'on atype: 'flex'band) never reachedSchemaRenderer, and the node silently fell back to its default flex layout. Both fields are now mapped through.ObjectChart's dataset-bound fetch path (schema.dataset+ds.queryDataset(...)) discarded the response'sfieldsarray (which carries each measure'slabel, e.g.{ name: 'task_count', label: 'Tasks' }) before it ever reachedbuildChartSeries()— whosefieldsparam already resolves this correctly (seechart-series.test.ts) — so the legend/tooltip always fell back to the raw field name. The fetchedfieldsare now captured and threaded through.ec9c8ee: Fix master-detail record create: stop double success toast + localize the Cancel button.
Objects with inline subforms (master-detail, e.g. a Lead with product line items)
render
MasterDetailForminsideModalForm/DrawerForminstead of the plainfooter, which exposed two mismatches with the host contract:
Double success toast. Flat
ObjectFormdelegates confirmation to the hostwhen an
onSuccessis supplied (skips its own default toast), butMasterDetailForm.handleSavedALWAYS toastedCreated/SavedAND ranonSuccess. In the console the host'sonSuccesschains into thecrud_successhandler, which toasts a localized message — so create fired both
Createdande.g.
线索创建成功.handleSavednow only toasts as a fallback when no hostonSuccessis provided, matching theObjectFormcontract; saves without a hosthandler stay non-silent.
Hardcoded English
Cancel. The master-detail action bar wroteCancelas aliteral and accepted no
cancelText, so the button stayed English while thesubmit button was localized (
submitTextwas already forwarded).MasterDetailFormnow takescancelText, andModalForm/DrawerForm/ObjectFormforward the host's localized label down the subforms branch.
Adds regression tests: create with a host
onSuccessfires no built-in toast (nodouble-confirm), and the Cancel button renders the host-supplied
cancelText.6c1ad9e: Record task flows open as derived overlays with lossless return (framework#2604, extends framework#2578).
?form=new/?form=<id>): browser Back closes the overlay with the origin (list scroll/filters, detail state) intact; field-heavy objects derive a full-screen modal (modalSize:'full') via the newderiveRecordFlowSurfacemirror in plugin-view, light ones keep the auto-sized modal.editMode:'page'opt-in unchanged.replace:trueso Back skips the transient form entry.?form=…&formObject=<child>&formLink=<fk>:<parentId>; the one global overlay pre-links the parent (refresh-safe), sizes to the CHILD object, and on save stays on the parent while only the child's related lists refetch. ModalForm now forwardsinitialValuesinto its master-detail (subforms) branch so pre-links survive for children with inline line items.Updated dependencies [544d8eb]
Updated dependencies [6fffd3d]
Updated dependencies [9255686]
Updated dependencies [fae75e2]
Updated dependencies [1072701]
@object-ui/plugin-gantt@11.5.0
Patch Changes
@object-ui/plugin-kanban@11.5.0
Patch Changes
@object-ui/plugin-map@11.5.0
Patch Changes
@object-ui/plugin-markdown@11.5.0
Patch Changes
@object-ui/plugin-report@11.5.0
Patch Changes
@object-ui/plugin-timeline@11.5.0
Patch Changes
@object-ui/plugin-tree@11.5.0
Patch Changes
@object-ui/providers@11.5.0
Patch Changes
@object-ui/runner@11.5.0
Patch Changes
@object-ui/tenant@11.5.0
Patch Changes
@object-ui/create-plugin@11.5.0
@object-ui/plugin-list@11.5.0
@object-ui/react-runtime@11.5.0
@object-ui/sdui-parser@11.5.0
object-ui@11.5.0
Patch Changes