diff --git a/.changeset/action-result-dialog.md b/.changeset/action-result-dialog.md deleted file mode 100644 index 332803257..000000000 --- a/.changeset/action-result-dialog.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -'@object-ui/core': minor -'@object-ui/react': minor -'@object-ui/app-shell': minor ---- - -Add resultDialog + target interpolation for one-shot action reveals - -Some platform actions return values the user MUST copy now because the -server will not surface them again — 2FA TOTP URI + backup codes, freshly -minted OAuth client_secret, regenerated recovery codes. Previously these -had to ship as bespoke pages in `apps/account` because actions only -emitted a fire-and-forget toast. - -**`@object-ui/core` — ActionRunner** - -- New `ActionDef.resultDialog: ResultDialogSpec` field. When set on a - successful action, the runner suppresses the `successMessage` toast and - awaits the registered `ResultDialogHandler` instead. Missing handler is - non-fatal (logs a warning); rejected handler is treated as acknowledged. -- New `setResultDialogHandler(handler)` setter. -- New types: `ResultDialogSpec`, `ResultDialogFieldSpec`, - `ResultDialogHandler`. -- `executeUrl` and `executeAPI` now run `${param.X}` and `${ctx.X}` - interpolation against `target` before fetching / navigating. Values are - `encodeURIComponent`'d, missing keys resolve to empty string. `ctx` - exposes `origin`, `user`, `org`, `recordId` by default; consumers can - inject more via `context.ctx`. - -**`@object-ui/react`** - -- `ActionProvider` and `useActionRunner` both gained an `onResultDialog` - option that wires straight through to the runner. - -**`@object-ui/app-shell`** - -- New `ActionResultDialog` component — promise-based, blocks click-outside - and Escape (the user MUST click acknowledge), renders five field - formats: `qrcode` (client-side via the `qrcode` package — never sent - off-device, so 2FA URIs stay secret), `code-list`, `secret`, `text`, - `json`. Falls back to `json` when a value's shape doesn't match its - declared format. -- `ObjectView` and `RecordDetailView` install the handler and mount the - dialog automatically, so any action with `resultDialog` declared in - metadata now works without code changes. -- New dependency: `qrcode@^1.5.x` for client-side QR rendering. - -Pairs with the framework-side `Action.resultDialog` schema added in -`@objectstack/spec` and the `sys_two_factor` / `sys_oauth_application` / -`sys_account` updates in `@objectstack/platform-objects`. diff --git a/.changeset/app-hidden-shell-wiring.md b/.changeset/app-hidden-shell-wiring.md deleted file mode 100644 index 9f7cd1cca..000000000 --- a/.changeset/app-hidden-shell-wiring.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -'@object-ui/app-shell': minor ---- - -**Wire `App.hidden` shell hint — App Switcher + avatar dropdown** - -Honour the new `App.hidden` field from `@objectstack/spec/ui`: - -- **`AppSwitcher.tsx`** — filter `app.hidden === true` out of the top-bar app dropdown so personal-settings-style apps don't appear next to business apps. -- **`AppHeader.tsx`** — render hidden apps as entries in the avatar / user dropdown (immediately after the hardcoded Profile / Settings items). Uses the app's `icon` + `label` via the existing `getIcon` + `appLabel` utilities, and navigates to `/apps/${app.name}`. - -This is the front-end side of the Account-app split: the `account` app shipped by `@objectstack/platform-objects` declares `hidden: true` and now surfaces through the avatar menu — same pattern as GitHub Settings, Google account chip, and Salesforce Personal Settings. - -No new dependencies; pure metadata-driven wiring. diff --git a/.changeset/bell-inbox-message-cutover.md b/.changeset/bell-inbox-message-cutover.md deleted file mode 100644 index 08758fb2d..000000000 --- a/.changeset/bell-inbox-message-cutover.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -'@object-ui/app-shell': minor ---- - -Repoint the Console bell to `sys_inbox_message` + `sys_notification_receipt` (ADR-0030) - -The notification bell read the legacy `sys_notification` object's -`recipient_id`/`is_read`/`title`/`body` columns. ADR-0030 re-modeled -`sys_notification` into the L2 *event* (no recipient/read-state), so the bell -returned nothing — every notification the new pipeline produced was invisible. - -The bell now reads the L5 in-app materialization instead: - -- **List**: `sys_inbox_message` filtered by `user_id` (the `mine` scope), 20 - most-recent, ordered by `created_at`. -- **Read-state**: joins `sys_notification_receipt` (filtered by `user_id` + - `channel:'inbox'`). A message is unread until its event has a - `read`/`clicked`/`dismissed` receipt; the unread count drives the badge. -- **Mark-read**: `UPDATE`s the existing `delivered` receipt to `read` - (keyed `(notification_id, user_id, channel)`), inserting only as a fallback - when no receipt exists. Replaces the old `sys_notification.is_read` write. -- **Navigation**: follows the materialization's `action_url` (absolute, - `/apps/...`, or app-relative `/{object}/{id}`), falling back to the legacy - `source_object`/`source_id` pointer. -- **"View all"**: routes to `/apps/setup/sys_inbox_message?view=mine`. - -Pairs with the framework ADR-0030 pipeline (`@objectstack/service-messaging`). -Verified in-browser (showcase Console): a materialized inbox message + its -`delivered` receipt lit the bell badge; the popover rendered the row; -"mark all read" flipped the receipt to `read` in place (no duplicate) and -cleared the badge. diff --git a/.changeset/data-objectstack-listviews-form-family.md b/.changeset/data-objectstack-listviews-form-family.md deleted file mode 100644 index a9f0ecd52..000000000 --- a/.changeset/data-objectstack-listviews-form-family.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -'@object-ui/data-objectstack': patch ---- - -fix(datasource): exclude form-family views from `listViews()` - -`OBJECTSTACKDataSource.listViews(objectName)` feeds the object list-view -switcher (`ObjectView` → `ViewTabBar`), but returned **every** view bound to -the object — including form-family ones. With the backend now exposing each -view as an independent **ViewItem** carrying a `viewKind` discriminant -(ADR-0017, "Object has-many View"), a form view such as `crm_activity.default` -(expanded from `formViews.default`) leaked in as a spurious switcher tab and, -when opened, fell back to the default grid. - -`listViews()` now filters out `viewKind` `form`/`detail` items so only -list-family views reach the switcher. Bare view specs without a `viewKind` -(legacy artifacts and user-saved views) are still treated as list views. diff --git a/.changeset/external-datasource-studio.md b/.changeset/external-datasource-studio.md deleted file mode 100644 index 88f3b66e7..000000000 --- a/.changeset/external-datasource-studio.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -'@object-ui/app-shell': minor ---- - -Add the External Datasource Federation Studio surface (ADR-0015 P5) - -Federated datasources (`schemaMode !== 'managed'`) now get a dedicated -panel inside their Studio Preview tab, so connecting a mature external -database and registering its tables as ObjectStack objects is a -point-and-click flow instead of a CLI-only one. The panel pairs with the -framework backend shipped in objectstack-ai/framework#1390 -(`registerExternalDatasourceRoutes` → `/api/v1/datasources/:name/external/*`). - -ObjectStack is metadata-driven: `datasource` is a metadata type, so it is -browsed and edited through the standard metadata-admin engine -(`metadata:resource`) reached from the Studio app's left-side menu — -**not** a hand-written page. The Studio app (framework -`packages/platform-objects/src/apps/studio.app.ts`, Integration group) -gains a `Datasources` nav item pointing at -`metadata:resource?type=datasource`; the federation panel is contributed -to that standard surface via `registerMetadataPreview('datasource', …)`. - -**`@object-ui/app-shell` — `views/metadata-admin/external/`** - -- `api.ts` — a thin, typed REST client over the four federation routes - (`tables`, `tables/:remote/draft`, `refresh-catalog`, `validate`) plus an - `importObjectDraft` helper that PUTs a generated draft to `/meta/object`. - All calls go through `createAuthenticatedFetch()` (Bearer + `X-Tenant-ID` - + `Accept-Language`). A `503 external_service_unavailable` reply is mapped - to a typed `ExternalServiceUnavailableError` so the UI shows a friendly - "federation not enabled on this server" hint. Contract types are inlined - (they were added in framework 7.3; objectui pins `@objectstack/spec` - `^7.2.1`). -- `SchemaBrowser` — lists remote tables (allowedSchemas-filtered server-side) - with a text filter, on-demand Refresh (never a timer — warehouse - introspection is expensive), and a per-table Import action. -- `ImportObjectDialog` — generates an Object draft, surfaces the - type-compat matrix's `// REVIEW:` columns and the generated `*.object.ts` - source, then imports it as a real object. Never mutates the remote schema. -- `ValidationPanel` — runs validation on demand and renders per-object - structured schema diffs (missing column, type mismatch, …). Doubles as an - on-demand drift view. -- `ExternalDatasourcePanel` — Tables / Validation tabs plus a header strip - with "Refresh catalog" and the snapshot timestamp. -- `DatasourcePreview` — registered via `registerMetadataPreview('datasource', …)`, - it renders the panel automatically inside the standard resource edit - page's Preview tab when the saved datasource is federated - (`schemaMode !== 'managed'`), keyed off the item name. This is the only - wiring needed: no bespoke page, no extra route, no `@object-ui/app-shell` - surface to re-export — the metadata-admin engine + left-side nav own the - navigation. Federated datasources are read-only code artifacts (the - `datasource` type forbids runtime create), which the standard list view - already reflects (no "Create" button). - -Out of scope (blocked on backend follow-ups): the connection wizard -(driver/credentials/secrets — belongs in System Settings) and a push-based -drift inbox (needs an event feed). The framework exposes no -test-connection, secrets, or drift-feed routes yet. diff --git a/.changeset/flow-designer-visual-polish.md b/.changeset/flow-designer-visual-polish.md deleted file mode 100644 index 15b427a8f..000000000 --- a/.changeset/flow-designer-visual-polish.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -'@object-ui/app-shell': minor ---- - -Polish the Studio flow-designer canvas visuals - -A refinement pass over the metadata-admin flow designer (`FlowCanvas` + -`flow-canvas-parts`) — purely presentational, no behavioral or API changes, -theme-aware (light/dark), and still dependency-free. - -- **Node cards**: the flat 3px left-accent stripe is replaced by a tinted, - color-coded **icon chip** (the card's primary category cue), with a bolder - label, refined uppercase type caption, layered hover elevation - (`-translate-y-0.5` + soft shadow), and clearer selected / run-state rings. - Per-category `chip` tone tokens (soft bg + inset ring) added alongside the - existing icon/accent/label tones. Added distinct tones for `loop` (sky), - `screen`/`user_task` (pink) and `assignment` (purple) — previously they fell - back to the generic slate "task" tone, so every node type now reads as a - distinct color in the canvas. -- **Readable labels**: node width 188→240 and the per-node summary moved from a - right-hand column onto a second line, so the label now gets the **full card - width** (it was badly truncated — "Manager Re…", "Budget Ab…"). A native title - tooltip surfaces the full text on the rare remaining truncation. -- **No overlap on add**: adding a connected node no longer pins it directly below - its parent (which stacked every sibling on the same spot) — it's left to the - layered auto-layout, which slots it beside its siblings. -- **Canvas surface**: the dot grid now tracks pan **and** zoom (it moves with - the diagram instead of floating behind a static texture), plus a subtle inset - vignette for depth. -- **Edges**: rounded line caps, slightly stronger default stroke, and - pill-shaped (rounded-full, frosted) branch/condition labels. -- **Toolbar + add-node palette**: frosted, rounded controls with a primary - hover affordance; the palette gains an "Add node" header and matching tinted - icon chips per row. - -Verified in-browser (Studio → flow → designer) in both light and dark themes. diff --git a/.changeset/flow-palette-grouped.md b/.changeset/flow-palette-grouped.md deleted file mode 100644 index 2aa974fa2..000000000 --- a/.changeset/flow-palette-grouped.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -'@object-ui/app-shell': minor ---- - -Group the flow add-node palette by category, and offer every node type - -The quick-add palette listed 12 node types as a flat list; `assignment`, -`screen`, `delete_record` and the parallel gateways could only be reached by -adding a node and switching its type in the inspector. Building flows, that's a -real friction point. - -- **Complete**: the palette now offers Delete record, Set variables - (assignment), Screen, Parallel split and Parallel join too — so every common - node type is one click away. -- **Grouped**: items are organised into **Data / Logic / Human / Integration / - Flow** sections with headers and dividers, so the (now longer) list stays - scannable. A new `nodeCategory(type)` helper drives the grouping and gives - engine-only / plugin-contributed node types a sensible section; `mergePalette` - preserves a base item's category and infers one for engine-only types. - -Verified in-browser: the grouped palette renders all sections with tinted icon -chips, and the newly-offered types add to the canvas with the correct icon/tone -and no overlap. diff --git a/.changeset/flow-runner-screen-flows.md b/.changeset/flow-runner-screen-flows.md deleted file mode 100644 index 64bf51cbb..000000000 --- a/.changeset/flow-runner-screen-flows.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -'@object-ui/app-shell': minor ---- - -Add FlowRunner — render & resume interactive screen-flows - -A `type: 'flow'` action whose run pauses at a `screen` node now opens a -`FlowRunner` modal that renders the screen's fields, submits the values to the -framework resume endpoint (`POST /api/v1/automation/{flow}/runs/{runId}/resume`), -and advances to the next screen or closes + refreshes on completion. Previously -such flows launched server-side but the screen was never rendered, so the input -was never collected. - -- New `FlowRunner` component (fields → form → resume loop). -- `ObjectView` + `RecordDetailView` flow handlers detect a paused-screen launch - response (`{ status:'paused', runId, screen }`) and open the runner; for - list_item actions the row's id (`_rowRecord.id`) flows in as the flow's - `recordId`. - -Pairs with the framework screen-flow runtime (`@objectstack/service-automation` -+ `@objectstack/runtime`). Verified in-browser: showcase task row → "Reassign…" -→ form → submit → the task is reassigned. diff --git a/.changeset/grid-reference-cell-render.md b/.changeset/grid-reference-cell-render.md deleted file mode 100644 index 6be7661a4..000000000 --- a/.changeset/grid-reference-cell-render.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -'@object-ui/fields': patch ---- - -Render reference/lookup cells as labels, not raw JSON - -A `lookup` / `master_detail` value can arrive as a JSON-encoded object string — -e.g. an unresolved external-id reference `{"externalId":"Website Relaunch"}`. -`LookupCellRenderer` treated the whole JSON string as an opaque id, failed to -resolve it, and fell through to `String(value)`, leaking raw JSON into the grid -cell (and detail/kanban surfaces). - -- `LookupCellRenderer` now parses a JSON-object-looking string value and renders - a human label (`name` → `label` → `externalId` → `id`). -- `coerceToSafeValue` (the shared safe-render helper used by 8 cell renderers) - gains the same JSON-string parsing, and `externalId` is added to the - reference-label precedence for plain object values and arrays. - -Verified in the browser (showcase task grid: Project column shows "Website -Relaunch" instead of `{"externalId":"Website Relaunch"}`) and by unit tests. diff --git a/.changeset/i18n-language-switch.md b/.changeset/i18n-language-switch.md deleted file mode 100644 index 19ea793ce..000000000 --- a/.changeset/i18n-language-switch.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -'@object-ui/i18n': minor -'@object-ui/auth': minor -'@object-ui/app-shell': patch ---- - -Relabel metadata-driven UI on a language switch without a page refresh (#1319) - -Switching the UI language left server-resolved metadata labels (object/field/ -view labels, action-dialog text) in the old language until a hard refresh, -because renderers cache those labels by object name and never refetch on a -language change. - -**`@object-ui/auth`** — `createAuthenticatedFetch` now folds the active -`` into `Accept-Language` on API calls (never clobbering an explicit -header), so a switch carries the new locale on every subsequent request. - -**`@object-ui/app-shell`** — `ConnectedShellInner` drops the adapter's -locale-blind metadata cache in the render phase and remounts the metadata -subtree via `key={language}`, so every renderer refetches in the new locale. -The adapter and its connection sit above the key and are preserved — an in-app -relabel, not a reconnect. - -**`@object-ui/i18n`** — dev-mode missing-key warnings: `createI18n` gains -`warnMissingKeys` (default on outside production) wiring a deduped i18next -`missingKeyHandler`. `useObjectLabel`'s convention-key probes are flagged so -their intentional misses (which fall back to server metadata) stay silent. - -Pairs with the framework-side locale-aware metadata changes in -`@objectstack/client` / `@objectstack/objectql` / `@objectstack/rest`. diff --git a/.changeset/runtime-viewkind-form-family.md b/.changeset/runtime-viewkind-form-family.md deleted file mode 100644 index 5f91ab41b..000000000 --- a/.changeset/runtime-viewkind-form-family.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -'@object-ui/app-shell': patch ---- - -fix(metadata): keep form-family views out of the runtime list-view switcher - -The backend now exposes each view as an independent **ViewItem** (ADR-0017, -"Object has-many View"): `{ name: '.', object, viewKind: -'list' | 'form', config }`. The Studio preview was already taught this shape, -but the runtime console path was not — `MetadataProvider.mergeViewsIntoObjects` -only understood the legacy aggregated container (`{ list, form, listViews, -formViews }`) and ignored `viewKind` entirely. As a result a form-family view -(e.g. `crm_activity.default`, expanded from `formViews.default`) was neither -recognized nor excluded: navigating to its `/view/` URL silently fell -back to the default grid list instead of being treated as a record form. - -`mergeViewsIntoObjects` now recognizes the ViewItem shape and routes by -`viewKind` — `'list'` → `objectDef.listViews`, `'form'` → `objectDef.formViews` -— so FORM-family views never enter the list-view switcher (which reads only -`listViews`). Each item's `config` body is flattened to the renderer shape so -`type`/`columns`/`calendar`/… survive, the canonical `.` name is -used as the view id (so `/view/` resolves), and the legacy container is -skipped for any object that already has expanded ViewItems (no double-listing). -Objects served only as a legacy container are unaffected. diff --git a/.changeset/url-action-cross-origin.md b/.changeset/url-action-cross-origin.md deleted file mode 100644 index 329d978ef..000000000 --- a/.changeset/url-action-cross-origin.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -'@object-ui/core': patch -'@object-ui/app-shell': patch -'@object-ui/components': patch ---- - -Fix `type: 'url'` actions so they actually reach the backend in split-origin dev setups, and so reveal-once result dialogs render. - -- `ActionRunner.executeUrl`: when context provides `apiBase`, relative `/api/...`, `/_auth/...`, and `/_account/...` URLs are now promoted to absolute (`${apiBase}${path}`) before navigation. Same-origin API paths (with or without `apiBase`) trigger a full-page `window.location.href` rather than React-Router push — this is required for server-side OAuth redirect dances (e.g. better-auth `/sign-in/social`) that React Router would otherwise swallow into the SPA's fallback route. -- `ActionRunner.buildInterpolationContext`: surfaces `ctx.apiBase` for action targets that want to template it explicitly. -- `ObjectView`: passes `apiBase: import.meta.env.VITE_SERVER_URL` into the toolbar `ActionProvider` context so the above resolves. -- `action-button` and `action-menu` renderers now forward `resultDialog` when invoking the runner. Previously this field was silently dropped by an explicit whitelist, breaking every "show once, then hide" flow (2FA QR/backup codes, OAuth client_secret, regenerated tokens). diff --git a/apps/console/CHANGELOG.md b/apps/console/CHANGELOG.md index d0747cdf6..ecb068a8c 100644 --- a/apps/console/CHANGELOG.md +++ b/apps/console/CHANGELOG.md @@ -1,5 +1,7 @@ # @object-ui/console +## 6.3.0 + ## 6.2.3 ## 6.2.2 diff --git a/apps/console/package.json b/apps/console/package.json index 97421e6a5..7d376947d 100644 --- a/apps/console/package.json +++ b/apps/console/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/console", - "version": "6.2.3", + "version": "6.3.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 b9bf566d0..8f3363d41 100644 --- a/packages/app-shell/CHANGELOG.md +++ b/packages/app-shell/CHANGELOG.md @@ -1,5 +1,284 @@ # @object-ui/app-shell — Changelog +## 6.3.0 + +### Minor Changes + +- c12986e: Add resultDialog + target interpolation for one-shot action reveals + + Some platform actions return values the user MUST copy now because the + server will not surface them again — 2FA TOTP URI + backup codes, freshly + minted OAuth client_secret, regenerated recovery codes. Previously these + had to ship as bespoke pages in `apps/account` because actions only + emitted a fire-and-forget toast. + + **`@object-ui/core` — ActionRunner** + - New `ActionDef.resultDialog: ResultDialogSpec` field. When set on a + successful action, the runner suppresses the `successMessage` toast and + awaits the registered `ResultDialogHandler` instead. Missing handler is + non-fatal (logs a warning); rejected handler is treated as acknowledged. + - New `setResultDialogHandler(handler)` setter. + - New types: `ResultDialogSpec`, `ResultDialogFieldSpec`, + `ResultDialogHandler`. + - `executeUrl` and `executeAPI` now run `${param.X}` and `${ctx.X}` + interpolation against `target` before fetching / navigating. Values are + `encodeURIComponent`'d, missing keys resolve to empty string. `ctx` + exposes `origin`, `user`, `org`, `recordId` by default; consumers can + inject more via `context.ctx`. + + **`@object-ui/react`** + - `ActionProvider` and `useActionRunner` both gained an `onResultDialog` + option that wires straight through to the runner. + + **`@object-ui/app-shell`** + - New `ActionResultDialog` component — promise-based, blocks click-outside + and Escape (the user MUST click acknowledge), renders five field + formats: `qrcode` (client-side via the `qrcode` package — never sent + off-device, so 2FA URIs stay secret), `code-list`, `secret`, `text`, + `json`. Falls back to `json` when a value's shape doesn't match its + declared format. + - `ObjectView` and `RecordDetailView` install the handler and mount the + dialog automatically, so any action with `resultDialog` declared in + metadata now works without code changes. + - New dependency: `qrcode@^1.5.x` for client-side QR rendering. + + Pairs with the framework-side `Action.resultDialog` schema added in + `@objectstack/spec` and the `sys_two_factor` / `sys_oauth_application` / + `sys_account` updates in `@objectstack/platform-objects`. + +- 5c23088: **Wire `App.hidden` shell hint — App Switcher + avatar dropdown** + + Honour the new `App.hidden` field from `@objectstack/spec/ui`: + - **`AppSwitcher.tsx`** — filter `app.hidden === true` out of the top-bar app dropdown so personal-settings-style apps don't appear next to business apps. + - **`AppHeader.tsx`** — render hidden apps as entries in the avatar / user dropdown (immediately after the hardcoded Profile / Settings items). Uses the app's `icon` + `label` via the existing `getIcon` + `appLabel` utilities, and navigates to `/apps/${app.name}`. + + This is the front-end side of the Account-app split: the `account` app shipped by `@objectstack/platform-objects` declares `hidden: true` and now surfaces through the avatar menu — same pattern as GitHub Settings, Google account chip, and Salesforce Personal Settings. + + No new dependencies; pure metadata-driven wiring. + +- 80f9796: Repoint the Console bell to `sys_inbox_message` + `sys_notification_receipt` (ADR-0030) + + The notification bell read the legacy `sys_notification` object's + `recipient_id`/`is_read`/`title`/`body` columns. ADR-0030 re-modeled + `sys_notification` into the L2 _event_ (no recipient/read-state), so the bell + returned nothing — every notification the new pipeline produced was invisible. + + The bell now reads the L5 in-app materialization instead: + - **List**: `sys_inbox_message` filtered by `user_id` (the `mine` scope), 20 + most-recent, ordered by `created_at`. + - **Read-state**: joins `sys_notification_receipt` (filtered by `user_id` + + `channel:'inbox'`). A message is unread until its event has a + `read`/`clicked`/`dismissed` receipt; the unread count drives the badge. + - **Mark-read**: `UPDATE`s the existing `delivered` receipt to `read` + (keyed `(notification_id, user_id, channel)`), inserting only as a fallback + when no receipt exists. Replaces the old `sys_notification.is_read` write. + - **Navigation**: follows the materialization's `action_url` (absolute, + `/apps/...`, or app-relative `/{object}/{id}`), falling back to the legacy + `source_object`/`source_id` pointer. + - **"View all"**: routes to `/apps/setup/sys_inbox_message?view=mine`. + + Pairs with the framework ADR-0030 pipeline (`@objectstack/service-messaging`). + Verified in-browser (showcase Console): a materialized inbox message + its + `delivered` receipt lit the bell badge; the popover rendered the row; + "mark all read" flipped the receipt to `read` in place (no duplicate) and + cleared the badge. + +- 1c8f775: Add the External Datasource Federation Studio surface (ADR-0015 P5) + + Federated datasources (`schemaMode !== 'managed'`) now get a dedicated + panel inside their Studio Preview tab, so connecting a mature external + database and registering its tables as ObjectStack objects is a + point-and-click flow instead of a CLI-only one. The panel pairs with the + framework backend shipped in objectstack-ai/framework#1390 + (`registerExternalDatasourceRoutes` → `/api/v1/datasources/:name/external/*`). + + ObjectStack is metadata-driven: `datasource` is a metadata type, so it is + browsed and edited through the standard metadata-admin engine + (`metadata:resource`) reached from the Studio app's left-side menu — + **not** a hand-written page. The Studio app (framework + `packages/platform-objects/src/apps/studio.app.ts`, Integration group) + gains a `Datasources` nav item pointing at + `metadata:resource?type=datasource`; the federation panel is contributed + to that standard surface via `registerMetadataPreview('datasource', …)`. + + **`@object-ui/app-shell` — `views/metadata-admin/external/`** + - `api.ts` — a thin, typed REST client over the four federation routes + (`tables`, `tables/:remote/draft`, `refresh-catalog`, `validate`) plus an + `importObjectDraft` helper that PUTs a generated draft to `/meta/object`. + All calls go through `createAuthenticatedFetch()` (Bearer + `X-Tenant-ID` + - `Accept-Language`). A `503 external_service_unavailable` reply is mapped + to a typed `ExternalServiceUnavailableError` so the UI shows a friendly + "federation not enabled on this server" hint. Contract types are inlined + (they were added in framework 7.3; objectui pins `@objectstack/spec` + `^7.2.1`). + - `SchemaBrowser` — lists remote tables (allowedSchemas-filtered server-side) + with a text filter, on-demand Refresh (never a timer — warehouse + introspection is expensive), and a per-table Import action. + - `ImportObjectDialog` — generates an Object draft, surfaces the + type-compat matrix's `// REVIEW:` columns and the generated `*.object.ts` + source, then imports it as a real object. Never mutates the remote schema. + - `ValidationPanel` — runs validation on demand and renders per-object + structured schema diffs (missing column, type mismatch, …). Doubles as an + on-demand drift view. + - `ExternalDatasourcePanel` — Tables / Validation tabs plus a header strip + with "Refresh catalog" and the snapshot timestamp. + - `DatasourcePreview` — registered via `registerMetadataPreview('datasource', …)`, + it renders the panel automatically inside the standard resource edit + page's Preview tab when the saved datasource is federated + (`schemaMode !== 'managed'`), keyed off the item name. This is the only + wiring needed: no bespoke page, no extra route, no `@object-ui/app-shell` + surface to re-export — the metadata-admin engine + left-side nav own the + navigation. Federated datasources are read-only code artifacts (the + `datasource` type forbids runtime create), which the standard list view + already reflects (no "Create" button). + + Out of scope (blocked on backend follow-ups): the connection wizard + (driver/credentials/secrets — belongs in System Settings) and a push-based + drift inbox (needs an event feed). The framework exposes no + test-connection, secrets, or drift-feed routes yet. + +- 4e060b7: Polish the Studio flow-designer canvas visuals + + A refinement pass over the metadata-admin flow designer (`FlowCanvas` + + `flow-canvas-parts`) — purely presentational, no behavioral or API changes, + theme-aware (light/dark), and still dependency-free. + - **Node cards**: the flat 3px left-accent stripe is replaced by a tinted, + color-coded **icon chip** (the card's primary category cue), with a bolder + label, refined uppercase type caption, layered hover elevation + (`-translate-y-0.5` + soft shadow), and clearer selected / run-state rings. + Per-category `chip` tone tokens (soft bg + inset ring) added alongside the + existing icon/accent/label tones. Added distinct tones for `loop` (sky), + `screen`/`user_task` (pink) and `assignment` (purple) — previously they fell + back to the generic slate "task" tone, so every node type now reads as a + distinct color in the canvas. + - **Readable labels**: node width 188→240 and the per-node summary moved from a + right-hand column onto a second line, so the label now gets the **full card + width** (it was badly truncated — "Manager Re…", "Budget Ab…"). A native title + tooltip surfaces the full text on the rare remaining truncation. + - **No overlap on add**: adding a connected node no longer pins it directly below + its parent (which stacked every sibling on the same spot) — it's left to the + layered auto-layout, which slots it beside its siblings. + - **Canvas surface**: the dot grid now tracks pan **and** zoom (it moves with + the diagram instead of floating behind a static texture), plus a subtle inset + vignette for depth. + - **Edges**: rounded line caps, slightly stronger default stroke, and + pill-shaped (rounded-full, frosted) branch/condition labels. + - **Toolbar + add-node palette**: frosted, rounded controls with a primary + hover affordance; the palette gains an "Add node" header and matching tinted + icon chips per row. + + Verified in-browser (Studio → flow → designer) in both light and dark themes. + +- e02aedd: Group the flow add-node palette by category, and offer every node type + + The quick-add palette listed 12 node types as a flat list; `assignment`, + `screen`, `delete_record` and the parallel gateways could only be reached by + adding a node and switching its type in the inspector. Building flows, that's a + real friction point. + - **Complete**: the palette now offers Delete record, Set variables + (assignment), Screen, Parallel split and Parallel join too — so every common + node type is one click away. + - **Grouped**: items are organised into **Data / Logic / Human / Integration / + Flow** sections with headers and dividers, so the (now longer) list stays + scannable. A new `nodeCategory(type)` helper drives the grouping and gives + engine-only / plugin-contributed node types a sensible section; `mergePalette` + preserves a base item's category and infers one for engine-only types. + + Verified in-browser: the grouped palette renders all sections with tinted icon + chips, and the newly-offered types add to the canvas with the correct icon/tone + and no overlap. + +- 7130d4e: Add FlowRunner — render & resume interactive screen-flows + + A `type: 'flow'` action whose run pauses at a `screen` node now opens a + `FlowRunner` modal that renders the screen's fields, submits the values to the + framework resume endpoint (`POST /api/v1/automation/{flow}/runs/{runId}/resume`), + and advances to the next screen or closes + refreshes on completion. Previously + such flows launched server-side but the screen was never rendered, so the input + was never collected. + - New `FlowRunner` component (fields → form → resume loop). + - `ObjectView` + `RecordDetailView` flow handlers detect a paused-screen launch + response (`{ status:'paused', runId, screen }`) and open the runner; for + list_item actions the row's id (`_rowRecord.id`) flows in as the flow's + `recordId`. + + Pairs with the framework screen-flow runtime (`@objectstack/service-automation` + - `@objectstack/runtime`). Verified in-browser: showcase task row → "Reassign…" + → form → submit → the task is reassigned. + +### Patch Changes + +- 18d0339: Relabel metadata-driven UI on a language switch without a page refresh (#1319) + + Switching the UI language left server-resolved metadata labels (object/field/ + view labels, action-dialog text) in the old language until a hard refresh, + because renderers cache those labels by object name and never refetch on a + language change. + + **`@object-ui/auth`** — `createAuthenticatedFetch` now folds the active + `` into `Accept-Language` on API calls (never clobbering an explicit + header), so a switch carries the new locale on every subsequent request. + + **`@object-ui/app-shell`** — `ConnectedShellInner` drops the adapter's + locale-blind metadata cache in the render phase and remounts the metadata + subtree via `key={language}`, so every renderer refetches in the new locale. + The adapter and its connection sit above the key and are preserved — an in-app + relabel, not a reconnect. + + **`@object-ui/i18n`** — dev-mode missing-key warnings: `createI18n` gains + `warnMissingKeys` (default on outside production) wiring a deduped i18next + `missingKeyHandler`. `useObjectLabel`'s convention-key probes are flagged so + their intentional misses (which fall back to server metadata) stay silent. + + Pairs with the framework-side locale-aware metadata changes in + `@objectstack/client` / `@objectstack/objectql` / `@objectstack/rest`. + +- 053a164: fix(metadata): keep form-family views out of the runtime list-view switcher + + The backend now exposes each view as an independent **ViewItem** (ADR-0017, + "Object has-many View"): `{ name: '.', object, viewKind: +'list' | 'form', config }`. The Studio preview was already taught this shape, + but the runtime console path was not — `MetadataProvider.mergeViewsIntoObjects` + only understood the legacy aggregated container (`{ list, form, listViews, +formViews }`) and ignored `viewKind` entirely. As a result a form-family view + (e.g. `crm_activity.default`, expanded from `formViews.default`) was neither + recognized nor excluded: navigating to its `/view/` URL silently fell + back to the default grid list instead of being treated as a record form. + + `mergeViewsIntoObjects` now recognizes the ViewItem shape and routes by + `viewKind` — `'list'` → `objectDef.listViews`, `'form'` → `objectDef.formViews` + — so FORM-family views never enter the list-view switcher (which reads only + `listViews`). Each item's `config` body is flattened to the renderer shape so + `type`/`columns`/`calendar`/… survive, the canonical `.` name is + used as the view id (so `/view/` resolves), and the legacy container is + skipped for any object that already has expanded ViewItems (no double-listing). + Objects served only as a legacy container are unaffected. + +- 8d1195d: Fix `type: 'url'` actions so they actually reach the backend in split-origin dev setups, and so reveal-once result dialogs render. + - `ActionRunner.executeUrl`: when context provides `apiBase`, relative `/api/...`, `/_auth/...`, and `/_account/...` URLs are now promoted to absolute (`${apiBase}${path}`) before navigation. Same-origin API paths (with or without `apiBase`) trigger a full-page `window.location.href` rather than React-Router push — this is required for server-side OAuth redirect dances (e.g. better-auth `/sign-in/social`) that React Router would otherwise swallow into the SPA's fallback route. + - `ActionRunner.buildInterpolationContext`: surfaces `ctx.apiBase` for action targets that want to template it explicitly. + - `ObjectView`: passes `apiBase: import.meta.env.VITE_SERVER_URL` into the toolbar `ActionProvider` context so the above resolves. + - `action-button` and `action-menu` renderers now forward `resultDialog` when invoking the runner. Previously this field was silently dropped by an explicit whitelist, breaking every "show once, then hide" flow (2FA QR/backup codes, OAuth client_secret, regenerated tokens). + +- Updated dependencies [c12986e] +- Updated dependencies [a58c6b8] +- Updated dependencies [bd398df] +- Updated dependencies [18d0339] +- Updated dependencies [8d1195d] + - @object-ui/core@6.3.0 + - @object-ui/react@6.3.0 + - @object-ui/data-objectstack@6.3.0 + - @object-ui/fields@6.3.0 + - @object-ui/i18n@6.3.0 + - @object-ui/auth@6.3.0 + - @object-ui/components@6.3.0 + - @object-ui/layout@6.3.0 + - @object-ui/plugin-editor@6.3.0 + - @object-ui/types@6.3.0 + - @object-ui/permissions@6.3.0 + - @object-ui/collaboration@6.3.0 + - @object-ui/providers@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/app-shell/package.json b/packages/app-shell/package.json index 3158949c3..a2dc782d5 100644 --- a/packages/app-shell/package.json +++ b/packages/app-shell/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/app-shell", - "version": "6.2.3", + "version": "6.3.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 b1ad96fc9..5529cb37d 100644 --- a/packages/auth/CHANGELOG.md +++ b/packages/auth/CHANGELOG.md @@ -1,5 +1,38 @@ # @object-ui/auth +## 6.3.0 + +### Minor Changes + +- 18d0339: Relabel metadata-driven UI on a language switch without a page refresh (#1319) + + Switching the UI language left server-resolved metadata labels (object/field/ + view labels, action-dialog text) in the old language until a hard refresh, + because renderers cache those labels by object name and never refetch on a + language change. + + **`@object-ui/auth`** — `createAuthenticatedFetch` now folds the active + `` into `Accept-Language` on API calls (never clobbering an explicit + header), so a switch carries the new locale on every subsequent request. + + **`@object-ui/app-shell`** — `ConnectedShellInner` drops the adapter's + locale-blind metadata cache in the render phase and remounts the metadata + subtree via `key={language}`, so every renderer refetches in the new locale. + The adapter and its connection sit above the key and are preserved — an in-app + relabel, not a reconnect. + + **`@object-ui/i18n`** — dev-mode missing-key warnings: `createI18n` gains + `warnMissingKeys` (default on outside production) wiring a deduped i18next + `missingKeyHandler`. `useObjectLabel`'s convention-key probes are flagged so + their intentional misses (which fall back to server metadata) stay silent. + + Pairs with the framework-side locale-aware metadata changes in + `@objectstack/client` / `@objectstack/objectql` / `@objectstack/rest`. + +### Patch Changes + +- @object-ui/types@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/auth/package.json b/packages/auth/package.json index fba56ccce..b4441d658 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/auth", - "version": "6.2.3", + "version": "6.3.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 94005b792..abc088cb7 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,15 @@ # @object-ui/cli +## 6.3.0 + +### Patch Changes + +- Updated dependencies [c12986e] +- Updated dependencies [8d1195d] + - @object-ui/react@6.3.0 + - @object-ui/components@6.3.0 + - @object-ui/types@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index eb49684a9..b9c150aed 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/cli", - "version": "6.2.3", + "version": "6.3.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 95a3ac0e7..aa305a2df 100644 --- a/packages/collaboration/CHANGELOG.md +++ b/packages/collaboration/CHANGELOG.md @@ -1,5 +1,11 @@ # @object-ui/collaboration +## 6.3.0 + +### Patch Changes + +- @object-ui/types@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/collaboration/package.json b/packages/collaboration/package.json index 4a23155ef..8df7f4b66 100644 --- a/packages/collaboration/package.json +++ b/packages/collaboration/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/collaboration", - "version": "6.2.3", + "version": "6.3.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 5ab528528..a586b721f 100644 --- a/packages/components/CHANGELOG.md +++ b/packages/components/CHANGELOG.md @@ -1,5 +1,23 @@ # @object-ui/components +## 6.3.0 + +### Patch Changes + +- 8d1195d: Fix `type: 'url'` actions so they actually reach the backend in split-origin dev setups, and so reveal-once result dialogs render. + - `ActionRunner.executeUrl`: when context provides `apiBase`, relative `/api/...`, `/_auth/...`, and `/_account/...` URLs are now promoted to absolute (`${apiBase}${path}`) before navigation. Same-origin API paths (with or without `apiBase`) trigger a full-page `window.location.href` rather than React-Router push — this is required for server-side OAuth redirect dances (e.g. better-auth `/sign-in/social`) that React Router would otherwise swallow into the SPA's fallback route. + - `ActionRunner.buildInterpolationContext`: surfaces `ctx.apiBase` for action targets that want to template it explicitly. + - `ObjectView`: passes `apiBase: import.meta.env.VITE_SERVER_URL` into the toolbar `ActionProvider` context so the above resolves. + - `action-button` and `action-menu` renderers now forward `resultDialog` when invoking the runner. Previously this field was silently dropped by an explicit whitelist, breaking every "show once, then hide" flow (2FA QR/backup codes, OAuth client_secret, regenerated tokens). + +- Updated dependencies [c12986e] +- Updated dependencies [18d0339] +- Updated dependencies [8d1195d] + - @object-ui/core@6.3.0 + - @object-ui/react@6.3.0 + - @object-ui/i18n@6.3.0 + - @object-ui/types@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/components/package.json b/packages/components/package.json index 8c5785cdc..b3e22f294 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/components", - "version": "6.2.3", + "version": "6.3.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 d68de048c..b80598d7f 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,5 +1,60 @@ # @object-ui/core +## 6.3.0 + +### Minor Changes + +- c12986e: Add resultDialog + target interpolation for one-shot action reveals + + Some platform actions return values the user MUST copy now because the + server will not surface them again — 2FA TOTP URI + backup codes, freshly + minted OAuth client_secret, regenerated recovery codes. Previously these + had to ship as bespoke pages in `apps/account` because actions only + emitted a fire-and-forget toast. + + **`@object-ui/core` — ActionRunner** + - New `ActionDef.resultDialog: ResultDialogSpec` field. When set on a + successful action, the runner suppresses the `successMessage` toast and + awaits the registered `ResultDialogHandler` instead. Missing handler is + non-fatal (logs a warning); rejected handler is treated as acknowledged. + - New `setResultDialogHandler(handler)` setter. + - New types: `ResultDialogSpec`, `ResultDialogFieldSpec`, + `ResultDialogHandler`. + - `executeUrl` and `executeAPI` now run `${param.X}` and `${ctx.X}` + interpolation against `target` before fetching / navigating. Values are + `encodeURIComponent`'d, missing keys resolve to empty string. `ctx` + exposes `origin`, `user`, `org`, `recordId` by default; consumers can + inject more via `context.ctx`. + + **`@object-ui/react`** + - `ActionProvider` and `useActionRunner` both gained an `onResultDialog` + option that wires straight through to the runner. + + **`@object-ui/app-shell`** + - New `ActionResultDialog` component — promise-based, blocks click-outside + and Escape (the user MUST click acknowledge), renders five field + formats: `qrcode` (client-side via the `qrcode` package — never sent + off-device, so 2FA URIs stay secret), `code-list`, `secret`, `text`, + `json`. Falls back to `json` when a value's shape doesn't match its + declared format. + - `ObjectView` and `RecordDetailView` install the handler and mount the + dialog automatically, so any action with `resultDialog` declared in + metadata now works without code changes. + - New dependency: `qrcode@^1.5.x` for client-side QR rendering. + + Pairs with the framework-side `Action.resultDialog` schema added in + `@objectstack/spec` and the `sys_two_factor` / `sys_oauth_application` / + `sys_account` updates in `@objectstack/platform-objects`. + +### Patch Changes + +- 8d1195d: Fix `type: 'url'` actions so they actually reach the backend in split-origin dev setups, and so reveal-once result dialogs render. + - `ActionRunner.executeUrl`: when context provides `apiBase`, relative `/api/...`, `/_auth/...`, and `/_account/...` URLs are now promoted to absolute (`${apiBase}${path}`) before navigation. Same-origin API paths (with or without `apiBase`) trigger a full-page `window.location.href` rather than React-Router push — this is required for server-side OAuth redirect dances (e.g. better-auth `/sign-in/social`) that React Router would otherwise swallow into the SPA's fallback route. + - `ActionRunner.buildInterpolationContext`: surfaces `ctx.apiBase` for action targets that want to template it explicitly. + - `ObjectView`: passes `apiBase: import.meta.env.VITE_SERVER_URL` into the toolbar `ActionProvider` context so the above resolves. + - `action-button` and `action-menu` renderers now forward `resultDialog` when invoking the runner. Previously this field was silently dropped by an explicit whitelist, breaking every "show once, then hide" flow (2FA QR/backup codes, OAuth client_secret, regenerated tokens). + - @object-ui/types@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/core/package.json b/packages/core/package.json index 9b378f001..23fd70373 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/core", - "version": "6.2.3", + "version": "6.3.0", "type": "module", "sideEffects": false, "license": "MIT", diff --git a/packages/create-plugin/CHANGELOG.md b/packages/create-plugin/CHANGELOG.md index 8f5f3afc2..b7c044403 100644 --- a/packages/create-plugin/CHANGELOG.md +++ b/packages/create-plugin/CHANGELOG.md @@ -1,5 +1,7 @@ # @object-ui/create-plugin +## 6.3.0 + ## 6.2.3 ## 6.2.2 diff --git a/packages/create-plugin/package.json b/packages/create-plugin/package.json index d55aa0dc0..080cf4d1a 100644 --- a/packages/create-plugin/package.json +++ b/packages/create-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/create-plugin", - "version": "6.2.3", + "version": "6.3.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 bea998592..ecf34cb07 100644 --- a/packages/data-objectstack/CHANGELOG.md +++ b/packages/data-objectstack/CHANGELOG.md @@ -1,5 +1,28 @@ # @object-ui/data-objectstack +## 6.3.0 + +### Patch Changes + +- a58c6b8: fix(datasource): exclude form-family views from `listViews()` + + `OBJECTSTACKDataSource.listViews(objectName)` feeds the object list-view + switcher (`ObjectView` → `ViewTabBar`), but returned **every** view bound to + the object — including form-family ones. With the backend now exposing each + view as an independent **ViewItem** carrying a `viewKind` discriminant + (ADR-0017, "Object has-many View"), a form view such as `crm_activity.default` + (expanded from `formViews.default`) leaked in as a spurious switcher tab and, + when opened, fell back to the default grid. + + `listViews()` now filters out `viewKind` `form`/`detail` items so only + list-family views reach the switcher. Bare view specs without a `viewKind` + (legacy artifacts and user-saved views) are still treated as list views. + +- Updated dependencies [c12986e] +- Updated dependencies [8d1195d] + - @object-ui/core@6.3.0 + - @object-ui/types@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/data-objectstack/package.json b/packages/data-objectstack/package.json index 99fc2545b..be6736b2f 100644 --- a/packages/data-objectstack/package.json +++ b/packages/data-objectstack/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/data-objectstack", - "version": "6.2.3", + "version": "6.3.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 19c9b6b16..1975b5fd2 100644 --- a/packages/fields/CHANGELOG.md +++ b/packages/fields/CHANGELOG.md @@ -1,5 +1,35 @@ # @object-ui/fields +## 6.3.0 + +### Patch Changes + +- bd398df: Render reference/lookup cells as labels, not raw JSON + + A `lookup` / `master_detail` value can arrive as a JSON-encoded object string — + e.g. an unresolved external-id reference `{"externalId":"Website Relaunch"}`. + `LookupCellRenderer` treated the whole JSON string as an opaque id, failed to + resolve it, and fell through to `String(value)`, leaking raw JSON into the grid + cell (and detail/kanban surfaces). + - `LookupCellRenderer` now parses a JSON-object-looking string value and renders + a human label (`name` → `label` → `externalId` → `id`). + - `coerceToSafeValue` (the shared safe-render helper used by 8 cell renderers) + gains the same JSON-string parsing, and `externalId` is added to the + reference-label precedence for plain object values and arrays. + + Verified in the browser (showcase task grid: Project column shows "Website + Relaunch" instead of `{"externalId":"Website Relaunch"}`) and by unit tests. + +- Updated dependencies [c12986e] +- Updated dependencies [18d0339] +- Updated dependencies [8d1195d] + - @object-ui/core@6.3.0 + - @object-ui/react@6.3.0 + - @object-ui/i18n@6.3.0 + - @object-ui/components@6.3.0 + - @object-ui/types@6.3.0 + - @object-ui/providers@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/fields/package.json b/packages/fields/package.json index 08e60fd40..75f0d1d5b 100644 --- a/packages/fields/package.json +++ b/packages/fields/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/fields", - "version": "6.2.3", + "version": "6.3.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 ae91d8ad8..3d9cee475 100644 --- a/packages/i18n/CHANGELOG.md +++ b/packages/i18n/CHANGELOG.md @@ -1,5 +1,34 @@ # @object-ui/i18n +## 6.3.0 + +### Minor Changes + +- 18d0339: Relabel metadata-driven UI on a language switch without a page refresh (#1319) + + Switching the UI language left server-resolved metadata labels (object/field/ + view labels, action-dialog text) in the old language until a hard refresh, + because renderers cache those labels by object name and never refetch on a + language change. + + **`@object-ui/auth`** — `createAuthenticatedFetch` now folds the active + `` into `Accept-Language` on API calls (never clobbering an explicit + header), so a switch carries the new locale on every subsequent request. + + **`@object-ui/app-shell`** — `ConnectedShellInner` drops the adapter's + locale-blind metadata cache in the render phase and remounts the metadata + subtree via `key={language}`, so every renderer refetches in the new locale. + The adapter and its connection sit above the key and are preserved — an in-app + relabel, not a reconnect. + + **`@object-ui/i18n`** — dev-mode missing-key warnings: `createI18n` gains + `warnMissingKeys` (default on outside production) wiring a deduped i18next + `missingKeyHandler`. `useObjectLabel`'s convention-key probes are flagged so + their intentional misses (which fall back to server metadata) stay silent. + + Pairs with the framework-side locale-aware metadata changes in + `@objectstack/client` / `@objectstack/objectql` / `@objectstack/rest`. + ## 6.2.3 ## 6.2.2 diff --git a/packages/i18n/package.json b/packages/i18n/package.json index efe9fa5d7..fea1ca38a 100644 --- a/packages/i18n/package.json +++ b/packages/i18n/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/i18n", - "version": "6.2.3", + "version": "6.3.0", "type": "module", "sideEffects": false, "license": "MIT", diff --git a/packages/layout/CHANGELOG.md b/packages/layout/CHANGELOG.md index 2c58cc5ae..d49a3a0ec 100644 --- a/packages/layout/CHANGELOG.md +++ b/packages/layout/CHANGELOG.md @@ -1,5 +1,16 @@ # @object-ui/layout +## 6.3.0 + +### Patch Changes + +- Updated dependencies [c12986e] +- Updated dependencies [8d1195d] + - @object-ui/core@6.3.0 + - @object-ui/react@6.3.0 + - @object-ui/components@6.3.0 + - @object-ui/types@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/layout/package.json b/packages/layout/package.json index 38631a46e..7a6d73278 100644 --- a/packages/layout/package.json +++ b/packages/layout/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/layout", - "version": "6.2.3", + "version": "6.3.0", "type": "module", "sideEffects": false, "main": "dist/index.umd.cjs", diff --git a/packages/mobile/CHANGELOG.md b/packages/mobile/CHANGELOG.md index 9bc65364c..4300d4c5d 100644 --- a/packages/mobile/CHANGELOG.md +++ b/packages/mobile/CHANGELOG.md @@ -1,5 +1,11 @@ # @object-ui/mobile +## 6.3.0 + +### Patch Changes + +- @object-ui/types@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/mobile/package.json b/packages/mobile/package.json index 4a0ee2121..0018a622c 100644 --- a/packages/mobile/package.json +++ b/packages/mobile/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/mobile", - "version": "6.2.3", + "version": "6.3.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 623324c83..d54411103 100644 --- a/packages/permissions/CHANGELOG.md +++ b/packages/permissions/CHANGELOG.md @@ -1,5 +1,11 @@ # @object-ui/permissions +## 6.3.0 + +### Patch Changes + +- @object-ui/types@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/permissions/package.json b/packages/permissions/package.json index 503fb1aa9..383260bfc 100644 --- a/packages/permissions/package.json +++ b/packages/permissions/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/permissions", - "version": "6.2.3", + "version": "6.3.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 c0231f0cd..e5ef945f7 100644 --- a/packages/plugin-ai/CHANGELOG.md +++ b/packages/plugin-ai/CHANGELOG.md @@ -1,5 +1,16 @@ # @object-ui/plugin-ai +## 6.3.0 + +### Patch Changes + +- Updated dependencies [c12986e] +- Updated dependencies [8d1195d] + - @object-ui/core@6.3.0 + - @object-ui/react@6.3.0 + - @object-ui/components@6.3.0 + - @object-ui/types@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/plugin-ai/package.json b/packages/plugin-ai/package.json index 33a260a67..ac84d92d4 100644 --- a/packages/plugin-ai/package.json +++ b/packages/plugin-ai/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-ai", - "version": "6.2.3", + "version": "6.3.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 dc18a64e2..35526656d 100644 --- a/packages/plugin-calendar/CHANGELOG.md +++ b/packages/plugin-calendar/CHANGELOG.md @@ -1,5 +1,22 @@ # @object-ui/plugin-calendar +## 6.3.0 + +### Patch Changes + +- Updated dependencies [c12986e] +- Updated dependencies [bd398df] +- Updated dependencies [18d0339] +- Updated dependencies [8d1195d] + - @object-ui/core@6.3.0 + - @object-ui/react@6.3.0 + - @object-ui/fields@6.3.0 + - @object-ui/i18n@6.3.0 + - @object-ui/components@6.3.0 + - @object-ui/plugin-detail@6.3.0 + - @object-ui/types@6.3.0 + - @object-ui/mobile@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/plugin-calendar/package.json b/packages/plugin-calendar/package.json index f5e8aa46a..793c73e2e 100644 --- a/packages/plugin-calendar/package.json +++ b/packages/plugin-calendar/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-calendar", - "version": "6.2.3", + "version": "6.3.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 f179a1e4a..e39a13806 100644 --- a/packages/plugin-charts/CHANGELOG.md +++ b/packages/plugin-charts/CHANGELOG.md @@ -1,5 +1,18 @@ # @object-ui/plugin-charts +## 6.3.0 + +### Patch Changes + +- Updated dependencies [c12986e] +- Updated dependencies [18d0339] +- Updated dependencies [8d1195d] + - @object-ui/core@6.3.0 + - @object-ui/react@6.3.0 + - @object-ui/i18n@6.3.0 + - @object-ui/components@6.3.0 + - @object-ui/types@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/plugin-charts/package.json b/packages/plugin-charts/package.json index de4f44492..bd81e382e 100644 --- a/packages/plugin-charts/package.json +++ b/packages/plugin-charts/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-charts", - "version": "6.2.3", + "version": "6.3.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 6d3dc497a..4a389f92b 100644 --- a/packages/plugin-chatbot/CHANGELOG.md +++ b/packages/plugin-chatbot/CHANGELOG.md @@ -1,5 +1,16 @@ # @object-ui/plugin-chatbot +## 6.3.0 + +### Patch Changes + +- Updated dependencies [c12986e] +- Updated dependencies [8d1195d] + - @object-ui/core@6.3.0 + - @object-ui/react@6.3.0 + - @object-ui/components@6.3.0 + - @object-ui/types@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/plugin-chatbot/package.json b/packages/plugin-chatbot/package.json index 09c93f357..8c6a1ba25 100644 --- a/packages/plugin-chatbot/package.json +++ b/packages/plugin-chatbot/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-chatbot", - "version": "6.2.3", + "version": "6.3.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 290187409..ff3c8e1ec 100644 --- a/packages/plugin-dashboard/CHANGELOG.md +++ b/packages/plugin-dashboard/CHANGELOG.md @@ -1,5 +1,20 @@ # @object-ui/plugin-dashboard +## 6.3.0 + +### Patch Changes + +- Updated dependencies [c12986e] +- Updated dependencies [bd398df] +- Updated dependencies [18d0339] +- Updated dependencies [8d1195d] + - @object-ui/core@6.3.0 + - @object-ui/react@6.3.0 + - @object-ui/fields@6.3.0 + - @object-ui/i18n@6.3.0 + - @object-ui/components@6.3.0 + - @object-ui/types@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/plugin-dashboard/package.json b/packages/plugin-dashboard/package.json index d6742e98f..185246bad 100644 --- a/packages/plugin-dashboard/package.json +++ b/packages/plugin-dashboard/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-dashboard", - "version": "6.2.3", + "version": "6.3.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 643e07dcb..f1c83ab01 100644 --- a/packages/plugin-designer/CHANGELOG.md +++ b/packages/plugin-designer/CHANGELOG.md @@ -1,5 +1,24 @@ # @object-ui/plugin-designer +## 6.3.0 + +### Patch Changes + +- Updated dependencies [c12986e] +- Updated dependencies [a58c6b8] +- Updated dependencies [bd398df] +- Updated dependencies [18d0339] +- Updated dependencies [8d1195d] + - @object-ui/core@6.3.0 + - @object-ui/react@6.3.0 + - @object-ui/data-objectstack@6.3.0 + - @object-ui/fields@6.3.0 + - @object-ui/i18n@6.3.0 + - @object-ui/components@6.3.0 + - @object-ui/plugin-form@6.3.0 + - @object-ui/plugin-grid@6.3.0 + - @object-ui/types@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/plugin-designer/package.json b/packages/plugin-designer/package.json index a8b986e78..9aab2c123 100644 --- a/packages/plugin-designer/package.json +++ b/packages/plugin-designer/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-designer", - "version": "6.2.3", + "version": "6.3.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 9c631f076..d7491d632 100644 --- a/packages/plugin-detail/CHANGELOG.md +++ b/packages/plugin-detail/CHANGELOG.md @@ -1,5 +1,7 @@ # @object-ui/plugin-detail +## 6.3.0 + ## 6.2.3 ## 6.2.2 diff --git a/packages/plugin-detail/package.json b/packages/plugin-detail/package.json index ad0c442c6..7ecd4c7f0 100644 --- a/packages/plugin-detail/package.json +++ b/packages/plugin-detail/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-detail", - "version": "6.2.3", + "version": "6.3.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 8a8d98ef6..e20b8ce83 100644 --- a/packages/plugin-editor/CHANGELOG.md +++ b/packages/plugin-editor/CHANGELOG.md @@ -1,5 +1,16 @@ # @object-ui/plugin-editor +## 6.3.0 + +### Patch Changes + +- Updated dependencies [c12986e] +- Updated dependencies [8d1195d] + - @object-ui/core@6.3.0 + - @object-ui/react@6.3.0 + - @object-ui/components@6.3.0 + - @object-ui/types@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/plugin-editor/package.json b/packages/plugin-editor/package.json index b8b52593a..019750b17 100644 --- a/packages/plugin-editor/package.json +++ b/packages/plugin-editor/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-editor", - "version": "6.2.3", + "version": "6.3.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 be0fbd360..cfae7033c 100644 --- a/packages/plugin-form/CHANGELOG.md +++ b/packages/plugin-form/CHANGELOG.md @@ -1,5 +1,19 @@ # @object-ui/plugin-form +## 6.3.0 + +### Patch Changes + +- Updated dependencies [c12986e] +- Updated dependencies [bd398df] +- Updated dependencies [8d1195d] + - @object-ui/core@6.3.0 + - @object-ui/react@6.3.0 + - @object-ui/fields@6.3.0 + - @object-ui/components@6.3.0 + - @object-ui/types@6.3.0 + - @object-ui/permissions@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/plugin-form/package.json b/packages/plugin-form/package.json index af360fa52..d8179e011 100644 --- a/packages/plugin-form/package.json +++ b/packages/plugin-form/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-form", - "version": "6.2.3", + "version": "6.3.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 c07f347f7..67fc10d99 100644 --- a/packages/plugin-gantt/CHANGELOG.md +++ b/packages/plugin-gantt/CHANGELOG.md @@ -1,5 +1,19 @@ # @object-ui/plugin-gantt +## 6.3.0 + +### Patch Changes + +- Updated dependencies [c12986e] +- Updated dependencies [bd398df] +- Updated dependencies [8d1195d] + - @object-ui/core@6.3.0 + - @object-ui/react@6.3.0 + - @object-ui/fields@6.3.0 + - @object-ui/components@6.3.0 + - @object-ui/plugin-detail@6.3.0 + - @object-ui/types@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/plugin-gantt/package.json b/packages/plugin-gantt/package.json index 2d98237bb..761d76ac1 100644 --- a/packages/plugin-gantt/package.json +++ b/packages/plugin-gantt/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-gantt", - "version": "6.2.3", + "version": "6.3.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 f813d1806..f91fbb211 100644 --- a/packages/plugin-grid/CHANGELOG.md +++ b/packages/plugin-grid/CHANGELOG.md @@ -1,5 +1,19 @@ # @object-ui/plugin-grid +## 6.3.0 + +### Patch Changes + +- Updated dependencies [c12986e] +- Updated dependencies [bd398df] +- Updated dependencies [8d1195d] + - @object-ui/core@6.3.0 + - @object-ui/react@6.3.0 + - @object-ui/fields@6.3.0 + - @object-ui/components@6.3.0 + - @object-ui/types@6.3.0 + - @object-ui/mobile@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/plugin-grid/package.json b/packages/plugin-grid/package.json index 118a90181..32f9ac950 100644 --- a/packages/plugin-grid/package.json +++ b/packages/plugin-grid/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-grid", - "version": "6.2.3", + "version": "6.3.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 6e194b3c4..9ebc4a196 100644 --- a/packages/plugin-kanban/CHANGELOG.md +++ b/packages/plugin-kanban/CHANGELOG.md @@ -1,5 +1,21 @@ # @object-ui/plugin-kanban +## 6.3.0 + +### Patch Changes + +- Updated dependencies [c12986e] +- Updated dependencies [bd398df] +- Updated dependencies [18d0339] +- Updated dependencies [8d1195d] + - @object-ui/core@6.3.0 + - @object-ui/react@6.3.0 + - @object-ui/fields@6.3.0 + - @object-ui/i18n@6.3.0 + - @object-ui/components@6.3.0 + - @object-ui/plugin-detail@6.3.0 + - @object-ui/types@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/plugin-kanban/package.json b/packages/plugin-kanban/package.json index 434e06f1f..ca5f691fa 100644 --- a/packages/plugin-kanban/package.json +++ b/packages/plugin-kanban/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-kanban", - "version": "6.2.3", + "version": "6.3.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 1beca6f65..da85d9788 100644 --- a/packages/plugin-list/CHANGELOG.md +++ b/packages/plugin-list/CHANGELOG.md @@ -1,5 +1,7 @@ # @object-ui/plugin-list +## 6.3.0 + ## 6.2.3 ## 6.2.2 diff --git a/packages/plugin-list/package.json b/packages/plugin-list/package.json index 335daaaf6..f747ebab9 100644 --- a/packages/plugin-list/package.json +++ b/packages/plugin-list/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-list", - "version": "6.2.3", + "version": "6.3.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 ab900f298..3c3edf775 100644 --- a/packages/plugin-map/CHANGELOG.md +++ b/packages/plugin-map/CHANGELOG.md @@ -1,5 +1,16 @@ # @object-ui/plugin-map +## 6.3.0 + +### Patch Changes + +- Updated dependencies [c12986e] +- Updated dependencies [8d1195d] + - @object-ui/core@6.3.0 + - @object-ui/react@6.3.0 + - @object-ui/components@6.3.0 + - @object-ui/types@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/plugin-map/package.json b/packages/plugin-map/package.json index 269d1b2c8..2ea400f80 100644 --- a/packages/plugin-map/package.json +++ b/packages/plugin-map/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-map", - "version": "6.2.3", + "version": "6.3.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 74643a210..2820137d8 100644 --- a/packages/plugin-markdown/CHANGELOG.md +++ b/packages/plugin-markdown/CHANGELOG.md @@ -1,5 +1,16 @@ # @object-ui/plugin-markdown +## 6.3.0 + +### Patch Changes + +- Updated dependencies [c12986e] +- Updated dependencies [8d1195d] + - @object-ui/core@6.3.0 + - @object-ui/react@6.3.0 + - @object-ui/components@6.3.0 + - @object-ui/types@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/plugin-markdown/package.json b/packages/plugin-markdown/package.json index b92601071..242c766f0 100644 --- a/packages/plugin-markdown/package.json +++ b/packages/plugin-markdown/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-markdown", - "version": "6.2.3", + "version": "6.3.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 28f4a4926..59c724ec7 100644 --- a/packages/plugin-report/CHANGELOG.md +++ b/packages/plugin-report/CHANGELOG.md @@ -1,5 +1,21 @@ # @object-ui/plugin-report +## 6.3.0 + +### Patch Changes + +- Updated dependencies [c12986e] +- Updated dependencies [bd398df] +- Updated dependencies [18d0339] +- Updated dependencies [8d1195d] + - @object-ui/core@6.3.0 + - @object-ui/react@6.3.0 + - @object-ui/fields@6.3.0 + - @object-ui/i18n@6.3.0 + - @object-ui/components@6.3.0 + - @object-ui/plugin-grid@6.3.0 + - @object-ui/types@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/plugin-report/package.json b/packages/plugin-report/package.json index 50886640c..494ecb37a 100644 --- a/packages/plugin-report/package.json +++ b/packages/plugin-report/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-report", - "version": "6.2.3", + "version": "6.3.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 33e5efc14..bd0603eca 100644 --- a/packages/plugin-timeline/CHANGELOG.md +++ b/packages/plugin-timeline/CHANGELOG.md @@ -1,5 +1,17 @@ # @object-ui/plugin-timeline +## 6.3.0 + +### Patch Changes + +- Updated dependencies [c12986e] +- Updated dependencies [8d1195d] + - @object-ui/core@6.3.0 + - @object-ui/react@6.3.0 + - @object-ui/components@6.3.0 + - @object-ui/types@6.3.0 + - @object-ui/mobile@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/plugin-timeline/package.json b/packages/plugin-timeline/package.json index 227d2f4eb..49824c3b3 100644 --- a/packages/plugin-timeline/package.json +++ b/packages/plugin-timeline/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-timeline", - "version": "6.2.3", + "version": "6.3.0", "type": "module", "license": "MIT", "description": "Timeline component plugin for Object UI", diff --git a/packages/plugin-view/CHANGELOG.md b/packages/plugin-view/CHANGELOG.md index cff1b32a4..dfda4c910 100644 --- a/packages/plugin-view/CHANGELOG.md +++ b/packages/plugin-view/CHANGELOG.md @@ -1,5 +1,18 @@ # @object-ui/plugin-view +## 6.3.0 + +### Patch Changes + +- Updated dependencies [c12986e] +- Updated dependencies [8d1195d] + - @object-ui/core@6.3.0 + - @object-ui/react@6.3.0 + - @object-ui/components@6.3.0 + - @object-ui/plugin-form@6.3.0 + - @object-ui/plugin-grid@6.3.0 + - @object-ui/types@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/plugin-view/package.json b/packages/plugin-view/package.json index 74660039d..78c873745 100644 --- a/packages/plugin-view/package.json +++ b/packages/plugin-view/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-view", - "version": "6.2.3", + "version": "6.3.0", "type": "module", "license": "MIT", "description": "Object View plugin for Object UI", diff --git a/packages/plugin-workflow/CHANGELOG.md b/packages/plugin-workflow/CHANGELOG.md index 5ba853760..57fdc754c 100644 --- a/packages/plugin-workflow/CHANGELOG.md +++ b/packages/plugin-workflow/CHANGELOG.md @@ -1,5 +1,16 @@ # @object-ui/plugin-workflow +## 6.3.0 + +### Patch Changes + +- Updated dependencies [c12986e] +- Updated dependencies [8d1195d] + - @object-ui/core@6.3.0 + - @object-ui/react@6.3.0 + - @object-ui/components@6.3.0 + - @object-ui/types@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/plugin-workflow/package.json b/packages/plugin-workflow/package.json index c70e39c1e..7a9e99b36 100644 --- a/packages/plugin-workflow/package.json +++ b/packages/plugin-workflow/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-workflow", - "version": "6.2.3", + "version": "6.3.0", "type": "module", "main": "dist/index.umd.cjs", "module": "dist/index.js", diff --git a/packages/providers/CHANGELOG.md b/packages/providers/CHANGELOG.md index a7fb11a53..c451fa7f7 100644 --- a/packages/providers/CHANGELOG.md +++ b/packages/providers/CHANGELOG.md @@ -1,5 +1,11 @@ # @object-ui/providers — Changelog +## 6.3.0 + +### Patch Changes + +- @object-ui/types@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/providers/package.json b/packages/providers/package.json index ef4510e51..545cbc03e 100644 --- a/packages/providers/package.json +++ b/packages/providers/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/providers", - "version": "6.2.3", + "version": "6.3.0", "type": "module", "license": "MIT", "description": "Reusable context providers for ObjectUI applications", diff --git a/packages/react/CHANGELOG.md b/packages/react/CHANGELOG.md index 4284843f3..c114bf0ee 100644 --- a/packages/react/CHANGELOG.md +++ b/packages/react/CHANGELOG.md @@ -1,5 +1,62 @@ # @object-ui/react +## 6.3.0 + +### Minor Changes + +- c12986e: Add resultDialog + target interpolation for one-shot action reveals + + Some platform actions return values the user MUST copy now because the + server will not surface them again — 2FA TOTP URI + backup codes, freshly + minted OAuth client_secret, regenerated recovery codes. Previously these + had to ship as bespoke pages in `apps/account` because actions only + emitted a fire-and-forget toast. + + **`@object-ui/core` — ActionRunner** + - New `ActionDef.resultDialog: ResultDialogSpec` field. When set on a + successful action, the runner suppresses the `successMessage` toast and + awaits the registered `ResultDialogHandler` instead. Missing handler is + non-fatal (logs a warning); rejected handler is treated as acknowledged. + - New `setResultDialogHandler(handler)` setter. + - New types: `ResultDialogSpec`, `ResultDialogFieldSpec`, + `ResultDialogHandler`. + - `executeUrl` and `executeAPI` now run `${param.X}` and `${ctx.X}` + interpolation against `target` before fetching / navigating. Values are + `encodeURIComponent`'d, missing keys resolve to empty string. `ctx` + exposes `origin`, `user`, `org`, `recordId` by default; consumers can + inject more via `context.ctx`. + + **`@object-ui/react`** + - `ActionProvider` and `useActionRunner` both gained an `onResultDialog` + option that wires straight through to the runner. + + **`@object-ui/app-shell`** + - New `ActionResultDialog` component — promise-based, blocks click-outside + and Escape (the user MUST click acknowledge), renders five field + formats: `qrcode` (client-side via the `qrcode` package — never sent + off-device, so 2FA URIs stay secret), `code-list`, `secret`, `text`, + `json`. Falls back to `json` when a value's shape doesn't match its + declared format. + - `ObjectView` and `RecordDetailView` install the handler and mount the + dialog automatically, so any action with `resultDialog` declared in + metadata now works without code changes. + - New dependency: `qrcode@^1.5.x` for client-side QR rendering. + + Pairs with the framework-side `Action.resultDialog` schema added in + `@objectstack/spec` and the `sys_two_factor` / `sys_oauth_application` / + `sys_account` updates in `@objectstack/platform-objects`. + +### Patch Changes + +- Updated dependencies [c12986e] +- Updated dependencies [a58c6b8] +- Updated dependencies [18d0339] +- Updated dependencies [8d1195d] + - @object-ui/core@6.3.0 + - @object-ui/data-objectstack@6.3.0 + - @object-ui/i18n@6.3.0 + - @object-ui/types@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/react/package.json b/packages/react/package.json index b1e3019d1..354f06642 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/react", - "version": "6.2.3", + "version": "6.3.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 2c8250678..923e54604 100644 --- a/packages/runner/CHANGELOG.md +++ b/packages/runner/CHANGELOG.md @@ -1,5 +1,18 @@ # @object-ui/runner +## 6.3.0 + +### Patch Changes + +- Updated dependencies [c12986e] +- Updated dependencies [8d1195d] + - @object-ui/core@6.3.0 + - @object-ui/react@6.3.0 + - @object-ui/components@6.3.0 + - @object-ui/plugin-charts@6.3.0 + - @object-ui/plugin-kanban@6.3.0 + - @object-ui/types@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/runner/package.json b/packages/runner/package.json index b257bc66c..ea887348f 100644 --- a/packages/runner/package.json +++ b/packages/runner/package.json @@ -1,7 +1,7 @@ { "name": "@object-ui/runner", "private": false, - "version": "6.2.3", + "version": "6.3.0", "description": "Universal Object UI Application Runner", "type": "module", "homepage": "https://www.objectui.org/docs/utilities/runner", diff --git a/packages/tenant/CHANGELOG.md b/packages/tenant/CHANGELOG.md index 8780ffb05..58d092fdf 100644 --- a/packages/tenant/CHANGELOG.md +++ b/packages/tenant/CHANGELOG.md @@ -1,5 +1,11 @@ # @object-ui/tenant +## 6.3.0 + +### Patch Changes + +- @object-ui/types@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/tenant/package.json b/packages/tenant/package.json index 84ad75531..97012f7cf 100644 --- a/packages/tenant/package.json +++ b/packages/tenant/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/tenant", - "version": "6.2.3", + "version": "6.3.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 74ee2e51e..799122039 100644 --- a/packages/types/CHANGELOG.md +++ b/packages/types/CHANGELOG.md @@ -1,5 +1,7 @@ # @object-ui/types +## 6.3.0 + ## 6.2.3 ## 6.2.2 diff --git a/packages/types/package.json b/packages/types/package.json index ddbe1802a..e7735b95c 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/types", - "version": "6.2.3", + "version": "6.3.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 ef86010ee..6407aebbc 100644 --- a/packages/vscode-extension/CHANGELOG.md +++ b/packages/vscode-extension/CHANGELOG.md @@ -1,5 +1,14 @@ # Changelog +## 6.3.0 + +### Patch Changes + +- Updated dependencies [c12986e] +- Updated dependencies [8d1195d] + - @object-ui/core@6.3.0 + - @object-ui/types@6.3.0 + ## 6.2.3 ### Patch Changes diff --git a/packages/vscode-extension/package.json b/packages/vscode-extension/package.json index e86b8cbc3..df8ae383e 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": "6.2.3", + "version": "6.3.0", "publisher": "objectui", "private": true, "icon": "icon.svg",