Uh oh!
There was an error while loading. Please reload this page.
chore: release packages - #2166
Closed
github-actions[bot] wants to merge 1 commit into
Closed
Conversation
The latest updates on your projects. Learn more about Vercel for GitHub. |
github-actionsBotforce-pushed
the
changeset-release/main
branch
15 times, most recently
from
July 3, 2026 11:49
c58011b to
b302589Comparegithub-actionsBotforce-pushed
the
changeset-release/main
branch
from
July 3, 2026 12:10
b302589 to
2930402Compare
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 freeto 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.4.0
Minor Changes
144ab55: Consume the ADR-0085 object semantic roles from
@objectstack/spec@11.7.0, retiring the per-surface hint dialects:plugin-form'sderiveFieldGroupSectionsandplugin-detail'sderiveFieldGroupDetailSectionsare now thin adapters over the spec'sderiveFieldGroupLayout(ADR-0085 §5) — forms, modals and detail pages render the SAME grouping from one implementation. The canonicalcollapse: 'none' | 'expanded' | 'collapsed'enum is honoured everywhere (deprecatedcollapsible/collapsedanddefaultExpandedspellings still read for pre-11.7 metadata).stageFieldsemantic role: the detail stepper reads the top-levelstageField;stageField: falsenow actually suppresses stage detection (previously thefalsehandling was wired to the removeddetail.stageFieldkey, so spec-authoredfalsefell through to the name heuristic).highlightFieldsrename: default grid columns, card compact views, the detail highlight strip, child-record preview fields and interface-page default columns read the object'shighlightFields(deprecatedcompactLayoutspelling read as fallback for pre-11.7 metadata).objectDef.views.*UI hints and the ADR-0085-removeddetail.*block (sections,sectionGroups,highlightFields,stageField,useFieldGroups,showReferenceRail,hideReferenceRail,hideRelatedTab,relatedLayout) are no longer consulted. Per-page customization goes through an assigned Page schema (record:reference_railremains available there as a renderer capability).detail.renderViaSchemasurvives only as the legacy-renderer kill-switch and is removed together with that path.17374ce: Studio Data pillar Phase B — Validations & Settings views complete the Data v1 surface (builder-ui pillars):
ObjectSchema.validationsscriptrules (name / message / CEL fail-condition via the metadata-admin ConditionBuilder, fed the DRAFT field list / severity / active / delete). Non-script rule types (state_machine, format, …) stay visible read-only so the list remains a truthful inventory. New rules default to a VALID never-firingcondition: 'false'— an empty condition 422s the whole draft save and dead-ends the create flow.nameField,stageField(incl. thefalse"not a linear flow" state) and orderedhighlightFieldschips.listDrafts()headers, so a freshly-created writable base shows its draft objects instead of hanging on "加载中…"; the empty state now says the package has no objects yet.Patch Changes
9aec681: fix(app-shell): stop double-toasting failed script/modal action errors
serverActionHandlertoasted the action error itself and returned{ success: false, error }, whichActionRunner.handlePostExecutionalsosurfaces as a toast — so a failed script action (e.g. a validation throw)
showed two identical red toasts.
apiHandlerandflowHandleralready only return the error and let therunner own the toast;
serverActionHandlernow does the same, so a failedaction toasts exactly once.
2edcaff: Drop the
compactLayoutfallback reads (6 sites: ObjectGrid default columns, deriveHighlightFields, RecordDetailView highlight strip + child preview, ObjectView ×2, InterfaceListPage). The deprecated spelling was retired from the spec by framework#2539 (framework#2536) — served metadata carrieshighlightFieldsonly, so the fallbacks could never fire again; keeping them would teach the retired key to the next reader.346e78e: feat(home,studio): builder cover on Home + builder→app bridge
Two entries that wire the application builder into the platform journey the
Airtable way — Home is the cover, the app is the published front-end:
apps" — Build an app (start from scratch →
/studio, pick/create awritable package) and Start with a template (→ marketplace). End users
see their apps as before.
/studiotop bar: when the package ships an app,one click opens its published front-end (
/apps/<name>) in a new tab —the builder edits the 设计界面, the app is what end users see (Airtable's
Data ↔ published-Interfaces relationship, our draft→publish included).
0cf352b: fix(packages): Setup's package list and creator agree with the builder on writability
Two disagreements between Setup › Packages and the application builder about the
same package:
ScopeBadgedefaulted a missing scope toproject, so writabledatabase bases wore the same badge as read-only code packages. Scope-less
entries now show 可写/Writable (emerald),
projectreads 只读 · 代码包 /Read-only · code — matching the builder's labeling.
scope: 'project'onto newruntime-created bases, which made the builder's switcher/landing mislabel
Setup-created packages as read-only. New bases are now created scope-less,
the same shape the builder's own creator produces.
3c7abf9: feat(studio): Data pillar left rail gains search + inline "new object"
Closes the two remaining v1 rail gaps from the builder design (§4): the objects rail
now has a search filter and an inline 新建对象 creator (显示名 + auto-derived
snake_case 标识符 — hand-editable, since CJK labels can't derive one). Creating saves
the object as a draft in the current package (same runtime-create path the classic
Studio editor uses), seeded with one text field, and lands in 表单 · 布局 — the
metadata-level designer.
Draft-only objects (no physical table until the package publish) now get honest
placeholders instead of broken surfaces: the Records grid explains that data arrives
after publish (instead of firing SQL at a table that doesn't exist), and 预览 explains
there is no published definition yet.
839f6c2: fix(studio): stamp packageId on pillar draft saves → true package-scoped publish
Studio pillar draft-saves now pass the active
packageId, so each draft row isstamped with its package binding (
sys_metadata.package_id) instead ofnull.This makes the package-scoped surfaces reliable: the top-bar count + Changes review
filter via
GET /meta/_drafts?packageId=, and Publish promotes exactly thispackage's drafts via
POST /packages/:id/publish-drafts(which matchesWHERE package_id = X). Replaces the previous "publish all pending" fallback thatwas only needed because null-package drafts couldn't be package-filtered or picked
up by publish-drafts.
87e7c23: feat(studio): builder landing +
studio:builderentry — the builder joins the login journeyThe pillar application builder was a URL-only surface (zero links anywhere pointed at
/studio/...). Now it has a front door wired into the platform journey:read-only code packages listed for browsing), then jump into the full-screen pillar
builder. Served standalone at bare
/studio(bookmarkable) and embeddable viathe
studio:buildercomponent ref, which the framework's Studio app referencesfrom its new 「App Builder」 nav entry — so the journey is: login → Home → Studio →
App Builder → package → build.
/studio/:packageIdnow lands ondata(the pillar order's first surface)instead of
interfaces.packages-ioand shared by thelanding and the top-bar package switcher.
5ba3d0e: feat(studio): WYSIWYG form-layout designer in the Data pillar
The Data pillar's Form view gains a 布局 (Layout) designer: the object's default
form rendered WYSIWYG, where an admin adds sections, drag-reorders fields within
a section and drags them across sections, and clicks a field to edit it in the
same protocol inspector the grid uses — one screen, no Data↔Interface switch.
Sections persist as the object's
fieldGroups, and membership/order asfield.groupplus field order, via the existing draft → publish. The drag/section chrome (dnd-kit)
is the only new code; the data model and all mutations reuse the existing, tested
object-fields-iohelpers (readGroups/addGroup/renameGroup/removeGroup/moveGroup/clearFieldGroup/groupEntries).Also fixes the Data pillar clobbering an in-progress draft when the metadata client
identity churned (e.g. toggling the live preview): the object baseline is now loaded
exactly once per selected object.
34accfc: fix(studio): close the three journey dead-ends found in UX review
/studiolanding gets a slim frame with anObjectOS wordmark → Home, and the builder top bar gets a Home button — the
builder is no longer a browser-back-only dead end.
endless 加载中… — the rail says 还没有对象, the main pane explains the first
act (从第一个对象开始), and the object creator auto-opens.
offers 创建应用 (draft
appitem, name + identifier popover) instead ofnothing; after creation it shows 应用「…」待发布, and flips to 打开应用 once
the package publish lands.
65efc01: feat(studio): package-level draft publish (replaces per-item publish)
The pillar Studio now publishes at the package level, not item-by-item. Edits
across Data / Automation / Interface accumulate as per-item drafts; the top bar
shows a pending-draft count, a 变更 (Changes) review, and one 发布 that
publishes all pending drafts in a single governed pass — reusing
usePublishAllDrafts(per-packagepublish-draftswith structure-before-seeds + theADR-0038 L3 probes, and by-reference for orphan / null-package drafts).
every other edit, so nothing goes live outside the one package publish.
and a draft-save refreshes the pending count.
d8b9547: feat(studio): package switcher + inline "new writable package" in the top bar
The pillar Studio's top-bar package name becomes a switcher: it lists the app's
packages (kernel/system packages hidden), marks each 可写 (database base) or
只读 (code package — the ADR-0070 D4 gate refuses authoring into these), and
switches by navigation. A 新建软件包 inline form creates a writable base
(
POST /packages {id,name}— 名称 + auto-derived, hand-editable package id) andjumps straight into its Data pillar.
The current package also shows a proactive 只读 badge, so users learn the
package is read-only before hitting the save-time gate. Writability display is a
heuristic (
scope: 'project'= code, scope-less = base); the server-side gate staysthe authority.
00e7735: fix(studio): say what the Form preview shows — published definition, not the draft
The Data pillar's Form view has two sub-modes: 布局 (the WYSIWYG layout designer,
rendered from the draft) and 预览 (the live runtime ObjectForm). The preview
renders the published definition on purpose — a draft with structural changes has
no physical columns yet (DDL lands at publish), so a draft-with-data preview would
break — but the UI never said so: after arranging a draft in 布局, switching to 预览
silently showed the old shape, reading as "my changes are lost".
Now the sub-mode captions state their source (布局 = 草稿 · 含未发布改动 / 预览 =
已发布定义), and when unpublished changes exist the preview shows an amber note:
confirm the draft in 布局, or publish (top bar) first to see the published effect.
Publishing stays a deliberate user action — nothing auto-publishes.
Updated dependencies [1948c5b]
Updated dependencies [9cd9be1]
Updated dependencies [5160832]
Updated dependencies [69d6b94]
Updated dependencies [243a9ba]
Updated dependencies [289be5b]
@object-ui/plugin-detail@11.4.0
Minor Changes
144ab55: Consume the ADR-0085 object semantic roles from
@objectstack/spec@11.7.0, retiring the per-surface hint dialects:plugin-form'sderiveFieldGroupSectionsandplugin-detail'sderiveFieldGroupDetailSectionsare now thin adapters over the spec'sderiveFieldGroupLayout(ADR-0085 §5) — forms, modals and detail pages render the SAME grouping from one implementation. The canonicalcollapse: 'none' | 'expanded' | 'collapsed'enum is honoured everywhere (deprecatedcollapsible/collapsedanddefaultExpandedspellings still read for pre-11.7 metadata).stageFieldsemantic role: the detail stepper reads the top-levelstageField;stageField: falsenow actually suppresses stage detection (previously thefalsehandling was wired to the removeddetail.stageFieldkey, so spec-authoredfalsefell through to the name heuristic).highlightFieldsrename: default grid columns, card compact views, the detail highlight strip, child-record preview fields and interface-page default columns read the object'shighlightFields(deprecatedcompactLayoutspelling read as fallback for pre-11.7 metadata).objectDef.views.*UI hints and the ADR-0085-removeddetail.*block (sections,sectionGroups,highlightFields,stageField,useFieldGroups,showReferenceRail,hideReferenceRail,hideRelatedTab,relatedLayout) are no longer consulted. Per-page customization goes through an assigned Page schema (record:reference_railremains available there as a renderer capability).detail.renderViaSchemasurvives only as the legacy-renderer kill-switch and is removed together with that path.Patch Changes
compactLayoutfallback reads (6 sites: ObjectGrid default columns, deriveHighlightFields, RecordDetailView highlight strip + child preview, ObjectView ×2, InterfaceListPage). The deprecated spelling was retired from the spec by framework#2539 (framework#2536) — served metadata carrieshighlightFieldsonly, so the fallbacks could never fire again; keeping them would teach the retired key to the next reader.@object-ui/plugin-form@11.4.0
Minor Changes
144ab55: Consume the ADR-0085 object semantic roles from
@objectstack/spec@11.7.0, retiring the per-surface hint dialects:plugin-form'sderiveFieldGroupSectionsandplugin-detail'sderiveFieldGroupDetailSectionsare now thin adapters over the spec'sderiveFieldGroupLayout(ADR-0085 §5) — forms, modals and detail pages render the SAME grouping from one implementation. The canonicalcollapse: 'none' | 'expanded' | 'collapsed'enum is honoured everywhere (deprecatedcollapsible/collapsedanddefaultExpandedspellings still read for pre-11.7 metadata).stageFieldsemantic role: the detail stepper reads the top-levelstageField;stageField: falsenow actually suppresses stage detection (previously thefalsehandling was wired to the removeddetail.stageFieldkey, so spec-authoredfalsefell through to the name heuristic).highlightFieldsrename: default grid columns, card compact views, the detail highlight strip, child-record preview fields and interface-page default columns read the object'shighlightFields(deprecatedcompactLayoutspelling read as fallback for pre-11.7 metadata).objectDef.views.*UI hints and the ADR-0085-removeddetail.*block (sections,sectionGroups,highlightFields,stageField,useFieldGroups,showReferenceRail,hideReferenceRail,hideRelatedTab,relatedLayout) are no longer consulted. Per-page customization goes through an assigned Page schema (record:reference_railremains available there as a renderer capability).detail.renderViaSchemasurvives only as the legacy-renderer kill-switch and is removed together with that path.Patch Changes
@object-ui/plugin-grid@11.4.0
Minor Changes
144ab55: Consume the ADR-0085 object semantic roles from
@objectstack/spec@11.7.0, retiring the per-surface hint dialects:plugin-form'sderiveFieldGroupSectionsandplugin-detail'sderiveFieldGroupDetailSectionsare now thin adapters over the spec'sderiveFieldGroupLayout(ADR-0085 §5) — forms, modals and detail pages render the SAME grouping from one implementation. The canonicalcollapse: 'none' | 'expanded' | 'collapsed'enum is honoured everywhere (deprecatedcollapsible/collapsedanddefaultExpandedspellings still read for pre-11.7 metadata).stageFieldsemantic role: the detail stepper reads the top-levelstageField;stageField: falsenow actually suppresses stage detection (previously thefalsehandling was wired to the removeddetail.stageFieldkey, so spec-authoredfalsefell through to the name heuristic).highlightFieldsrename: default grid columns, card compact views, the detail highlight strip, child-record preview fields and interface-page default columns read the object'shighlightFields(deprecatedcompactLayoutspelling read as fallback for pre-11.7 metadata).objectDef.views.*UI hints and the ADR-0085-removeddetail.*block (sections,sectionGroups,highlightFields,stageField,useFieldGroups,showReferenceRail,hideReferenceRail,hideRelatedTab,relatedLayout) are no longer consulted. Per-page customization goes through an assigned Page schema (record:reference_railremains available there as a renderer capability).detail.renderViaSchemasurvives only as the legacy-renderer kill-switch and is removed together with that path.Patch Changes
1948c5b: fix(plugin-grid): keep the grid's row selection in sync when a bulk-action dialog closes
Closing a bulk-action result dialog (e.g. 派工 / 下推) on Done cleared
ObjectGrid's
selectedRows— which drives the selection toolbar — but nevertouched the DataTable's internal checkbox state. Two visible problems:
Desync on success. The toolbar disappeared while every row stayed visibly
ticked, because the checkboxes are table-internal state the grid couldn't
reach.
Lost selection on total failure. When the run failed for every row
(0 succeeded — a precondition error, say), the toolbar still vanished,
stranding the user with no way to retry the exact rows they'd picked.
The dialog-close handler now gates the reset on
result.succeeded > 0: a totalfailure keeps both the selection and the toolbar (and skips the phantom
refetch) so the user can fix the cause and retry. When it does reset, a new
selectionResetKeyprop on DataTable clears the internal checkbox selection inlockstep with the toolbar, so the two never drift apart.
2edcaff: Drop the
compactLayoutfallback reads (6 sites: ObjectGrid default columns, deriveHighlightFields, RecordDetailView highlight strip + child preview, ObjectView ×2, InterfaceListPage). The deprecated spelling was retired from the spec by framework#2539 (framework#2536) — served metadata carrieshighlightFieldsonly, so the fallbacks could never fire again; keeping them would teach the retired key to the next reader.9cd9be1: fix(plugin-grid): make the import wizard's preview step readable — wider columns + friendlier validation errors
Two problems on the import wizard's 预览 (preview) step:
Cramped preview table. With many mapped columns crammed into the fixed
dialog width, each header collapsed to one character per line (
关联排班计划stacked vertically) and became unreadable. Columns now get a
min-widthandheaders no longer wrap, so the preview area scrolls horizontally instead of
crushing every column.
Unreadable dry-run error messages. A reference cell that couldn't resolve
rendered as
第 1 行: product: product: no os_tianshun_ehr_product matches "导管架"— the field named twice, an internal object api-name leaking through, all in
English. The server already tags each failure with a structured
code, so wenow drive the message off that code (localized, with the offending value),
resolve the field's api-name to its label, and only fall back to the raw
server text — minus the duplicated prefix — for unrecognized codes. The same
row now reads
第 1 行: 产品:找不到匹配 "导管架" 的记录.Updated dependencies [1948c5b]
Updated dependencies [9cd9be1]
Updated dependencies [5160832]
Updated dependencies [69d6b94]
Updated dependencies [243a9ba]
Updated dependencies [289be5b]
@object-ui/console@11.4.0
Patch Changes
@object-ui/auth@11.4.0
Patch Changes
@object-ui/cli@11.4.0
Patch Changes
@object-ui/collaboration@11.4.0
Patch Changes
@object-ui/components@11.4.0
Patch Changes
1948c5b: fix(plugin-grid): keep the grid's row selection in sync when a bulk-action dialog closes
Closing a bulk-action result dialog (e.g. 派工 / 下推) on Done cleared
ObjectGrid's
selectedRows— which drives the selection toolbar — but nevertouched the DataTable's internal checkbox state. Two visible problems:
Desync on success. The toolbar disappeared while every row stayed visibly
ticked, because the checkboxes are table-internal state the grid couldn't
reach.
Lost selection on total failure. When the run failed for every row
(0 succeeded — a precondition error, say), the toolbar still vanished,
stranding the user with no way to retry the exact rows they'd picked.
The dialog-close handler now gates the reset on
result.succeeded > 0: a totalfailure keeps both the selection and the toolbar (and skips the phantom
refetch) so the user can fix the cause and retry. When it does reset, a new
selectionResetKeyprop on DataTable clears the internal checkbox selection inlockstep with the toolbar, so the two never drift apart.
Updated dependencies [1948c5b]
Updated dependencies [9cd9be1]
@object-ui/core@11.4.0
Patch Changes
@object-ui/data-objectstack@11.4.0
Patch Changes
@object-ui/fields@11.4.0
Patch Changes
5160832: fix(fields): inline-edit relational fields with the standard picker (not a text box)
Inline cell editing reuses the form's field widgets, but the inline map
(
EDIT_WIDGETS) was a hand-maintained subset of the form's (fieldWidgetMap)and had drifted: lookup / master_detail / user / owner had perfectly good
form pickers yet fell back to a plain text box inline (you'd type a raw record
id). Wire them up —
lookup/master_detail→LookupField,user/owner→UserField, the exact widgets the form uses. They read the related-objectdataSource from
SchemaRendererContext(which the grid provides), so therecord picker opens, fetches, and selects inline.
To stop the two lists drifting again,
indexnow exportsFORM_FIELD_TYPESand a drift-guard test pins the contract: every form widget type must have an
explicit inline decision — an editor in
EDIT_WIDGETSor an entry in the newINLINE_EXCLUDED_FIELD_TYPES(computed/binary/heavy/container types, each witha reason). A future form widget can no longer silently become a text box (or a
missing editor) in the grid.
69d6b94: feat(fields): inline-edit structured-value fields (color, address, location, geolocation, code, qrcode)
Completes the inline-editor ↔ form-widget parity from the previous fix: the six
structured types that already had lightweight form widgets —
color,address,location,geolocation,code,qrcode— now edit inline withthose same widgets instead of being deferred. All are dependency-light (no map
or code-editor libraries) and use the standard
FieldWidgetProps. Verifiedinline on the field-zoo: color → a color picker, code → a textarea, the rest
their value editors. The drift-guard's exclusion set now contains only the
genuinely-non-inline types (computed, binary, heavy editors, containers).
243a9ba: fix(fields): inline lookup editor shows the selected record's name (not the "Select…" placeholder)
When editing a
lookup/master_detail/user/ownerfield inline in thedata grid, the
LookupFieldpicker showed the placeholder instead of thecurrent record's name. The grid requests
$expandfor visible referencecolumns, so a lookup cell's value arrives as the related record object
(
{ id, name }) rather than a bare id. The read cell (LookupCellRenderer)already resolves objects via the display-name path, but the inline editor only
matched primitive ids (
findOption(value)with a strict===), so anobject value never resolved — and the hydration effect made it worse by calling
findOne(referenceTo, <object>)with a bogus id.LookupFieldnow resolves an expanded-reference object directly into itsdisplay option (mirroring the read cell), skips the pointless per-object fetch,
and normalises object values to their id for option matching / multi-select
toggle / removal.
FieldEditWidgetalso renders the relational pickerscompactinline — the same single-line, borderless trigger the line-item griduses — so the record name shows in the trigger instead of a chip stacked
above a "Select…" button.
289be5b: fix(fields): align inline lookup value resolution with the read cell (external-id strings, tolerant id match)
Follow-up to Inline lookup editor: picker trigger shows placeholder instead of the selected record's name #2125.
LookupField's inline display now resolves every valueshape the read cell (
LookupCellRenderer) does:'{"externalId":"Website Relaunch"}')are parsed and shown by their external id, and excluded from the hydration
fetch (so we never
findOnewith a raw JSON string).recordToOptiongainedan
externalIdfallback for both the value and the label.String()-coerced fallback (findOptionLoose)resolves a numeric cell value against a string-keyed option (and vice versa),
matching the read cell's
String(a) === String(b)comparison. Only consultedwhen the strict match misses, so homogeneous option lists are unaffected.
Also adds explicit inline-editor tests for
user/ownerfields (theydelegate to
LookupFieldviaUserField), completing coverage for the fullrelational set wired inline in fix(fields): inline-edit relational fields with the standard picker (not a text box) #2122.
Updated dependencies [1948c5b]
Updated dependencies [9cd9be1]
@object-ui/i18n@11.4.0
Patch Changes
9cd9be1: fix(plugin-grid): make the import wizard's preview step readable — wider columns + friendlier validation errors
Two problems on the import wizard's 预览 (preview) step:
Cramped preview table. With many mapped columns crammed into the fixed
dialog width, each header collapsed to one character per line (
关联排班计划stacked vertically) and became unreadable. Columns now get a
min-widthandheaders no longer wrap, so the preview area scrolls horizontally instead of
crushing every column.
Unreadable dry-run error messages. A reference cell that couldn't resolve
rendered as
第 1 行: product: product: no os_tianshun_ehr_product matches "导管架"— the field named twice, an internal object api-name leaking through, all in
English. The server already tags each failure with a structured
code, so wenow drive the message off that code (localized, with the offending value),
resolve the field's api-name to its label, and only fall back to the raw
server text — minus the duplicated prefix — for unrecognized codes. The same
row now reads
第 1 行: 产品:找不到匹配 "导管架" 的记录.@object-ui/layout@11.4.0
Patch Changes
@object-ui/mobile@11.4.0
Patch Changes
@object-ui/permissions@11.4.0
Patch Changes
@object-ui/plugin-ai@11.4.0
Patch Changes
@object-ui/plugin-calendar@11.4.0
Patch Changes
@object-ui/plugin-charts@11.4.0
Patch Changes
@object-ui/plugin-chatbot@11.4.0
Patch Changes
@object-ui/plugin-dashboard@11.4.0
Patch Changes
@object-ui/plugin-designer@11.4.0
Patch Changes
@object-ui/plugin-editor@11.4.0
Patch Changes
@object-ui/plugin-gantt@11.4.0
Patch Changes
@object-ui/plugin-kanban@11.4.0
Patch Changes
@object-ui/plugin-map@11.4.0
Patch Changes
@object-ui/plugin-markdown@11.4.0
Patch Changes
@object-ui/plugin-report@11.4.0
Patch Changes
@object-ui/plugin-timeline@11.4.0
Patch Changes
@object-ui/plugin-tree@11.4.0
Patch Changes
@object-ui/plugin-view@11.4.0
Patch Changes
@object-ui/providers@11.4.0
Patch Changes
@object-ui/react@11.4.0
Patch Changes
@object-ui/runner@11.4.0
Patch Changes
@object-ui/tenant@11.4.0
Patch Changes
@object-ui/types@11.4.0
Patch Changes
1948c5b: fix(plugin-grid): keep the grid's row selection in sync when a bulk-action dialog closes
Closing a bulk-action result dialog (e.g. 派工 / 下推) on Done cleared
ObjectGrid's
selectedRows— which drives the selection toolbar — but nevertouched the DataTable's internal checkbox state. Two visible problems:
Desync on success. The toolbar disappeared while every row stayed visibly
ticked, because the checkboxes are table-internal state the grid couldn't
reach.
Lost selection on total failure. When the run failed for every row
(0 succeeded — a precondition error, say), the toolbar still vanished,
stranding the user with no way to retry the exact rows they'd picked.
The dialog-close handler now gates the reset on
result.succeeded > 0: a totalfailure keeps both the selection and the toolbar (and skips the phantom
refetch) so the user can fix the cause and retry. When it does reset, a new
selectionResetKeyprop on DataTable clears the internal checkbox selection inlockstep with the toolbar, so the two never drift apart.
@object-ui/create-plugin@11.4.0
@object-ui/plugin-list@11.4.0
@object-ui/react-runtime@11.4.0
@object-ui/sdui-parser@11.4.0
object-ui@11.4.0
Patch Changes