From c6b796a44d0b481557c5688966b108c4b7fb6969 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 5 Jul 2026 09:05:23 +0000 Subject: [PATCH] chore: release packages --- .changeset/app-studio-reverse-bridge.md | 6 - .changeset/automations-rail-draft-flows.md | 19 --- .changeset/data-invalidation-bus.md | 13 -- .../dedupe-recorddetail-delete-toast.md | 26 --- .changeset/detail-tab-url-sync.md | 13 -- .changeset/record-flow-surface-2604.md | 11 -- .changeset/studio-connector-action-picker.md | 24 --- .changeset/studio-dogfood-followups.md | 10 -- .changeset/studio-flow-enable-toggle.md | 26 --- .changeset/studio-inline-skeleton-gate.md | 20 --- apps/console/CHANGELOG.md | 7 + apps/console/package.json | 2 +- packages/app-shell/CHANGELOG.md | 151 ++++++++++++++++++ packages/app-shell/package.json | 2 +- packages/auth/CHANGELOG.md | 7 + packages/auth/package.json | 2 +- packages/cli/CHANGELOG.md | 10 ++ packages/cli/package.json | 2 +- packages/collaboration/CHANGELOG.md | 7 + packages/collaboration/package.json | 2 +- packages/components/CHANGELOG.md | 30 ++++ packages/components/package.json | 2 +- packages/core/CHANGELOG.md | 7 + packages/core/package.json | 2 +- packages/create-plugin/CHANGELOG.md | 2 + packages/create-plugin/package.json | 2 +- packages/data-objectstack/CHANGELOG.md | 8 + packages/data-objectstack/package.json | 2 +- packages/fields/CHANGELOG.md | 14 ++ packages/fields/package.json | 2 +- packages/i18n/CHANGELOG.md | 6 + packages/i18n/package.json | 2 +- packages/layout/CHANGELOG.md | 11 ++ packages/layout/package.json | 2 +- packages/mobile/CHANGELOG.md | 7 + packages/mobile/package.json | 2 +- packages/permissions/CHANGELOG.md | 7 + packages/permissions/package.json | 2 +- packages/plugin-ai/CHANGELOG.md | 11 ++ packages/plugin-ai/package.json | 2 +- packages/plugin-calendar/CHANGELOG.md | 16 ++ packages/plugin-calendar/package.json | 2 +- packages/plugin-charts/CHANGELOG.md | 13 ++ packages/plugin-charts/package.json | 2 +- packages/plugin-chatbot/CHANGELOG.md | 11 ++ packages/plugin-chatbot/package.json | 2 +- packages/plugin-dashboard/CHANGELOG.md | 14 ++ packages/plugin-dashboard/package.json | 2 +- packages/plugin-designer/CHANGELOG.md | 18 +++ packages/plugin-designer/package.json | 2 +- packages/plugin-detail/CHANGELOG.md | 23 +++ packages/plugin-detail/package.json | 2 +- packages/plugin-editor/CHANGELOG.md | 11 ++ packages/plugin-editor/package.json | 2 +- packages/plugin-form/CHANGELOG.md | 21 +++ packages/plugin-form/package.json | 2 +- packages/plugin-gantt/CHANGELOG.md | 15 ++ packages/plugin-gantt/package.json | 2 +- packages/plugin-grid/CHANGELOG.md | 15 ++ packages/plugin-grid/package.json | 2 +- packages/plugin-kanban/CHANGELOG.md | 15 ++ packages/plugin-kanban/package.json | 2 +- packages/plugin-list/CHANGELOG.md | 2 + packages/plugin-list/package.json | 2 +- packages/plugin-map/CHANGELOG.md | 11 ++ packages/plugin-map/package.json | 2 +- packages/plugin-markdown/CHANGELOG.md | 11 ++ packages/plugin-markdown/package.json | 2 +- packages/plugin-report/CHANGELOG.md | 15 ++ packages/plugin-report/package.json | 2 +- packages/plugin-timeline/CHANGELOG.md | 12 ++ packages/plugin-timeline/package.json | 2 +- packages/plugin-tree/CHANGELOG.md | 11 ++ packages/plugin-tree/package.json | 2 +- packages/plugin-view/CHANGELOG.md | 22 +++ packages/plugin-view/package.json | 2 +- packages/providers/CHANGELOG.md | 7 + packages/providers/package.json | 2 +- packages/react-runtime/CHANGELOG.md | 2 + packages/react-runtime/package.json | 2 +- packages/react/CHANGELOG.md | 20 +++ packages/react/package.json | 2 +- packages/runner/CHANGELOG.md | 13 ++ packages/runner/package.json | 2 +- packages/sdui-parser/CHANGELOG.md | 2 + packages/sdui-parser/package.json | 2 +- packages/tenant/CHANGELOG.md | 7 + packages/tenant/package.json | 2 +- packages/types/CHANGELOG.md | 11 ++ packages/types/package.json | 2 +- packages/vscode-extension/CHANGELOG.md | 8 + packages/vscode-extension/package.json | 2 +- 92 files changed, 652 insertions(+), 209 deletions(-) delete mode 100644 .changeset/app-studio-reverse-bridge.md delete mode 100644 .changeset/automations-rail-draft-flows.md delete mode 100644 .changeset/data-invalidation-bus.md delete mode 100644 .changeset/dedupe-recorddetail-delete-toast.md delete mode 100644 .changeset/detail-tab-url-sync.md delete mode 100644 .changeset/record-flow-surface-2604.md delete mode 100644 .changeset/studio-connector-action-picker.md delete mode 100644 .changeset/studio-dogfood-followups.md delete mode 100644 .changeset/studio-flow-enable-toggle.md delete mode 100644 .changeset/studio-inline-skeleton-gate.md diff --git a/.changeset/app-studio-reverse-bridge.md b/.changeset/app-studio-reverse-bridge.md deleted file mode 100644 index 943e9560c..000000000 --- a/.changeset/app-studio-reverse-bridge.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@object-ui/app-shell': minor -'@object-ui/i18n': minor ---- - -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). diff --git a/.changeset/automations-rail-draft-flows.md b/.changeset/automations-rail-draft-flows.md deleted file mode 100644 index 106dfbc15..000000000 --- a/.changeset/automations-rail-draft-flows.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -'@object-ui/app-shell': patch ---- - -Studio Automations rail now shows authored-but-unpublished (draft) flows. - -The Automations pillar loaded its rail with `client.list('flow', …)` only, which -returns 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 -`loadPackageSurfaces` helper and adopted by the Automations pillar, which also now -re-reads on `publishNonce` so drafts that go live collapse back into the published -rail 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. diff --git a/.changeset/data-invalidation-bus.md b/.changeset/data-invalidation-bus.md deleted file mode 100644 index f0f7e1582..000000000 --- a/.changeset/data-invalidation-bus.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -'@object-ui/react': minor -'@object-ui/app-shell': minor -'@object-ui/plugin-detail': minor -'@object-ui/components': minor ---- - -Client-side data-invalidation bus — refresh data, don't rebuild UI (objectui#2269 P1). - -- `@object-ui/react` gains the bus: `notifyDataChanged({objectName, recordId?})`, `useDataInvalidation(objectName, recordId?)` (reader nonce), `subscribeDataChanges`, and `useMutationInvalidationBridge(dataSource)` which fans every dataSource write (`MutationEvent`) onto the bus. The bus also dispatches the legacy `objectui:related-changed` window event, so pre-bus listeners keep working. -- The `key={refreshKey}` remount of `RecordDetailView` (AppContent) and the `key={actionRefreshKey}` remount of `DetailView` (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-scoped `notifyDataChanged` calls; undo/redo use the operation's own `objectName`/`recordId`. -- `RelatedCountStore` is wired to the bus (tab count badges refetch after any change to their object) and its `useSyncExternalStore` snapshot is now a monotonic version — previously it returned the same `Map` reference, so `emit()` never re-rendered subscribers and invalidations left badges stale; `useRelatedCountVersion()` is exported and drives the probe effect's re-fetch. -- app-shell also gains the reserved URL-param registry (`urlParams.ts` — `form`/`formObject`/`formLink`/`tab`/`recordId`/`palette`/`shortcuts` constants replace scattered string literals) and AGENTS.md Commandment #8 (UI-state classification: state that must survive a data refresh may never live only in an uncontrolled component). diff --git a/.changeset/dedupe-recorddetail-delete-toast.md b/.changeset/dedupe-recorddetail-delete-toast.md deleted file mode 100644 index 08e2346cc..000000000 --- a/.changeset/dedupe-recorddetail-delete-toast.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -'@object-ui/app-shell': patch ---- - -Stop double-firing action toasts on record-detail script actions and the delete handler. - -`ActionRunner.handlePostExecution` already surfaces a result's `error` as a toast -(and a success toast unless `silent`). Two handlers ALSO toasted themselves while -returning `{success:false, error}` (or a non-`silent` success), so on a runner -seeded with `onToast` the same message fired twice: - -- **`RecordDetailView` `serverActionHandler`** (script actions): the HTTP/inner-fail - branch and the catch branch each called `toast.error` before returning the error. - #2177 fixed the twin in `useConsoleActionRuntime` (interface pages) but not this - copy, so record-detail script-action failures (e.g. a `RECORD_LOCKED` from an - approval-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. - -- **`useObjectActions` `delete` handler** (ObjectView list/detail deletes): kept its - richer localized toast (label + description, or the bulk succeeded/failed summary) - and now returns WITHOUT `error` on failure so the runner doesn't re-toast it, and - marks successful deletes `silent` so the runner doesn't append a second generic - "Action completed successfully" toast. - -Adds `useObjectActions.test.tsx` asserting exactly one toast on delete -success / failure / partial-bulk-failure. diff --git a/.changeset/detail-tab-url-sync.md b/.changeset/detail-tab-url-sync.md deleted file mode 100644 index c01c0accd..000000000 --- a/.changeset/detail-tab-url-sync.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -'@object-ui/components': minor -'@object-ui/plugin-detail': minor -'@object-ui/app-shell': minor -'@object-ui/types': patch ---- - -Record detail tabs are URL-addressable (`?tab=`) and survive subtree remounts (objectui#2257, ADR-0054 C3). - -- `buildDefaultTabs` emits STABLE semantic tab values (`details` / `related:` / `related` / `activity` / `history`) instead of leaving the renderer to synthesize index-derived ones. -- `PageTabsRenderer` honors `item.value`, a host-provided `schema.defaultTab` (validated against actual tabs) and `schema.onTabChange`; index fallback kept for authored schemas without values. -- app-shell `RecordDetailView` restores the active tab from `?tab=` and writes it back with `replace` (tab switches never stack history), via the pure `withPageTabsUrlSync` page-tree injector (never mutates authored/memoized page schemas). Legacy `DetailView.autoTabs` wired to the same contract (`defaultTab`/`onTabChange`). -- Fixes the tab strip resetting to Details after save-refresh remounts (`refreshKey`-style) and dev-StrictMode URL churn; enables `?tab=` deep links; invalid values fall back to Details. diff --git a/.changeset/record-flow-surface-2604.md b/.changeset/record-flow-surface-2604.md deleted file mode 100644 index 474096a04..000000000 --- a/.changeset/record-flow-surface-2604.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -'@object-ui/plugin-view': minor -'@object-ui/app-shell': minor -'@object-ui/plugin-form': patch ---- - -Record task flows open as derived overlays with lossless return (framework#2604, extends framework#2578). - -- **Create/Edit never route** — the global record form is URL-driven (`?form=new` / `?form=`): 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 new `deriveRecordFlowSurface` mirror in plugin-view, light ones keep the auto-sized modal. `editMode:'page'` opt-in unchanged. -- **Save invariant** — *edit never moves you* (origin refetches in place); *create lands on the new record's detail* on its derived surface (drawer over the still-intact list for light objects, detail route for heavy), with `replace:true` so Back skips the transient form entry. -- **Subtable child create/edit = overlay over the parent detail, never a route** — related-list New/Edit push `?form=…&formObject=&formLink=:`; 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 forwards `initialValues` into its master-detail (subforms) branch so pre-links survive for children with inline line items. diff --git a/.changeset/studio-connector-action-picker.md b/.changeset/studio-connector-action-picker.md deleted file mode 100644 index d0571d9e5..000000000 --- a/.changeset/studio-connector-action-picker.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -"@object-ui/app-shell": minor ---- - -feat(studio): pick a connector action from the chosen connector (no more hand-typed action ids) - -In a flow's **Connector Action** node, the `actionId` field was a free-text box -(`sendMessage · send` placeholder) — a typo silently produced a node that fails -at 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}] }`). - -`actionId` is now a **picker of the chosen connector's actions**, resolved from -the sibling `connectorId` (mirroring how `object-field` lists the fields of its -resolved object). New reference kind `connector-action` + `connectorSource` on -`FlowReferenceSpec`; `useConnectorActionOptions` fetches the descriptors and -`resolveConnectorName` reads the connector from the node's `connectorConfig`. Like -every 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`). diff --git a/.changeset/studio-dogfood-followups.md b/.changeset/studio-dogfood-followups.md deleted file mode 100644 index fe99bad0d..000000000 --- a/.changeset/studio-dogfood-followups.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -"@object-ui/app-shell": minor ---- - -Studio package-create dogfood follow-ups (objectstack-ai/framework#2615): - -- Read-only packages now gate authoring affordances client-side (Add field, New object/flow/permission set, nav Edit, Save draft, Publish, Create app) with a "switch to a writable package" hint, instead of letting doomed edits pile up until the server 422s (objectui#2259). Records stay fully usable; the field inspector opens read-only. -- New fields auto-derive their API name from the label while still auto-named — now also for the Data pillar's generic `field_N` names, so relabeling "New field" to "Status" yields a `status` column instead of `field_2` forever (objectui#2260). -- Publish is review-then-confirm: the header button opens the pending-changes panel, whose footer "Publish N change(s)" fires the atomic package publish; panel entries expand to a per-item field/property diff against the live version (objectui#2261). -- Create app can scaffold navigation from the package's objects (checkbox, on by default): one spec-valid object menu item per object, closing the "fresh app has zero nav" dead-end (objectui#2262). diff --git a/.changeset/studio-flow-enable-toggle.md b/.changeset/studio-flow-enable-toggle.md deleted file mode 100644 index 56ff700f5..000000000 --- a/.changeset/studio-flow-enable-toggle.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -"@object-ui/app-shell": minor ---- - -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 #6. - -- **Live status dot** on every flow in the rail — a green "On" / gray "Off", - fetched from the engine's `GET /api/v1/automation/_status` (persisted `status` - is 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. -- **Enable/Disable switch** in the flow header. It flips the flow's deployment - `status` (active ↔ obsolete) and saves the draft immediately; the change goes - live 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". diff --git a/.changeset/studio-inline-skeleton-gate.md b/.changeset/studio-inline-skeleton-gate.md deleted file mode 100644 index 15abc6636..000000000 --- a/.changeset/studio-inline-skeleton-gate.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -"@object-ui/app-shell": patch ---- - -test(studio): extend the create-conformance gate to the inline pillar creators - -`createConformance.test.ts` guards that every authorable type's default -create-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. diff --git a/apps/console/CHANGELOG.md b/apps/console/CHANGELOG.md index a813111e1..5b8818cbb 100644 --- a/apps/console/CHANGELOG.md +++ b/apps/console/CHANGELOG.md @@ -1,5 +1,12 @@ # @object-ui/console +## 11.5.0 + +### Patch Changes + +- @object-ui/react-runtime@11.5.0 +- @object-ui/sdui-parser@11.5.0 + ## 11.4.0 ### Patch Changes diff --git a/apps/console/package.json b/apps/console/package.json index c6b677e94..564229768 100644 --- a/apps/console/package.json +++ b/apps/console/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/console", - "version": "11.4.0", + "version": "11.5.0", "description": "ObjectStack Console — opinionated, fork-ready runtime console built on @object-ui/app-shell with the full plugin set wired up. Ships as a Hono UI plugin serving a pre-built SPA.", "license": "MIT", "type": "module", diff --git a/packages/app-shell/CHANGELOG.md b/packages/app-shell/CHANGELOG.md index 5cb964703..6765e1788 100644 --- a/packages/app-shell/CHANGELOG.md +++ b/packages/app-shell/CHANGELOG.md @@ -1,5 +1,156 @@ # @object-ui/app-shell — Changelog +## 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/react` gains the bus: `notifyDataChanged({objectName, recordId?})`, `useDataInvalidation(objectName, recordId?)` (reader nonce), `subscribeDataChanges`, and `useMutationInvalidationBridge(dataSource)` which fans every dataSource write (`MutationEvent`) onto the bus. The bus also dispatches the legacy `objectui:related-changed` window event, so pre-bus listeners keep working. + - The `key={refreshKey}` remount of `RecordDetailView` (AppContent) and the `key={actionRefreshKey}` remount of `DetailView` (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-scoped `notifyDataChanged` calls; undo/redo use the operation's own `objectName`/`recordId`. + - `RelatedCountStore` is wired to the bus (tab count badges refetch after any change to their object) and its `useSyncExternalStore` snapshot is now a monotonic version — previously it returned the same `Map` reference, so `emit()` never re-rendered subscribers and invalidations left badges stale; `useRelatedCountVersion()` is exported and drives the probe effect's re-fetch. + - app-shell also gains the reserved URL-param registry (`urlParams.ts` — `form`/`formObject`/`formLink`/`tab`/`recordId`/`palette`/`shortcuts` constants replace scattered string literals) and AGENTS.md Commandment #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). + + - `buildDefaultTabs` emits STABLE semantic tab values (`details` / `related:` / `related` / `activity` / `history`) instead of leaving the renderer to synthesize index-derived ones. + - `PageTabsRenderer` honors `item.value`, a host-provided `schema.defaultTab` (validated against actual tabs) and `schema.onTabChange`; index fallback kept for authored schemas without values. + - app-shell `RecordDetailView` restores the active tab from `?tab=` and writes it back with `replace` (tab switches never stack history), via the pure `withPageTabsUrlSync` page-tree injector (never mutates authored/memoized page schemas). Legacy `DetailView.autoTabs` wired to the same contract (`defaultTab`/`onTabChange`). + - Fixes the tab strip resetting to Details after save-refresh remounts (`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). + + - **Create/Edit never route** — the global record form is URL-driven (`?form=new` / `?form=`): 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 new `deriveRecordFlowSurface` mirror in plugin-view, light ones keep the auto-sized modal. `editMode:'page'` opt-in unchanged. + - **Save invariant** — _edit never moves you_ (origin refetches in place); _create lands on the new record's detail_ on its derived surface (drawer over the still-intact list for light objects, detail route for heavy), with `replace:true` so Back skips the transient form entry. + - **Subtable child create/edit = overlay over the parent detail, never a route** — related-list New/Edit push `?form=…&formObject=&formLink=:`; 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 forwards `initialValues` into 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 `actionId` field was a free-text box + (`sendMessage · send` placeholder) — a typo silently produced a node that fails + at 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}] }`). + + `actionId` is now a **picker of the chosen connector's actions**, resolved from + the sibling `connectorId` (mirroring how `object-field` lists the fields of its + resolved object). New reference kind `connector-action` + `connectorSource` on + `FlowReferenceSpec`; `useConnectorActionOptions` fetches the descriptors and + `resolveConnectorName` reads the connector from the node's `connectorConfig`. Like + every 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 (objectstack-ai/framework#2615): + + - Read-only packages now gate authoring affordances client-side (Add field, New object/flow/permission set, nav Edit, Save draft, Publish, Create app) with a "switch to a writable package" hint, instead of letting doomed edits pile up until the server 422s (objectui#2259). Records stay fully usable; the field inspector opens read-only. + - New fields auto-derive their API name from the label while still auto-named — now also for the Data pillar's generic `field_N` names, so relabeling "New field" to "Status" yields a `status` column instead of `field_2` forever (objectui#2260). + - Publish is review-then-confirm: the header button opens the pending-changes panel, whose footer "Publish N change(s)" fires the atomic package publish; panel entries expand to a per-item field/property diff against the live version (objectui#2261). + - Create app can scaffold navigation from the package's objects (checkbox, on by default): one spec-valid object menu item per object, closing the "fresh app has zero nav" dead-end (objectui#2262). + +- 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 #6. + + - **Live status dot** on every flow in the rail — a green "On" / gray "Off", + fetched from the engine's `GET /api/v1/automation/_status` (persisted `status` + is 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. + - **Enable/Disable switch** in the flow header. It flips the flow's deployment + `status` (active ↔ obsolete) and saves the draft immediately; the change goes + live 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". + +### Patch Changes + +- ec6bb16: Studio Automations rail now shows authored-but-unpublished (draft) flows. + + The Automations pillar loaded its rail with `client.list('flow', …)` only, which + returns 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 + `loadPackageSurfaces` helper and adopted by the Automations pillar, which also now + re-reads on `publishNonce` so drafts that go live collapse back into the published + rail 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.handlePostExecution` already surfaces a result's `error` as a toast + (and a success toast unless `silent`). Two handlers ALSO toasted themselves while + returning `{success:false, error}` (or a non-`silent` success), so on a runner + seeded with `onToast` the same message fired twice: + + - **`RecordDetailView` `serverActionHandler`** (script actions): the HTTP/inner-fail + branch and the catch branch each called `toast.error` before returning the error. + #2177 fixed the twin in `useConsoleActionRuntime` (interface pages) but not this + copy, so record-detail script-action failures (e.g. a `RECORD_LOCKED` from an + approval-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. + + - **`useObjectActions` `delete` handler** (ObjectView list/detail deletes): kept its + richer localized toast (label + description, or the bulk succeeded/failed summary) + and now returns WITHOUT `error` on failure so the runner doesn't re-toast it, and + marks successful deletes `silent` so the runner doesn't append a second generic + "Action completed successfully" toast. + + Adds `useObjectActions.test.tsx` asserting exactly one toast on delete + success / failure / partial-bulk-failure. + +- 6f15e43: test(studio): extend the create-conformance gate to the inline pillar creators + + `createConformance.test.ts` guards that every authorable type's default + create-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] + - @object-ui/i18n@11.5.0 + - @object-ui/react@11.5.0 + - @object-ui/components@11.5.0 + - @object-ui/types@11.5.0 + - @object-ui/fields@11.5.0 + - @object-ui/layout@11.5.0 + - @object-ui/plugin-editor@11.5.0 + - @object-ui/auth@11.5.0 + - @object-ui/collaboration@11.5.0 + - @object-ui/core@11.5.0 + - @object-ui/data-objectstack@11.5.0 + - @object-ui/permissions@11.5.0 + - @object-ui/providers@11.5.0 + ## 11.4.0 ### Minor Changes diff --git a/packages/app-shell/package.json b/packages/app-shell/package.json index 1060d7f39..5d1f68cc2 100644 --- a/packages/app-shell/package.json +++ b/packages/app-shell/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/app-shell", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "license": "MIT", "description": "Minimal application shell for ObjectUI - framework-agnostic rendering engine", diff --git a/packages/auth/CHANGELOG.md b/packages/auth/CHANGELOG.md index 1f916886b..f7132f334 100644 --- a/packages/auth/CHANGELOG.md +++ b/packages/auth/CHANGELOG.md @@ -1,5 +1,12 @@ # @object-ui/auth +## 11.5.0 + +### Patch Changes + +- Updated dependencies [9255686] + - @object-ui/types@11.5.0 + ## 11.4.0 ### Patch Changes diff --git a/packages/auth/package.json b/packages/auth/package.json index aa3125855..400894734 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/auth", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "license": "MIT", "description": "Authentication system for Object UI with AuthProvider, useAuth hook, AuthGuard, and form components.", diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 8a74a2d39..1dca185a4 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,15 @@ # @object-ui/cli +## 11.5.0 + +### Patch Changes + +- Updated dependencies [6fffd3d] +- Updated dependencies [9255686] + - @object-ui/react@11.5.0 + - @object-ui/components@11.5.0 + - @object-ui/types@11.5.0 + ## 11.4.0 ### Patch Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index 1edd66a85..c6cc38c97 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/cli", - "version": "11.4.0", + "version": "11.5.0", "description": "Standalone CLI for Object UI — scaffold, develop, build and validate JSON/YAML schema-driven applications.", "type": "module", "homepage": "https://www.objectui.org/docs/utilities/cli", diff --git a/packages/collaboration/CHANGELOG.md b/packages/collaboration/CHANGELOG.md index 8c85384d3..776504581 100644 --- a/packages/collaboration/CHANGELOG.md +++ b/packages/collaboration/CHANGELOG.md @@ -1,5 +1,12 @@ # @object-ui/collaboration +## 11.5.0 + +### Patch Changes + +- Updated dependencies [9255686] + - @object-ui/types@11.5.0 + ## 11.4.0 ### Patch Changes diff --git a/packages/collaboration/package.json b/packages/collaboration/package.json index 8e781be24..39b62de12 100644 --- a/packages/collaboration/package.json +++ b/packages/collaboration/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/collaboration", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "license": "MIT", "description": "Real-time collaboration for Object UI with presence tracking, live cursors, conflict resolution, and comment threads.", diff --git a/packages/components/CHANGELOG.md b/packages/components/CHANGELOG.md index aa43e2c9d..d19e255ac 100644 --- a/packages/components/CHANGELOG.md +++ b/packages/components/CHANGELOG.md @@ -1,5 +1,35 @@ # @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/react` gains the bus: `notifyDataChanged({objectName, recordId?})`, `useDataInvalidation(objectName, recordId?)` (reader nonce), `subscribeDataChanges`, and `useMutationInvalidationBridge(dataSource)` which fans every dataSource write (`MutationEvent`) onto the bus. The bus also dispatches the legacy `objectui:related-changed` window event, so pre-bus listeners keep working. + - The `key={refreshKey}` remount of `RecordDetailView` (AppContent) and the `key={actionRefreshKey}` remount of `DetailView` (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-scoped `notifyDataChanged` calls; undo/redo use the operation's own `objectName`/`recordId`. + - `RelatedCountStore` is wired to the bus (tab count badges refetch after any change to their object) and its `useSyncExternalStore` snapshot is now a monotonic version — previously it returned the same `Map` reference, so `emit()` never re-rendered subscribers and invalidations left badges stale; `useRelatedCountVersion()` is exported and drives the probe effect's re-fetch. + - app-shell also gains the reserved URL-param registry (`urlParams.ts` — `form`/`formObject`/`formLink`/`tab`/`recordId`/`palette`/`shortcuts` constants replace scattered string literals) and AGENTS.md Commandment #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). + + - `buildDefaultTabs` emits STABLE semantic tab values (`details` / `related:` / `related` / `activity` / `history`) instead of leaving the renderer to synthesize index-derived ones. + - `PageTabsRenderer` honors `item.value`, a host-provided `schema.defaultTab` (validated against actual tabs) and `schema.onTabChange`; index fallback kept for authored schemas without values. + - app-shell `RecordDetailView` restores the active tab from `?tab=` and writes it back with `replace` (tab switches never stack history), via the pure `withPageTabsUrlSync` page-tree injector (never mutates authored/memoized page schemas). Legacy `DetailView.autoTabs` wired to the same contract (`defaultTab`/`onTabChange`). + - Fixes the tab strip resetting to Details after save-refresh remounts (`refreshKey`-style) and dev-StrictMode URL churn; enables `?tab=` deep links; invalid values fall back to Details. + +### Patch Changes + +- Updated dependencies [544d8eb] +- Updated dependencies [6fffd3d] +- Updated dependencies [9255686] + - @object-ui/i18n@11.5.0 + - @object-ui/react@11.5.0 + - @object-ui/types@11.5.0 + - @object-ui/core@11.5.0 + - @object-ui/react-runtime@11.5.0 + - @object-ui/sdui-parser@11.5.0 + ## 11.4.0 ### Patch Changes diff --git a/packages/components/package.json b/packages/components/package.json index 712459c84..14f5eff85 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/components", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "license": "MIT", "description": "Standard UI component library for Object UI, built with Shadcn UI + Tailwind CSS", diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 8129c2434..65563a45f 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,5 +1,12 @@ # @object-ui/core +## 11.5.0 + +### Patch Changes + +- Updated dependencies [9255686] + - @object-ui/types@11.5.0 + ## 11.4.0 ### Patch Changes diff --git a/packages/core/package.json b/packages/core/package.json index 14bff9ea8..1f1e99d5f 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/core", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "sideEffects": false, "license": "MIT", diff --git a/packages/create-plugin/CHANGELOG.md b/packages/create-plugin/CHANGELOG.md index 9cbd5f78b..08a99bd53 100644 --- a/packages/create-plugin/CHANGELOG.md +++ b/packages/create-plugin/CHANGELOG.md @@ -1,5 +1,7 @@ # @object-ui/create-plugin +## 11.5.0 + ## 11.4.0 ## 11.3.0 diff --git a/packages/create-plugin/package.json b/packages/create-plugin/package.json index 4911ebe1f..b3fa692d8 100644 --- a/packages/create-plugin/package.json +++ b/packages/create-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/create-plugin", - "version": "11.4.0", + "version": "11.5.0", "description": "CLI tool to scaffold ObjectUI plugins", "type": "module", "license": "MIT", diff --git a/packages/data-objectstack/CHANGELOG.md b/packages/data-objectstack/CHANGELOG.md index 2b8602519..17d5e64e5 100644 --- a/packages/data-objectstack/CHANGELOG.md +++ b/packages/data-objectstack/CHANGELOG.md @@ -1,5 +1,13 @@ # @object-ui/data-objectstack +## 11.5.0 + +### Patch Changes + +- Updated dependencies [9255686] + - @object-ui/types@11.5.0 + - @object-ui/core@11.5.0 + ## 11.4.0 ### Patch Changes diff --git a/packages/data-objectstack/package.json b/packages/data-objectstack/package.json index 432942b80..410bdbd14 100644 --- a/packages/data-objectstack/package.json +++ b/packages/data-objectstack/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/data-objectstack", - "version": "11.4.0", + "version": "11.5.0", "description": "ObjectStack Data Adapter for Object UI", "license": "MIT", "type": "module", diff --git a/packages/fields/CHANGELOG.md b/packages/fields/CHANGELOG.md index d21600a12..afb05f1b6 100644 --- a/packages/fields/CHANGELOG.md +++ b/packages/fields/CHANGELOG.md @@ -1,5 +1,19 @@ # @object-ui/fields +## 11.5.0 + +### Patch Changes + +- Updated dependencies [544d8eb] +- Updated dependencies [6fffd3d] +- Updated dependencies [9255686] + - @object-ui/i18n@11.5.0 + - @object-ui/react@11.5.0 + - @object-ui/components@11.5.0 + - @object-ui/types@11.5.0 + - @object-ui/core@11.5.0 + - @object-ui/providers@11.5.0 + ## 11.4.0 ### Minor Changes diff --git a/packages/fields/package.json b/packages/fields/package.json index 8bddeee0c..5b9405420 100644 --- a/packages/fields/package.json +++ b/packages/fields/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/fields", - "version": "11.4.0", + "version": "11.5.0", "description": "Field renderers and registry for Object UI", "license": "MIT", "type": "module", diff --git a/packages/i18n/CHANGELOG.md b/packages/i18n/CHANGELOG.md index 9432addb0..dea7c0f03 100644 --- a/packages/i18n/CHANGELOG.md +++ b/packages/i18n/CHANGELOG.md @@ -1,5 +1,11 @@ # @object-ui/i18n +## 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). + ## 11.4.0 ### Patch Changes diff --git a/packages/i18n/package.json b/packages/i18n/package.json index 295b53bbc..73d73fb77 100644 --- a/packages/i18n/package.json +++ b/packages/i18n/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/i18n", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "sideEffects": false, "license": "MIT", diff --git a/packages/layout/CHANGELOG.md b/packages/layout/CHANGELOG.md index b824f5889..090268304 100644 --- a/packages/layout/CHANGELOG.md +++ b/packages/layout/CHANGELOG.md @@ -1,5 +1,16 @@ # @object-ui/layout +## 11.5.0 + +### Patch Changes + +- Updated dependencies [6fffd3d] +- Updated dependencies [9255686] + - @object-ui/react@11.5.0 + - @object-ui/components@11.5.0 + - @object-ui/types@11.5.0 + - @object-ui/core@11.5.0 + ## 11.4.0 ### Patch Changes diff --git a/packages/layout/package.json b/packages/layout/package.json index 670507501..6896ac662 100644 --- a/packages/layout/package.json +++ b/packages/layout/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/layout", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "sideEffects": false, "main": "dist/index.umd.cjs", diff --git a/packages/mobile/CHANGELOG.md b/packages/mobile/CHANGELOG.md index 94d5258c4..8c3e40149 100644 --- a/packages/mobile/CHANGELOG.md +++ b/packages/mobile/CHANGELOG.md @@ -1,5 +1,12 @@ # @object-ui/mobile +## 11.5.0 + +### Patch Changes + +- Updated dependencies [9255686] + - @object-ui/types@11.5.0 + ## 11.4.0 ### Patch Changes diff --git a/packages/mobile/package.json b/packages/mobile/package.json index 5fa38b67f..abb6daf2c 100644 --- a/packages/mobile/package.json +++ b/packages/mobile/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/mobile", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "license": "MIT", "description": "Mobile optimization for Object UI with responsive components, PWA support, and touch gesture handling.", diff --git a/packages/permissions/CHANGELOG.md b/packages/permissions/CHANGELOG.md index e54aa5074..6d0009dbd 100644 --- a/packages/permissions/CHANGELOG.md +++ b/packages/permissions/CHANGELOG.md @@ -1,5 +1,12 @@ # @object-ui/permissions +## 11.5.0 + +### Patch Changes + +- Updated dependencies [9255686] + - @object-ui/types@11.5.0 + ## 11.4.0 ### Patch Changes diff --git a/packages/permissions/package.json b/packages/permissions/package.json index 6241e120f..557a67581 100644 --- a/packages/permissions/package.json +++ b/packages/permissions/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/permissions", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "license": "MIT", "description": "RBAC permission system for Object UI with object/field/row-level access control, permission guards, and hooks.", diff --git a/packages/plugin-ai/CHANGELOG.md b/packages/plugin-ai/CHANGELOG.md index c3e779b87..69092c47e 100644 --- a/packages/plugin-ai/CHANGELOG.md +++ b/packages/plugin-ai/CHANGELOG.md @@ -1,5 +1,16 @@ # @object-ui/plugin-ai +## 11.5.0 + +### Patch Changes + +- Updated dependencies [6fffd3d] +- Updated dependencies [9255686] + - @object-ui/react@11.5.0 + - @object-ui/components@11.5.0 + - @object-ui/types@11.5.0 + - @object-ui/core@11.5.0 + ## 11.4.0 ### Patch Changes diff --git a/packages/plugin-ai/package.json b/packages/plugin-ai/package.json index c4e53414c..b6a3a18c6 100644 --- a/packages/plugin-ai/package.json +++ b/packages/plugin-ai/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-ai", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "main": "dist/index.umd.cjs", "module": "dist/index.js", diff --git a/packages/plugin-calendar/CHANGELOG.md b/packages/plugin-calendar/CHANGELOG.md index 7fb77afd5..908ab4545 100644 --- a/packages/plugin-calendar/CHANGELOG.md +++ b/packages/plugin-calendar/CHANGELOG.md @@ -1,5 +1,21 @@ # @object-ui/plugin-calendar +## 11.5.0 + +### Patch Changes + +- Updated dependencies [544d8eb] +- Updated dependencies [6fffd3d] +- Updated dependencies [9255686] + - @object-ui/i18n@11.5.0 + - @object-ui/react@11.5.0 + - @object-ui/plugin-detail@11.5.0 + - @object-ui/components@11.5.0 + - @object-ui/types@11.5.0 + - @object-ui/fields@11.5.0 + - @object-ui/core@11.5.0 + - @object-ui/mobile@11.5.0 + ## 11.4.0 ### Patch Changes diff --git a/packages/plugin-calendar/package.json b/packages/plugin-calendar/package.json index 2647d0c42..5698e1068 100644 --- a/packages/plugin-calendar/package.json +++ b/packages/plugin-calendar/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-calendar", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "license": "MIT", "description": "Calendar view plugins for Object UI - includes both ObjectQL-integrated and standalone calendar components", diff --git a/packages/plugin-charts/CHANGELOG.md b/packages/plugin-charts/CHANGELOG.md index d570ee740..70ffd30b9 100644 --- a/packages/plugin-charts/CHANGELOG.md +++ b/packages/plugin-charts/CHANGELOG.md @@ -1,5 +1,18 @@ # @object-ui/plugin-charts +## 11.5.0 + +### Patch Changes + +- Updated dependencies [544d8eb] +- Updated dependencies [6fffd3d] +- Updated dependencies [9255686] + - @object-ui/i18n@11.5.0 + - @object-ui/react@11.5.0 + - @object-ui/components@11.5.0 + - @object-ui/types@11.5.0 + - @object-ui/core@11.5.0 + ## 11.4.0 ### Patch Changes diff --git a/packages/plugin-charts/package.json b/packages/plugin-charts/package.json index c28f77bcb..6ed2f6d64 100644 --- a/packages/plugin-charts/package.json +++ b/packages/plugin-charts/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-charts", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "license": "MIT", "description": "Chart components plugin for Object UI, powered by Recharts", diff --git a/packages/plugin-chatbot/CHANGELOG.md b/packages/plugin-chatbot/CHANGELOG.md index d5280010a..46a2dfcfe 100644 --- a/packages/plugin-chatbot/CHANGELOG.md +++ b/packages/plugin-chatbot/CHANGELOG.md @@ -1,5 +1,16 @@ # @object-ui/plugin-chatbot +## 11.5.0 + +### Patch Changes + +- Updated dependencies [6fffd3d] +- Updated dependencies [9255686] + - @object-ui/react@11.5.0 + - @object-ui/components@11.5.0 + - @object-ui/types@11.5.0 + - @object-ui/core@11.5.0 + ## 11.4.0 ### Patch Changes diff --git a/packages/plugin-chatbot/package.json b/packages/plugin-chatbot/package.json index a43122d26..8bb17b0d4 100644 --- a/packages/plugin-chatbot/package.json +++ b/packages/plugin-chatbot/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-chatbot", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "license": "MIT", "description": "Chatbot interface plugin for Object UI", diff --git a/packages/plugin-dashboard/CHANGELOG.md b/packages/plugin-dashboard/CHANGELOG.md index 8804ef8f9..67ee8b236 100644 --- a/packages/plugin-dashboard/CHANGELOG.md +++ b/packages/plugin-dashboard/CHANGELOG.md @@ -1,5 +1,19 @@ # @object-ui/plugin-dashboard +## 11.5.0 + +### Patch Changes + +- Updated dependencies [544d8eb] +- Updated dependencies [6fffd3d] +- Updated dependencies [9255686] + - @object-ui/i18n@11.5.0 + - @object-ui/react@11.5.0 + - @object-ui/components@11.5.0 + - @object-ui/types@11.5.0 + - @object-ui/fields@11.5.0 + - @object-ui/core@11.5.0 + ## 11.4.0 ### Patch Changes diff --git a/packages/plugin-dashboard/package.json b/packages/plugin-dashboard/package.json index 24ad9ce7c..1bfea8e0e 100644 --- a/packages/plugin-dashboard/package.json +++ b/packages/plugin-dashboard/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-dashboard", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "license": "MIT", "description": "Dashboard plugin for Object UI", diff --git a/packages/plugin-designer/CHANGELOG.md b/packages/plugin-designer/CHANGELOG.md index 84667dd9f..d780a80b9 100644 --- a/packages/plugin-designer/CHANGELOG.md +++ b/packages/plugin-designer/CHANGELOG.md @@ -1,5 +1,23 @@ # @object-ui/plugin-designer +## 11.5.0 + +### Patch Changes + +- Updated dependencies [544d8eb] +- Updated dependencies [6fffd3d] +- Updated dependencies [9255686] +- Updated dependencies [6c1ad9e] + - @object-ui/i18n@11.5.0 + - @object-ui/react@11.5.0 + - @object-ui/components@11.5.0 + - @object-ui/types@11.5.0 + - @object-ui/plugin-form@11.5.0 + - @object-ui/fields@11.5.0 + - @object-ui/plugin-grid@11.5.0 + - @object-ui/core@11.5.0 + - @object-ui/data-objectstack@11.5.0 + ## 11.4.0 ### Patch Changes diff --git a/packages/plugin-designer/package.json b/packages/plugin-designer/package.json index df5879bdf..098181ec2 100644 --- a/packages/plugin-designer/package.json +++ b/packages/plugin-designer/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-designer", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "license": "MIT", "description": "Visual designer plugin for Object UI with page, data model, process, and report designers plus collaborative editing.", diff --git a/packages/plugin-detail/CHANGELOG.md b/packages/plugin-detail/CHANGELOG.md index bd8b331cb..2d31b1a32 100644 --- a/packages/plugin-detail/CHANGELOG.md +++ b/packages/plugin-detail/CHANGELOG.md @@ -1,5 +1,28 @@ # @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/react` gains the bus: `notifyDataChanged({objectName, recordId?})`, `useDataInvalidation(objectName, recordId?)` (reader nonce), `subscribeDataChanges`, and `useMutationInvalidationBridge(dataSource)` which fans every dataSource write (`MutationEvent`) onto the bus. The bus also dispatches the legacy `objectui:related-changed` window event, so pre-bus listeners keep working. + - The `key={refreshKey}` remount of `RecordDetailView` (AppContent) and the `key={actionRefreshKey}` remount of `DetailView` (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-scoped `notifyDataChanged` calls; undo/redo use the operation's own `objectName`/`recordId`. + - `RelatedCountStore` is wired to the bus (tab count badges refetch after any change to their object) and its `useSyncExternalStore` snapshot is now a monotonic version — previously it returned the same `Map` reference, so `emit()` never re-rendered subscribers and invalidations left badges stale; `useRelatedCountVersion()` is exported and drives the probe effect's re-fetch. + - app-shell also gains the reserved URL-param registry (`urlParams.ts` — `form`/`formObject`/`formLink`/`tab`/`recordId`/`palette`/`shortcuts` constants replace scattered string literals) and AGENTS.md Commandment #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). + + - `buildDefaultTabs` emits STABLE semantic tab values (`details` / `related:` / `related` / `activity` / `history`) instead of leaving the renderer to synthesize index-derived ones. + - `PageTabsRenderer` honors `item.value`, a host-provided `schema.defaultTab` (validated against actual tabs) and `schema.onTabChange`; index fallback kept for authored schemas without values. + - app-shell `RecordDetailView` restores the active tab from `?tab=` and writes it back with `replace` (tab switches never stack history), via the pure `withPageTabsUrlSync` page-tree injector (never mutates authored/memoized page schemas). Legacy `DetailView.autoTabs` wired to the same contract (`defaultTab`/`onTabChange`). + - Fixes the tab strip resetting to Details after save-refresh remounts (`refreshKey`-style) and dev-StrictMode URL churn; enables `?tab=` deep links; invalid values fall back to Details. + +### Patch Changes + +- Updated dependencies [544d8eb] + - @object-ui/i18n@11.5.0 + ## 11.4.0 ### Minor Changes diff --git a/packages/plugin-detail/package.json b/packages/plugin-detail/package.json index 385208218..4ca4f5b0a 100644 --- a/packages/plugin-detail/package.json +++ b/packages/plugin-detail/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-detail", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "license": "MIT", "description": "DetailView plugin for Object UI - comprehensive detail page with sections, tabs, and related lists", diff --git a/packages/plugin-editor/CHANGELOG.md b/packages/plugin-editor/CHANGELOG.md index 2e9e1580a..737c3c55f 100644 --- a/packages/plugin-editor/CHANGELOG.md +++ b/packages/plugin-editor/CHANGELOG.md @@ -1,5 +1,16 @@ # @object-ui/plugin-editor +## 11.5.0 + +### Patch Changes + +- Updated dependencies [6fffd3d] +- Updated dependencies [9255686] + - @object-ui/react@11.5.0 + - @object-ui/components@11.5.0 + - @object-ui/types@11.5.0 + - @object-ui/core@11.5.0 + ## 11.4.0 ### Patch Changes diff --git a/packages/plugin-editor/package.json b/packages/plugin-editor/package.json index 809208a6c..a1c0b53d4 100644 --- a/packages/plugin-editor/package.json +++ b/packages/plugin-editor/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-editor", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "license": "MIT", "description": "Rich text editor plugin for Object UI, powered by Monaco Editor", diff --git a/packages/plugin-form/CHANGELOG.md b/packages/plugin-form/CHANGELOG.md index ada01bf23..ec72c1e50 100644 --- a/packages/plugin-form/CHANGELOG.md +++ b/packages/plugin-form/CHANGELOG.md @@ -1,5 +1,26 @@ # @object-ui/plugin-form +## 11.5.0 + +### Patch Changes + +- 6c1ad9e: Record task flows open as derived overlays with lossless return (framework#2604, extends framework#2578). + + - **Create/Edit never route** — the global record form is URL-driven (`?form=new` / `?form=`): 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 new `deriveRecordFlowSurface` mirror in plugin-view, light ones keep the auto-sized modal. `editMode:'page'` opt-in unchanged. + - **Save invariant** — _edit never moves you_ (origin refetches in place); _create lands on the new record's detail_ on its derived surface (drawer over the still-intact list for light objects, detail route for heavy), with `replace:true` so Back skips the transient form entry. + - **Subtable child create/edit = overlay over the parent detail, never a route** — related-list New/Edit push `?form=…&formObject=&formLink=:`; 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 forwards `initialValues` into its master-detail (subforms) branch so pre-links survive for children with inline line items. + +- Updated dependencies [544d8eb] +- Updated dependencies [6fffd3d] +- Updated dependencies [9255686] + - @object-ui/i18n@11.5.0 + - @object-ui/react@11.5.0 + - @object-ui/components@11.5.0 + - @object-ui/types@11.5.0 + - @object-ui/fields@11.5.0 + - @object-ui/core@11.5.0 + - @object-ui/permissions@11.5.0 + ## 11.4.0 ### Minor Changes diff --git a/packages/plugin-form/package.json b/packages/plugin-form/package.json index 5d1a6b300..adc0113fe 100644 --- a/packages/plugin-form/package.json +++ b/packages/plugin-form/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-form", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "license": "MIT", "description": "Form plugin for Object UI", diff --git a/packages/plugin-gantt/CHANGELOG.md b/packages/plugin-gantt/CHANGELOG.md index 841887b28..680052f6b 100644 --- a/packages/plugin-gantt/CHANGELOG.md +++ b/packages/plugin-gantt/CHANGELOG.md @@ -1,5 +1,20 @@ # @object-ui/plugin-gantt +## 11.5.0 + +### Patch Changes + +- Updated dependencies [544d8eb] +- Updated dependencies [6fffd3d] +- Updated dependencies [9255686] + - @object-ui/i18n@11.5.0 + - @object-ui/react@11.5.0 + - @object-ui/plugin-detail@11.5.0 + - @object-ui/components@11.5.0 + - @object-ui/types@11.5.0 + - @object-ui/fields@11.5.0 + - @object-ui/core@11.5.0 + ## 11.4.0 ### Patch Changes diff --git a/packages/plugin-gantt/package.json b/packages/plugin-gantt/package.json index 7bcb3a58f..0d7a27ede 100644 --- a/packages/plugin-gantt/package.json +++ b/packages/plugin-gantt/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-gantt", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "license": "MIT", "description": "Gantt chart plugin for Object UI", diff --git a/packages/plugin-grid/CHANGELOG.md b/packages/plugin-grid/CHANGELOG.md index fd7d5420c..04fde183f 100644 --- a/packages/plugin-grid/CHANGELOG.md +++ b/packages/plugin-grid/CHANGELOG.md @@ -1,5 +1,20 @@ # @object-ui/plugin-grid +## 11.5.0 + +### Patch Changes + +- Updated dependencies [544d8eb] +- Updated dependencies [6fffd3d] +- Updated dependencies [9255686] + - @object-ui/i18n@11.5.0 + - @object-ui/react@11.5.0 + - @object-ui/components@11.5.0 + - @object-ui/types@11.5.0 + - @object-ui/fields@11.5.0 + - @object-ui/core@11.5.0 + - @object-ui/mobile@11.5.0 + ## 11.4.0 ### Minor Changes diff --git a/packages/plugin-grid/package.json b/packages/plugin-grid/package.json index ebae22930..a3a5de93e 100644 --- a/packages/plugin-grid/package.json +++ b/packages/plugin-grid/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-grid", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "license": "MIT", "description": "Grid plugin for Object UI", diff --git a/packages/plugin-kanban/CHANGELOG.md b/packages/plugin-kanban/CHANGELOG.md index 952074033..1f4c6a203 100644 --- a/packages/plugin-kanban/CHANGELOG.md +++ b/packages/plugin-kanban/CHANGELOG.md @@ -1,5 +1,20 @@ # @object-ui/plugin-kanban +## 11.5.0 + +### Patch Changes + +- Updated dependencies [544d8eb] +- Updated dependencies [6fffd3d] +- Updated dependencies [9255686] + - @object-ui/i18n@11.5.0 + - @object-ui/react@11.5.0 + - @object-ui/plugin-detail@11.5.0 + - @object-ui/components@11.5.0 + - @object-ui/types@11.5.0 + - @object-ui/fields@11.5.0 + - @object-ui/core@11.5.0 + ## 11.4.0 ### Patch Changes diff --git a/packages/plugin-kanban/package.json b/packages/plugin-kanban/package.json index c5af9bd73..3b39f4ddc 100644 --- a/packages/plugin-kanban/package.json +++ b/packages/plugin-kanban/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-kanban", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "license": "MIT", "description": "Kanban board plugin for Object UI, powered by dnd-kit", diff --git a/packages/plugin-list/CHANGELOG.md b/packages/plugin-list/CHANGELOG.md index dec8ce5f5..1c1c30dc2 100644 --- a/packages/plugin-list/CHANGELOG.md +++ b/packages/plugin-list/CHANGELOG.md @@ -1,5 +1,7 @@ # @object-ui/plugin-list +## 11.5.0 + ## 11.4.0 ## 11.3.0 diff --git a/packages/plugin-list/package.json b/packages/plugin-list/package.json index 409257c8b..fa5b6ef12 100644 --- a/packages/plugin-list/package.json +++ b/packages/plugin-list/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-list", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "license": "MIT", "description": "ListView plugin for Object UI - unified view component with view type switching", diff --git a/packages/plugin-map/CHANGELOG.md b/packages/plugin-map/CHANGELOG.md index 113eee4a1..9e8bc1181 100644 --- a/packages/plugin-map/CHANGELOG.md +++ b/packages/plugin-map/CHANGELOG.md @@ -1,5 +1,16 @@ # @object-ui/plugin-map +## 11.5.0 + +### Patch Changes + +- Updated dependencies [6fffd3d] +- Updated dependencies [9255686] + - @object-ui/react@11.5.0 + - @object-ui/components@11.5.0 + - @object-ui/types@11.5.0 + - @object-ui/core@11.5.0 + ## 11.4.0 ### Patch Changes diff --git a/packages/plugin-map/package.json b/packages/plugin-map/package.json index e2323dfd7..e9ccf1273 100644 --- a/packages/plugin-map/package.json +++ b/packages/plugin-map/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-map", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "license": "MIT", "description": "Map visualization plugin for Object UI", diff --git a/packages/plugin-markdown/CHANGELOG.md b/packages/plugin-markdown/CHANGELOG.md index 62f33e097..e43da08c9 100644 --- a/packages/plugin-markdown/CHANGELOG.md +++ b/packages/plugin-markdown/CHANGELOG.md @@ -1,5 +1,16 @@ # @object-ui/plugin-markdown +## 11.5.0 + +### Patch Changes + +- Updated dependencies [6fffd3d] +- Updated dependencies [9255686] + - @object-ui/react@11.5.0 + - @object-ui/components@11.5.0 + - @object-ui/types@11.5.0 + - @object-ui/core@11.5.0 + ## 11.4.0 ### Patch Changes diff --git a/packages/plugin-markdown/package.json b/packages/plugin-markdown/package.json index 1e18cc4aa..5fbf712d8 100644 --- a/packages/plugin-markdown/package.json +++ b/packages/plugin-markdown/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-markdown", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "license": "MIT", "description": "Markdown rendering plugin for Object UI, powered by react-markdown", diff --git a/packages/plugin-report/CHANGELOG.md b/packages/plugin-report/CHANGELOG.md index 2a5a98253..1db06c853 100644 --- a/packages/plugin-report/CHANGELOG.md +++ b/packages/plugin-report/CHANGELOG.md @@ -1,5 +1,20 @@ # @object-ui/plugin-report +## 11.5.0 + +### Patch Changes + +- Updated dependencies [544d8eb] +- Updated dependencies [6fffd3d] +- Updated dependencies [9255686] + - @object-ui/i18n@11.5.0 + - @object-ui/react@11.5.0 + - @object-ui/components@11.5.0 + - @object-ui/types@11.5.0 + - @object-ui/fields@11.5.0 + - @object-ui/plugin-grid@11.5.0 + - @object-ui/core@11.5.0 + ## 11.4.0 ### Patch Changes diff --git a/packages/plugin-report/package.json b/packages/plugin-report/package.json index 8e054b75d..e804f6620 100644 --- a/packages/plugin-report/package.json +++ b/packages/plugin-report/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-report", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "main": "dist/index.umd.cjs", "module": "dist/index.js", diff --git a/packages/plugin-timeline/CHANGELOG.md b/packages/plugin-timeline/CHANGELOG.md index 4843cc633..d3a8cffa7 100644 --- a/packages/plugin-timeline/CHANGELOG.md +++ b/packages/plugin-timeline/CHANGELOG.md @@ -1,5 +1,17 @@ # @object-ui/plugin-timeline +## 11.5.0 + +### Patch Changes + +- Updated dependencies [6fffd3d] +- Updated dependencies [9255686] + - @object-ui/react@11.5.0 + - @object-ui/components@11.5.0 + - @object-ui/types@11.5.0 + - @object-ui/core@11.5.0 + - @object-ui/mobile@11.5.0 + ## 11.4.0 ### Patch Changes diff --git a/packages/plugin-timeline/package.json b/packages/plugin-timeline/package.json index 1b1af2c6d..ea1d87afc 100644 --- a/packages/plugin-timeline/package.json +++ b/packages/plugin-timeline/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-timeline", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "license": "MIT", "description": "Timeline component plugin for Object UI", diff --git a/packages/plugin-tree/CHANGELOG.md b/packages/plugin-tree/CHANGELOG.md index 761ce95f4..2d65b1355 100644 --- a/packages/plugin-tree/CHANGELOG.md +++ b/packages/plugin-tree/CHANGELOG.md @@ -1,5 +1,16 @@ # @object-ui/plugin-tree +## 11.5.0 + +### Patch Changes + +- Updated dependencies [6fffd3d] +- Updated dependencies [9255686] + - @object-ui/react@11.5.0 + - @object-ui/components@11.5.0 + - @object-ui/types@11.5.0 + - @object-ui/core@11.5.0 + ## 11.4.0 ### Patch Changes diff --git a/packages/plugin-tree/package.json b/packages/plugin-tree/package.json index 8fb3b26b3..27dfc4fee 100644 --- a/packages/plugin-tree/package.json +++ b/packages/plugin-tree/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-tree", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "license": "MIT", "description": "Tree / tree-grid visualization plugin for Object UI", diff --git a/packages/plugin-view/CHANGELOG.md b/packages/plugin-view/CHANGELOG.md index 35f1056e7..bf8ac00cb 100644 --- a/packages/plugin-view/CHANGELOG.md +++ b/packages/plugin-view/CHANGELOG.md @@ -1,5 +1,27 @@ # @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). + + - **Create/Edit never route** — the global record form is URL-driven (`?form=new` / `?form=`): 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 new `deriveRecordFlowSurface` mirror in plugin-view, light ones keep the auto-sized modal. `editMode:'page'` opt-in unchanged. + - **Save invariant** — _edit never moves you_ (origin refetches in place); _create lands on the new record's detail_ on its derived surface (drawer over the still-intact list for light objects, detail route for heavy), with `replace:true` so Back skips the transient form entry. + - **Subtable child create/edit = overlay over the parent detail, never a route** — related-list New/Edit push `?form=…&formObject=&formLink=:`; 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 forwards `initialValues` into its master-detail (subforms) branch so pre-links survive for children with inline line items. + +### Patch Changes + +- Updated dependencies [6fffd3d] +- Updated dependencies [9255686] +- Updated dependencies [6c1ad9e] + - @object-ui/react@11.5.0 + - @object-ui/components@11.5.0 + - @object-ui/types@11.5.0 + - @object-ui/plugin-form@11.5.0 + - @object-ui/plugin-grid@11.5.0 + - @object-ui/core@11.5.0 + ## 11.4.0 ### Minor Changes diff --git a/packages/plugin-view/package.json b/packages/plugin-view/package.json index 2d97974ae..05da8bb16 100644 --- a/packages/plugin-view/package.json +++ b/packages/plugin-view/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-view", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "license": "MIT", "description": "Object View plugin for Object UI", diff --git a/packages/providers/CHANGELOG.md b/packages/providers/CHANGELOG.md index 38ee0a870..eb1c5e3f3 100644 --- a/packages/providers/CHANGELOG.md +++ b/packages/providers/CHANGELOG.md @@ -1,5 +1,12 @@ # @object-ui/providers — Changelog +## 11.5.0 + +### Patch Changes + +- Updated dependencies [9255686] + - @object-ui/types@11.5.0 + ## 11.4.0 ### Patch Changes diff --git a/packages/providers/package.json b/packages/providers/package.json index 13cf1d54a..502943f80 100644 --- a/packages/providers/package.json +++ b/packages/providers/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/providers", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "license": "MIT", "description": "Reusable context providers for ObjectUI applications", diff --git a/packages/react-runtime/CHANGELOG.md b/packages/react-runtime/CHANGELOG.md index e9b0d0c55..acaa34813 100644 --- a/packages/react-runtime/CHANGELOG.md +++ b/packages/react-runtime/CHANGELOG.md @@ -1,5 +1,7 @@ # @object-ui/react-runtime +## 11.5.0 + ## 11.4.0 ## 11.3.0 diff --git a/packages/react-runtime/package.json b/packages/react-runtime/package.json index a41df8d58..cd73c93d9 100644 --- a/packages/react-runtime/package.json +++ b/packages/react-runtime/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/react-runtime", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "sideEffects": false, "license": "MIT", diff --git a/packages/react/CHANGELOG.md b/packages/react/CHANGELOG.md index 119b00531..48d74ddaa 100644 --- a/packages/react/CHANGELOG.md +++ b/packages/react/CHANGELOG.md @@ -1,5 +1,25 @@ # @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/react` gains the bus: `notifyDataChanged({objectName, recordId?})`, `useDataInvalidation(objectName, recordId?)` (reader nonce), `subscribeDataChanges`, and `useMutationInvalidationBridge(dataSource)` which fans every dataSource write (`MutationEvent`) onto the bus. The bus also dispatches the legacy `objectui:related-changed` window event, so pre-bus listeners keep working. + - The `key={refreshKey}` remount of `RecordDetailView` (AppContent) and the `key={actionRefreshKey}` remount of `DetailView` (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-scoped `notifyDataChanged` calls; undo/redo use the operation's own `objectName`/`recordId`. + - `RelatedCountStore` is wired to the bus (tab count badges refetch after any change to their object) and its `useSyncExternalStore` snapshot is now a monotonic version — previously it returned the same `Map` reference, so `emit()` never re-rendered subscribers and invalidations left badges stale; `useRelatedCountVersion()` is exported and drives the probe effect's re-fetch. + - app-shell also gains the reserved URL-param registry (`urlParams.ts` — `form`/`formObject`/`formLink`/`tab`/`recordId`/`palette`/`shortcuts` constants replace scattered string literals) and AGENTS.md Commandment #8 (UI-state classification: state that must survive a data refresh may never live only in an uncontrolled component). + +### Patch Changes + +- Updated dependencies [544d8eb] +- Updated dependencies [9255686] + - @object-ui/i18n@11.5.0 + - @object-ui/types@11.5.0 + - @object-ui/core@11.5.0 + - @object-ui/data-objectstack@11.5.0 + ## 11.4.0 ### Patch Changes diff --git a/packages/react/package.json b/packages/react/package.json index b21d07b70..1cfccd4a2 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/react", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "license": "MIT", "description": "React bindings and SchemaRenderer component for Object UI", diff --git a/packages/runner/CHANGELOG.md b/packages/runner/CHANGELOG.md index e2b7c8fbd..4580e5f80 100644 --- a/packages/runner/CHANGELOG.md +++ b/packages/runner/CHANGELOG.md @@ -1,5 +1,18 @@ # @object-ui/runner +## 11.5.0 + +### Patch Changes + +- Updated dependencies [6fffd3d] +- Updated dependencies [9255686] + - @object-ui/react@11.5.0 + - @object-ui/components@11.5.0 + - @object-ui/types@11.5.0 + - @object-ui/plugin-charts@11.5.0 + - @object-ui/plugin-kanban@11.5.0 + - @object-ui/core@11.5.0 + ## 11.4.0 ### Patch Changes diff --git a/packages/runner/package.json b/packages/runner/package.json index 849b3dd4a..2a5117067 100644 --- a/packages/runner/package.json +++ b/packages/runner/package.json @@ -1,7 +1,7 @@ { "name": "@object-ui/runner", "private": false, - "version": "11.4.0", + "version": "11.5.0", "description": "Universal Object UI Application Runner", "type": "module", "homepage": "https://www.objectui.org/docs/utilities/runner", diff --git a/packages/sdui-parser/CHANGELOG.md b/packages/sdui-parser/CHANGELOG.md index 2fa554c8f..f43ce2650 100644 --- a/packages/sdui-parser/CHANGELOG.md +++ b/packages/sdui-parser/CHANGELOG.md @@ -1,5 +1,7 @@ # @object-ui/sdui-parser +## 11.5.0 + ## 11.4.0 ## 11.3.0 diff --git a/packages/sdui-parser/package.json b/packages/sdui-parser/package.json index e1744ea06..ac5338edf 100644 --- a/packages/sdui-parser/package.json +++ b/packages/sdui-parser/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/sdui-parser", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "sideEffects": false, "license": "MIT", diff --git a/packages/tenant/CHANGELOG.md b/packages/tenant/CHANGELOG.md index 61a8c33ff..b97454ea6 100644 --- a/packages/tenant/CHANGELOG.md +++ b/packages/tenant/CHANGELOG.md @@ -1,5 +1,12 @@ # @object-ui/tenant +## 11.5.0 + +### Patch Changes + +- Updated dependencies [9255686] + - @object-ui/types@11.5.0 + ## 11.4.0 ### Patch Changes diff --git a/packages/tenant/package.json b/packages/tenant/package.json index c058e4c98..9ca1e4a56 100644 --- a/packages/tenant/package.json +++ b/packages/tenant/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/tenant", - "version": "11.4.0", + "version": "11.5.0", "type": "module", "license": "MIT", "description": "Multi-tenancy support for Object UI with tenant isolation, scoped queries, and custom branding.", diff --git a/packages/types/CHANGELOG.md b/packages/types/CHANGELOG.md index 48ebc91a0..a834918cc 100644 --- a/packages/types/CHANGELOG.md +++ b/packages/types/CHANGELOG.md @@ -1,5 +1,16 @@ # @object-ui/types +## 11.5.0 + +### Patch Changes + +- 9255686: Record detail tabs are URL-addressable (`?tab=`) and survive subtree remounts (objectui#2257, ADR-0054 C3). + + - `buildDefaultTabs` emits STABLE semantic tab values (`details` / `related:` / `related` / `activity` / `history`) instead of leaving the renderer to synthesize index-derived ones. + - `PageTabsRenderer` honors `item.value`, a host-provided `schema.defaultTab` (validated against actual tabs) and `schema.onTabChange`; index fallback kept for authored schemas without values. + - app-shell `RecordDetailView` restores the active tab from `?tab=` and writes it back with `replace` (tab switches never stack history), via the pure `withPageTabsUrlSync` page-tree injector (never mutates authored/memoized page schemas). Legacy `DetailView.autoTabs` wired to the same contract (`defaultTab`/`onTabChange`). + - Fixes the tab strip resetting to Details after save-refresh remounts (`refreshKey`-style) and dev-StrictMode URL churn; enables `?tab=` deep links; invalid values fall back to Details. + ## 11.4.0 ### Minor Changes diff --git a/packages/types/package.json b/packages/types/package.json index 3a99a84d4..1f420e91f 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/types", - "version": "11.4.0", + "version": "11.5.0", "description": "Pure TypeScript type definitions for Object UI - The Protocol Layer", "type": "module", "sideEffects": false, diff --git a/packages/vscode-extension/CHANGELOG.md b/packages/vscode-extension/CHANGELOG.md index 37f88a799..bd8e4d740 100644 --- a/packages/vscode-extension/CHANGELOG.md +++ b/packages/vscode-extension/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 11.5.0 + +### Patch Changes + +- Updated dependencies [9255686] + - @object-ui/types@11.5.0 + - @object-ui/core@11.5.0 + ## 11.4.0 ### Patch Changes diff --git a/packages/vscode-extension/package.json b/packages/vscode-extension/package.json index ca3b0520f..7c0b59a1b 100644 --- a/packages/vscode-extension/package.json +++ b/packages/vscode-extension/package.json @@ -2,7 +2,7 @@ "name": "object-ui", "displayName": "Object UI", "description": "VSCode extension for Object UI - Schema-driven UI development with IntelliSense, validation, and live preview", - "version": "11.4.0", + "version": "11.5.0", "publisher": "objectui", "private": true, "icon": "icon.svg",