diff --git a/.changeset/action-param-inline-lookup.md b/.changeset/action-param-inline-lookup.md deleted file mode 100644 index dc859a130..000000000 --- a/.changeset/action-param-inline-lookup.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -"@object-ui/app-shell": patch -"@object-ui/i18n": patch ---- - -fix(app-shell): give inline `lookup` action params a real record picker (#3405) - -An action parameter declared inline as `{ name: 'inspector', type: 'lookup', -reference: 'sys_user' }` always rendered as a plain text input asking the user -to paste a record id (UUID) — a supervisor assigning an inspector had to go -find that person's UUID by hand, while the same reference field picks records -by name in the create/edit dialog. - -`paramToField()` degrades a picker param to text when it has no `referenceTo` -target, and `referenceTo` was only ever populated on the field-backed branch of -`resolveActionParams()`. The inline branch dropped the authored `reference` -key entirely (as did the spec schema, which stripped it as unknown), so an -inline picker could never reach `` no matter how it was authored. - -- `resolveActionParam()` now maps an inline `reference` onto `referenceTo` — on - the inline branch, on the missing-field fallback branch, and as an override - on the field-backed branch (matching how every other inline value overrides - the resolved field). -- The text degradation now warns in dev naming the offending param, since with - `@objectstack/spec` rejecting a targetless inline picker at parse time it - means the metadata is broken, not merely partial. -- The fallback's placeholder and help text no longer claim "a picker is coming - soon" — the picker has shipped, and the message now says the parameter has no - reference object configured. Updated across all 10 locales. diff --git a/.changeset/activity-popover-field-mapping.md b/.changeset/activity-popover-field-mapping.md deleted file mode 100644 index 3f0f1c808..000000000 --- a/.changeset/activity-popover-field-mapping.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -"@object-ui/app-shell": patch ---- - -fix(app-shell): map raw `sys_activity` rows before rendering the inbox Activity tab - -The top-bar inbox bell's Activity tab (`InboxPopover`) rendered blank rows — -only the relative time showed (`47m ·`), with the actor, summary, and object -name all missing. `AppHeader.fetchPresenceAndActivities` cast the raw -`sys_activity` rows straight to `ActivityItem` without renaming their fields, -so the popover read `a.user` / `a.description` / `a.objectName` while the rows -only carry plugin-audit's `actor_name` / `summary` / `object_name`. - -The rows are now mapped onto `ActivityItem` (with `type` normalization, a -`timestamp` fallback, and an empty-`summary` filter), mirroring the mapping in -`useHomeInbox` so the bell and the Home dashboard stay in sync. diff --git a/.changeset/approval-approver-group-chips.md b/.changeset/approval-approver-group-chips.md deleted file mode 100644 index c03c3c2d1..000000000 --- a/.changeset/approval-approver-group-chips.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -"@object-ui/console": patch ---- - -feat(approvals): label pending-approver chips with their group (objectui#2807) - -Follow-up to #2762 P1-2. The dedupe pass collapsed repeated "waiting on" -chips to one with a `×N` count, but couldn't say *which* group (finance / -legal / …) each pending approver represented in a 会签 (per_group) request — -the data wasn't there. With the framework now emitting -`pending_approver_groups` (`@objectstack/plugin-approvals`), the drawer: - -- keys the chip collapse by **(name, group)** — the same person filling two - different groups stays two labeled chips (`Dev Admin · finance`, - `Dev Admin · legal`), while one group filled twice collapses to a single - chip with a count; -- renders the group as a muted `· ` sub-tag on the chip. - -Degrades cleanly: with no group data (non-`per_group`, or an older backend) -the key is the name alone, keeping the plain dedupe + `×N` behavior. diff --git a/.changeset/approval-center-density-amount.md b/.changeset/approval-center-density-amount.md deleted file mode 100644 index c3a9392a6..000000000 --- a/.changeset/approval-center-density-amount.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -"@object-ui/console": patch ---- - -fix(approvals): Approval Center density + amount emphasis (#2762 P2) - -- **Column rebalance** — the inbox table gave five auto columns equal width, - leaving 审批事项 (Request) over-wide next to a cramped 状态 (Status). The - Record column (the primary content) now gets the widest share, Request a - moderate one, and Status/Submitted fixed widths so they never crowd. -- **Lead with the amount** — the drawer summary card now surfaces the - decision-critical amount as a filled figure at the top of the card instead - of burying it in the generic field grid (and drops it from that grid so it - shows once). - -Also verified two P2 items need no change: light mode already works — -`ConsoleShell` mounts `ThemeProvider defaultTheme="system"` (follows the OS -`prefers-color-scheme`) with a `ModeToggle`, and the page's own classes carry -full light/dark variants; and the queue already has a bulk approve/reject -toolbar for the select-all/per-row selection. diff --git a/.changeset/approval-center-optimization.md b/.changeset/approval-center-optimization.md deleted file mode 100644 index 4bfe9d999..000000000 --- a/.changeset/approval-center-optimization.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -"@object-ui/components": patch -"@object-ui/app-shell": patch -"@object-ui/i18n": patch ---- - -fix(approvals): Approval Center UX pass — badge nowrap, approve confirm, decision progress bar, localized declared actions (#2762) - -- **Badge no longer stacks CJK text vertically (P0-1)** — `Badge` gains - `whitespace-nowrap` in its base variants (a badge is a single-line pill by - definition), and the inbox 状态 column gets a minimum width, so 待审批 can - never render as 待/审/批. -- **Quick Approve now confirms (P0-2)** — the row's right-edge ✓, the mobile - card button and the `a` keyboard shortcut all route through a confirmation - dialog before executing, mirroring the Reject flow; an irreversible decision - can no longer fire on a stray click. -- **Decision progress is visualized (P1-1)** — the drawer renders a segmented - progress bar (ARIA `progressbar`) for `decision_progress`, per-group chips - get an explicit unsatisfied ○ state next to the satisfied ✓, the eligible - approver count is spelled out, and the drawer pager now reads - "Request N of M" so it can't be misread as approval progress. -- **Declared action labels localize (P0-3)** — `DeclaredActionsBar` resolves - label / confirmText / successMessage through the `_actions..*` - translation convention (metadata literals as fallback), matching - ObjectView/RecordDetailView; with the `@objectstack/plugin-approvals` - bundle, the drawer shows 通过 / 拒绝 / 转签 instead of English in a zh-CN - workspace. New `approvalsInbox` keys shipped in all ten locales. diff --git a/.changeset/approval-center-triage-pass.md b/.changeset/approval-center-triage-pass.md deleted file mode 100644 index cd7d17eee..000000000 --- a/.changeset/approval-center-triage-pass.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -"@object-ui/app-shell": patch -"@object-ui/i18n": patch ---- - -fix(approvals): Approval Center triage + drawer readability pass (#2762 P1-2/P1-3/P1-4/P1-5/P2) - -- **Decision-relevant data in the queue (P1-3)** — list rows and mobile cards - now surface the request's amount/total inline (detected from the snapshot, - preferring the server-formatted `payload_display` value), so a reviewer can - triage without opening each request. A sort control adds "Oldest first" and - "Amount (high→low)" alongside the default newest-first. -- **Empty applicant column (P1-4)** — flow-/system-initiated requests (no human - submitter) now read "Flow-initiated" with a workflow icon instead of a bare - person icon + "—", in the desktop table, mobile card, and drawer. -- **Approver chips deduped (P1-2)** — a person filling more than one approver - slot rendered as N identical "Waiting on" chips; they collapse to one chip - with a ×N count, the tooltip keeping every underlying id. -- **Action hierarchy (P1-5)** — `DeclaredActionsBar` maps the spec action - `variant` enum onto the Button variants (`primary` → filled default, - `danger` → destructive), so the drawer's Approve stands out and Reject reads - as destructive once `@objectstack/plugin-approvals` declares them. -- **Label polish (P2)** — `owner_id`-style resolved lookup keys render as - "Owner", not the awkward "Owner Id", in the drawer summary. - -New `approvalsInbox` keys (`flowOrigin`, `sortBy`/`sortRecent`/`sortOldest`/ -`sortAmount`) added to all ten locales. diff --git a/.changeset/autolist-owner-id-columns.md b/.changeset/autolist-owner-id-columns.md deleted file mode 100644 index a38650ab2..000000000 --- a/.changeset/autolist-owner-id-columns.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -"@object-ui/app-shell": patch ---- - -fix(list): keep the injected `owner_id` out of the auto-generated list columns - -`ObjectView` renders an object's default "所有记录" tabular view (and prefills the -"Add View" dialog) from the object's field order when it declares no explicit -list view. Both paths carried their own name-based `SYSTEM_FIELDS` exclusion set -that — like the pre-#2702 lists in `ObjectGrid` / `InterfaceListPage` — never -listed `owner_id`. Because the framework's `applySystemFields` spreads its -injected system/audit/ownership fields to the FRONT of the field map and -`owner_id` is deliberately non-hidden and non-readonly (ownership is -reassignable), it leaked through as the leading, raw-id column on every object -without a declared list view (e.g. `showcase_invoice`), redundant with the -business `owner` (`Field.user`) column. - -Both paths now derive their columns through a single shared -`defaultListColumnsFromObject` helper that classifies system fields via the -`isSystemManagedField` helper from `@object-ui/types` (the same classifier -#2702 introduced) — branching on the spec `system` flag with a name-set -fallback that includes the ownership/tenancy FKs. Auto-derived lists lead with -business fields again and pick up future injected fields without editing a name -list. Closes #2777. diff --git a/.changeset/automations-flow-i18n.md b/.changeset/automations-flow-i18n.md deleted file mode 100644 index adb9bcfb4..000000000 --- a/.changeset/automations-flow-i18n.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -"@object-ui/app-shell": patch ---- - -feat(app-shell): localize the automations flow designer & inspector (en-US + zh-CN) - -Comprehensive zh-CN localization of the metadata-admin automations surfaces — -the visual Flow designer, node/edge inspector, validation, and the shared editor -panels shown on the flow screen. Client-side per the platform's -`translateMetadataType` precedent; en-US is unchanged (every zh overlay falls -back to English, so unknown/plugin values are never hidden). - -- Flow designer: node palette (labels/hints/categories + Chinese search), canvas - chrome & tooltips, header pills incl. enum values, preview panels, run-history - & debug simulator, nested-region tray, and localized default labels for - newly-created nodes. -- Node & edge inspectors: config-field labels / help / options / column headers - for the full engine-published `configSchema` field set (loop - `indexVariable`/`maxIterations`, http `durable`/`signingSecret`, connector flat - ids, notify's config fields, …), keyed off the raw node type so aliased types - localize correctly. -- Structural + unknown-reference validation messages (canvas banner, Problems - panel, debug simulator) and the Problems-panel chrome. -- Generic `SchemaForm` enum-option / raw-field-label localization used on the - flow property form, plus the History / Audit / References / Layered-diff panels - and the force-save dialog shown on the flow screen. diff --git a/.changeset/command-palette-global-search.md b/.changeset/command-palette-global-search.md deleted file mode 100644 index b4e89a097..000000000 --- a/.changeset/command-palette-global-search.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -"@object-ui/data-objectstack": patch -"@object-ui/react": patch -"@object-ui/app-shell": patch -"@object-ui/types": patch ---- - -Command palette (⌘K) now surfaces record search hits from the platform's global -search endpoint (`GET /api/v1/search`). - -Previously the palette only ran a per-object `find({ $search })` fanout (the -metadata-driven ADR-0061 search), which misses records that only the global -search index knows about — so typing a well-known record name returned no -records even though `/api/v1/search` served them. `ObjectStackAdapter` now -exposes a `searchAll(query, { limit, objects })` method that calls the unified -endpoint, `useRecordSearch` prefers it when present (falling back to the fanout -otherwise), and the palette renders the resulting record hits grouped by object. diff --git a/.changeset/data-table-sticky-action-header.md b/.changeset/data-table-sticky-action-header.md deleted file mode 100644 index 61ec6e002..000000000 --- a/.changeset/data-table-sticky-action-header.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -"@object-ui/components": patch ---- - -fix(data-table): keep the right-pinned action column HEADER sticky on horizontal scroll (objectui#2784) - -The row-actions column is pinned to the right edge by injecting `sticky right-0` -into the column's `className`, which reaches both the body cells and the header -cell. Body cells stayed pinned, but the header cell unconditionally appended a -`relative` position utility (it anchors the column-resize handle) — and since -`cn` is `tailwind-merge`, the later `relative` won over the injected `sticky`. -So the "操作" title scrolled away while its body cells stayed frozen. - -The header now detects a right-pinned column (its `className` carries -`sticky` + `right-0`), skips `relative` for it (a sticky cell is already its own -positioning context, so the `absolute` resize handle still anchors correctly), -and re-asserts `sticky right-0 z-20` after `col.className` so tailwind-merge -keeps the pin and it stacks above the body's pinned cells (z-10). Left-frozen -columns, the resize handle, and non-pinned columns are unaffected. diff --git a/.changeset/drop-dead-spec-bridge-page-dashboard.md b/.changeset/drop-dead-spec-bridge-page-dashboard.md deleted file mode 100644 index 8c883e492..000000000 --- a/.changeset/drop-dead-spec-bridge-page-dashboard.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -"@object-ui/react": major ---- - -refactor(spec-bridge): remove the dead page/dashboard bridges (#1892) - -`SpecBridge`'s `page` and `dashboard` bridges — `bridgePage`, `bridgeDashboard`, -and the `SpecBridge#transformPage` / `#transformDashboard` methods — had no -runtime consumer. Pages render through their own renderer and dashboards -through `DashboardView → DashboardRenderer → DatasetWidget` (ADR-0021); neither -path routes through `SpecBridge`. The dashboard bridge's input shape -(`object` / `categoryField` / `valueField` / `aggregate`) is the pre-ADR-0021 -widget model, which the strict `DashboardWidgetSchema` now rejects — so the -bridge could not receive a spec-valid dashboard even in principle. - -Flagged dead by the metadata-liveness audit (framework #1878 / #1892). The -`list` and `form` bridges are unaffected and remain the live authoring path. - -BREAKING CHANGE: the public exports `bridgePage`, `bridgeDashboard`, and the -`SpecBridge#transformPage` / `#transformDashboard` methods are removed. There -is no replacement — render pages and dashboards through their renderers -(`DashboardRenderer` / the page renderer) directly. diff --git a/.changeset/flow-created-or-updated-trigger.md b/.changeset/flow-created-or-updated-trigger.md deleted file mode 100644 index 2ac8e520b..000000000 --- a/.changeset/flow-created-or-updated-trigger.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -"@object-ui/app-shell": patch ---- - -feat(app-shell): Studio flow start node offers a "Record created or updated" trigger (#3427) - -The record-change trigger now supports `record-after-write` (create OR update in -one flow), so the flow designer's start-node trigger picker offers a "Record -created or updated" option. Selecting it shows the Object and Entry-condition -fields, and the scope resolver puts both `record` and `previous` in scope for it -(`previous == null` is how an author branches the create leg) — mirroring the -runtime binding that fires the flow on both insert and update. diff --git a/.changeset/flow-notify-studio-node.md b/.changeset/flow-notify-studio-node.md deleted file mode 100644 index 224feafdb..000000000 --- a/.changeset/flow-notify-studio-node.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -"@object-ui/app-shell": patch ---- - -feat(studio): first-class `notify` flow node in the Studio palette + inspector - -The `notify` flow node (ADR-0012 — outbound notification via the messaging -service) is a live built-in with a server descriptor, but Studio had no static -palette entry or config editor for it: `fieldsForNodeType('notify')` returned -`[]`, so it was only authorable by hand-editing JSON or when the running engine -happened to publish its descriptor (framework#1878 / framework#1895). - -- Added `notify` to `NODE_PALETTE` (Integration), with a Bell icon and the - integration tone, canvas category, and a sensible default-config seed - (`channels: ['inbox']`). -- Added a `notify` entry to `FLOW_NODE_CONFIG` mirroring the built-in node's - descriptor keys: `recipients`/`channels` (stringList), `title`, `message` - (textarea), `topic`, `severity` (select info/warning/critical), and the - click-through target (`sourceObject`/`sourceId`/`url`) — all written under - `node.config`. - -Closes the last item of the designer-authoring-gaps issue (framework#1895). -Unit + DOM tested (palette entry, config field kinds/paths, no inspector -regression). A browser dogfood pass of authoring a notify node end-to-end is -recommended before merge. diff --git a/.changeset/flow-runs-step-warnings.md b/.changeset/flow-runs-step-warnings.md deleted file mode 100644 index afc49e0e7..000000000 --- a/.changeset/flow-runs-step-warnings.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -"@object-ui/app-shell": patch ---- - -feat(app-shell): surface step warnings in the Flow Runs panel (#3407) - -The automation engine now attaches advisory `warnings[]` to a step whose write -was legally stripped by the data layer — an `update_record`/`create_record` -targeting a `readonly` / `readonlyWhen` field. The step still reports -`success` (the strip is legitimate semantics), so the run trace previously -looked like a clean 3ms success while the intended write never landed; the -only signal lived in the server WARN log. - -`FlowRunsPanel` now reads `step.warnings` and renders each one amber beneath -its step — with a ⚠ marker on the step row — **without** recoloring the -status. The dropped-write signal that #3407/#3413 plumbed from the data layer -into the run's step log now reaches the Studio, closing the observability loop -the author actually looks at. diff --git a/.changeset/form-invalid-scroll-to-error.md b/.changeset/form-invalid-scroll-to-error.md deleted file mode 100644 index fa8c271c2..000000000 --- a/.changeset/form-invalid-scroll-to-error.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@object-ui/components": patch ---- - -fix(form): scroll and focus the first errored field on an invalid submit (#2793) - -Submitting a form with a missing required field already toasts the offending field names (#2329), but in a long form the field itself stays off-screen, so the user still hunts for it. react-hook-form's native focus-on-error only reaches fields whose registered ref is a focusable native input — it silently no-ops for custom widgets (lookup / select / master-detail), which is exactly the reported case. The form renderer now disables RHF's unreliable `shouldFocusError` and, in its `onInvalid` handler, scrolls the first errored field (in visual/declared order) into view via its `data-field` wrapper and focuses a focusable control inside it — working for every field type. diff --git a/.changeset/formview-buttons-defaults-fold.md b/.changeset/formview-buttons-defaults-fold.md deleted file mode 100644 index 3837809b8..000000000 --- a/.changeset/formview-buttons-defaults-fold.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -"@object-ui/plugin-form": patch -"@object-ui/plugin-view": patch -"@object-ui/app-shell": patch -"@object-ui/types": patch ---- - -feat(form): consume spec-aligned FormView buttons/defaults in ObjectForm - -The authored `@objectstack/spec` FormViewSchema carries structured -`buttons.{submit,cancel,reset}.{show,label}` and `defaults`, but the form -renderer only read the flat renderer-invented `showSubmit`/`submitText`/ -`showCancel`/`cancelText`/`showReset`/`initialValues`. That left the two spec -keys parsed-but-inert (ADR-0078) and stuck at `experimental` in the spec -liveness ledger. - -`ObjectForm` now folds the structured shape down onto those flat props inside -its existing normalization pass, so every entry path (ObjectView -drawer/modal/page, RecordFormPage) honors it. An explicitly-set flat key still -wins, so metadata authored against the deprecated flat keys is unchanged. -`ObjectView` and `RecordFormPage` forward `buttons`/`defaults` from the spec -form view. `ObjectFormSchema` gains the optional `buttons`/`defaults` fields. - -Refs objectstack-ai/objectstack#1894, objectstack-ai/objectstack#2998. diff --git a/.changeset/import-historical-checkbox.md b/.changeset/import-historical-checkbox.md deleted file mode 100644 index a46cb82c9..000000000 --- a/.changeset/import-historical-checkbox.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -"@object-ui/plugin-grid": patch -"@object-ui/types": patch ---- - -feat(plugin-grid): "Import as historical data" option in the Import Wizard (framework #3479) - -Adds a checkbox to the Import Wizard's options panel that sends `treatAsHistorical` -on the import request. When on, the server skips the object's `state_machine` rule so -mid-lifecycle rows — a batch of already-`closed` tickets, `closed_won` deals — aren't -rejected by `initialStates`. Off by default: a normal import still walks the FSM, so -the exemption is always an explicit opt-in. - -Pairs with the framework side (objectstack #3483). `ImportRequestOptions.treatAsHistorical` -is added to `@object-ui/types`, and `assembleImportRequest` threads it through both the -inline and named-mapping request shapes (sent only when on). diff --git a/.changeset/kanban-uncolumned-fallback.md b/.changeset/kanban-uncolumned-fallback.md deleted file mode 100644 index 11f8ee253..000000000 --- a/.changeset/kanban-uncolumned-fallback.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -"@object-ui/plugin-kanban": patch -"@object-ui/i18n": patch ---- - -fix(kanban): surface off-column records in an "Uncategorized" lane instead of dropping them (#2792) - -Records whose `groupBy` value matched no declared column were bucketed and then silently discarded — the board rendered empty while the list footer still counted the rows, so it read as data loss (a status the board doesn't render, an edited/removed picklist option, imported legacy data, or an empty value all triggered it). They now land in a trailing "Uncategorized" lane so no record is invisible and the visible card total reconciles with the record count. Dragging a card out of that lane into a real column repairs its status; the drag handler refuses to persist a move *into* the lane (its sentinel id is not a real option). Adds `kanban.uncategorized` to the en/zh bundles. diff --git a/.changeset/listview-sort-blank-repeater.md b/.changeset/listview-sort-blank-repeater.md deleted file mode 100644 index 95da12b2b..000000000 --- a/.changeset/listview-sort-blank-repeater.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -"@object-ui/app-shell": patch ---- - -fix(SchemaForm): render row sub-fields for `repeater` fields whose schema is a union (objectui#3379) - -In Edit View Config → Columns & Filters → Sort, "Add" produced an empty row -with no field picker or order dropdown. A View's `sort` prop is a -`z.union([z.string(), z.array(z.object({ field, order }))])`, so its JSONSchema -is `anyOf: [string, {field,order}[]]`. The SchemaForm repeater read -`schema.items` at the top level — which is `undefined` for a union — and -derived zero sub-fields. - -The repeater now resolves the union to its array branch and uses that branch's -`items` for both the derived field list and the per-row controls -(`pickSubSchema`). The legacy bare-string `sort` form remains valid in the spec -(its removal is a separate, deferred deprecation cycle); this is purely a -renderer fix. diff --git a/.changeset/naming-drift-dashboard-label-field-length.md b/.changeset/naming-drift-dashboard-label-field-length.md deleted file mode 100644 index 6edbad34d..000000000 --- a/.changeset/naming-drift-dashboard-label-field-length.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -"@object-ui/plugin-dashboard": patch -"@object-ui/fields": patch ---- - -fix: read spec-canonical keys for dashboard header title and field length rules - -Two naming-drift closeouts (framework#1878 / framework#1891): - -- `DashboardRenderer` header now falls back to the spec-canonical `label` when - the legacy `title` is absent (mirrors the `DashboardGridLayout` fallback from - #2666) — a spec-compliant dashboard gets its header title. -- Field validation rules now read the spec-canonical camelCase - `minLength`/`maxLength` (what the server record-validator enforces) with the - legacy snake_case `min_length`/`max_length` kept as fallback — authored - length constraints reach the client form. diff --git a/.changeset/record-detail-global-action-labels.md b/.changeset/record-detail-global-action-labels.md deleted file mode 100644 index fd02d9b3e..000000000 --- a/.changeset/record-detail-global-action-labels.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -"@object-ui/i18n": patch ---- - -fix(i18n): apply globalActions label overlays to actions surfaced on a record-detail action bar (objectui#3372) - -On a record-detail action bar the caller passes `objectDef.name` for **every** -action, so a `globalAction` surfaced there (e.g. `log_call`) looked up -`objects.._actions..label`, missed, and leaked the English -metadata literal ("Log a Call") instead of its `globalActions..label` -overlay ("记录通话"). Object-owned actions on the same bar translated fine, -which is what made the gap visible. - -`useObjectLabel()`'s action resolvers now mirror the canonical -`@objectstack/spec` resolver (`system/i18n-resolver.lookupActionField`): when an -action is object-scoped, the object key still wins, but `globalActions..*` -is consulted as a fallback before returning the literal. This applies uniformly -to `actionLabel`, `actionConfirm`, `actionSuccess`, `actionDescription`, -`actionResultDialog`, `actionParamText`, and `actionParamOptionLabel`, so a -globalAction resolves the same on a record-detail action bar as it does -everywhere else. App-namespace discovery also recognises a `globalActions`-only -bundle (one with no object/field entries). diff --git a/.changeset/remove-record-change-trap.md b/.changeset/remove-record-change-trap.md deleted file mode 100644 index ca6f2b517..000000000 --- a/.changeset/remove-record-change-trap.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -"@object-ui/app-shell": patch ---- - -fix(app-shell): remove the never-firing `record-change` option from the flow trigger picker (#3427) - -The Studio flow designer's start-node trigger picker offered "Record changed -(any)" (`record-change`), but the runtime routes it to the record-change trigger, -which maps it to no ObjectQL hook — so the flow binds yet **never fires**. Authoring -it produced a silently-dead flow. Removed the option (and dropped `record-change` -from the scope resolver's record/previous sets and the zh-CN labels). The common -"created or updated" case is covered by `record-after-write`; a companion -`@objectstack/lint` rule flags any hand-authored `record-change` at `os validate` -time. diff --git a/.changeset/retire-reportviewer-legacy-chart-fallback.md b/.changeset/retire-reportviewer-legacy-chart-fallback.md deleted file mode 100644 index 04d8a746d..000000000 --- a/.changeset/retire-reportviewer-legacy-chart-fallback.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -"@object-ui/types": minor -"@object-ui/plugin-report": minor -"@object-ui/app-shell": minor ---- - -feat(report)!: drop `SpecReportColumn`/`SpecReportGrouping` re-exports + retire the legacy ReportViewer chart fallback (#3463) - -Cross-repo close-out of the ADR-0021 report cleanup (framework #3463). Upstream -`@objectstack/spec` removed the dead `ReportColumnSchema` / `ReportGroupingSchema` -and the unread report `chart.groupBy`; this drops their objectui mirrors and the -now-orphaned legacy report chart path. - -- **types**: removed the `SpecReportColumn` / `SpecReportColumnInput` / - `SpecReportGrouping` / `SpecReportGroupingInput` type re-exports and the - `SpecReportColumnSchema` / `SpecReportGroupingSchema` value re-exports from - `@object-ui/types` (they aliased the deleted upstream symbols). The live - report shape is dataset-bound — `SpecReport` with `dataset` + `values` - (measure names) + `rows` / `columns` (dimension names). -- **app-shell**: `ReportView` now renders every report through the spec - `ReportRenderer` dispatcher (dataset → `DatasetReportRenderer`, stored pre-9.0 - JSON → presentation bridge, pre-spec `{ data, columns }` → `LegacyReportRenderer`). - Deleted the `ReportViewer` last-resort branch, the `mapReportForViewer` - spec→legacy chart-section adapter (the sole producer of `xAxisField` / - `yAxisFields`), and the now-dead data-fetch loading flag. No shipped report - metadata reached the removed branch — the Studio inspector only ever writes - the dataset-bound shape. -- **plugin-report**: removed the `ReportViewer` chart-section branch. It read - the invented `xAxisField` / `yAxisFields` (never the spec's `xAxis` / `yAxis`) - and was only fed by the deleted `mapReportForViewer`. `ReportViewer` itself is - retained — its table / summary / text sections still back the `report-viewer` - registered component and the pre-9.0 presentation bridge. - -**Migration**: nothing an author writes changes. TypeScript consumers importing -`SpecReportColumn*` / `SpecReportGrouping*` from `@object-ui/types` have no -replacement type — model report columns as the dataset's measure names and -grouping as its dimension names. diff --git a/.changeset/search-page-record-hits.md b/.changeset/search-page-record-hits.md deleted file mode 100644 index 28f91fc5d..000000000 --- a/.changeset/search-page-record-hits.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -"@object-ui/app-shell": patch ---- - -The full-page search (`/apps/:app/search`) now surfaces record hits, not just -metadata nav items. - -Following the ⌘K command-palette fix (#3371), the search results page was still -matching only navigation entries (objects, dashboards, pages, reports). It now -runs the same global record search (`useRecordSearch` → `/api/v1/search`), -scoped to the app's searchable objects, and renders the record hits grouped by -object above the metadata matches. Both the search page and the palette now -resolve each object group's heading through the i18n label resolver, so -localized object labels display correctly instead of falling back to the raw -object name. diff --git a/.changeset/studio-searchable-toggle.md b/.changeset/studio-searchable-toggle.md deleted file mode 100644 index d7f56e388..000000000 --- a/.changeset/studio-searchable-toggle.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -"@object-ui/app-shell": minor ---- - -feat(studio): surface the `enable.searchable` toggle in ObjectSettingsPanel (#2800) - -`enable.searchable` was corrected to LIVE during framework#2377 (the Global -Search executor gates on it — explicit `false` opts the object out of -cross-object search), making it the only live `enable.*` flag the Studio -settings panel did not expose. It now renders as an opt-out toggle (default -on) alongside feeds/activities/clone, with en + zh labels that point -field-level match configuration at `searchableFields` (ADR-0061) to avoid -conflating the two. diff --git a/.changeset/surface-dropped-fields-warnings.md b/.changeset/surface-dropped-fields-warnings.md deleted file mode 100644 index b2ab25fab..000000000 --- a/.changeset/surface-dropped-fields-warnings.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -"@object-ui/data-objectstack": minor -"@object-ui/app-shell": patch ---- - -feat(app-shell): toast when a save silently dropped read-only fields (framework #3431/#3455) - -The framework now reports fields it LEGALLY stripped from a write (a non-system -caller can't seed a `readonly` field, a `readonlyWhen` predicate locked it, …) -via a `droppedFields` payload on the create/update response. Previously the -console discarded it: a value the user typed into a locked field just vanished on -save with a success toast and no explanation. - -- **data-objectstack:** `ObjectStackAdapter` now emits a `WriteWarningEvent` - after a create/update whose response carried `droppedFields`, exposed through a - new `onWriteWarning(cb)` subscription (mirrors the existing `onMutation` bus). - Reads the field structurally, so an older client or a backend that never drops - is a no-op. New exported types: `WriteWarningEvent`, `WriteWarningListener`, - `DroppedFieldsEvent`. -- **app-shell:** `AdapterProvider` subscribes and raises a `toast.warning` - ("Some fields were not saved — the read-only field … could not be changed"), - so the strip is visible instead of silent. The write itself still succeeded; - status/behaviour are unchanged. diff --git a/apps/console/CHANGELOG.md b/apps/console/CHANGELOG.md index 4b0ba4c1a..13d5c7e2e 100644 --- a/apps/console/CHANGELOG.md +++ b/apps/console/CHANGELOG.md @@ -1,5 +1,45 @@ # @object-ui/console +## 17.0.0 + +### Patch Changes + +- 7cb199b: feat(approvals): label pending-approver chips with their group (objectui#2807) + + Follow-up to #2762 P1-2. The dedupe pass collapsed repeated "waiting on" + chips to one with a `×N` count, but couldn't say _which_ group (finance / + legal / …) each pending approver represented in a 会签 (per_group) request — + the data wasn't there. With the framework now emitting + `pending_approver_groups` (`@objectstack/plugin-approvals`), the drawer: + + - keys the chip collapse by **(name, group)** — the same person filling two + different groups stays two labeled chips (`Dev Admin · finance`, + `Dev Admin · legal`), while one group filled twice collapses to a single + chip with a count; + - renders the group as a muted `· ` sub-tag on the chip. + + Degrades cleanly: with no group data (non-`per_group`, or an older backend) + the key is the name alone, keeping the plain dedupe + `×N` behavior. + +- 20bd014: fix(approvals): Approval Center density + amount emphasis (#2762 P2) + + - **Column rebalance** — the inbox table gave five auto columns equal width, + leaving 审批事项 (Request) over-wide next to a cramped 状态 (Status). The + Record column (the primary content) now gets the widest share, Request a + moderate one, and Status/Submitted fixed widths so they never crowd. + - **Lead with the amount** — the drawer summary card now surfaces the + decision-critical amount as a filled figure at the top of the card instead + of burying it in the generic field grid (and drops it from that grid so it + shows once). + + Also verified two P2 items need no change: light mode already works — + `ConsoleShell` mounts `ThemeProvider defaultTheme="system"` (follows the OS + `prefers-color-scheme`) with a `ModeToggle`, and the page's own classes carry + full light/dark variants; and the queue already has a bulk approve/reject + toolbar for the select-all/per-row selection. + - @object-ui/react-runtime@17.0.0 + - @object-ui/sdui-parser@17.0.0 + ## 16.1.0 ### Patch Changes diff --git a/apps/console/package.json b/apps/console/package.json index 7d997b723..b495c56ac 100644 --- a/apps/console/package.json +++ b/apps/console/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/console", - "version": "16.1.0", + "version": "17.0.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 ee19451dd..026ca1ade 100644 --- a/packages/app-shell/CHANGELOG.md +++ b/packages/app-shell/CHANGELOG.md @@ -1,5 +1,352 @@ # @object-ui/app-shell — Changelog +## 17.0.0 + +### Minor Changes + +- 059a052: feat(report)!: drop `SpecReportColumn`/`SpecReportGrouping` re-exports + retire the legacy ReportViewer chart fallback (#3463) + + Cross-repo close-out of the ADR-0021 report cleanup (framework #3463). Upstream + `@objectstack/spec` removed the dead `ReportColumnSchema` / `ReportGroupingSchema` + and the unread report `chart.groupBy`; this drops their objectui mirrors and the + now-orphaned legacy report chart path. + + - **types**: removed the `SpecReportColumn` / `SpecReportColumnInput` / + `SpecReportGrouping` / `SpecReportGroupingInput` type re-exports and the + `SpecReportColumnSchema` / `SpecReportGroupingSchema` value re-exports from + `@object-ui/types` (they aliased the deleted upstream symbols). The live + report shape is dataset-bound — `SpecReport` with `dataset` + `values` + (measure names) + `rows` / `columns` (dimension names). + - **app-shell**: `ReportView` now renders every report through the spec + `ReportRenderer` dispatcher (dataset → `DatasetReportRenderer`, stored pre-9.0 + JSON → presentation bridge, pre-spec `{ data, columns }` → `LegacyReportRenderer`). + Deleted the `ReportViewer` last-resort branch, the `mapReportForViewer` + spec→legacy chart-section adapter (the sole producer of `xAxisField` / + `yAxisFields`), and the now-dead data-fetch loading flag. No shipped report + metadata reached the removed branch — the Studio inspector only ever writes + the dataset-bound shape. + - **plugin-report**: removed the `ReportViewer` chart-section branch. It read + the invented `xAxisField` / `yAxisFields` (never the spec's `xAxis` / `yAxis`) + and was only fed by the deleted `mapReportForViewer`. `ReportViewer` itself is + retained — its table / summary / text sections still back the `report-viewer` + registered component and the pre-9.0 presentation bridge. + + **Migration**: nothing an author writes changes. TypeScript consumers importing + `SpecReportColumn*` / `SpecReportGrouping*` from `@object-ui/types` have no + replacement type — model report columns as the dataset's measure names and + grouping as its dimension names. + +- 2600e01: feat(studio): surface the `enable.searchable` toggle in ObjectSettingsPanel (#2800) + + `enable.searchable` was corrected to LIVE during framework#2377 (the Global + Search executor gates on it — explicit `false` opts the object out of + cross-object search), making it the only live `enable.*` flag the Studio + settings panel did not expose. It now renders as an opt-out toggle (default + on) alongside feeds/activities/clone, with en + zh labels that point + field-level match configuration at `searchableFields` (ADR-0061) to avoid + conflating the two. + +### Patch Changes + +- 0b3be01: fix(app-shell): give inline `lookup` action params a real record picker (#3405) + + An action parameter declared inline as `{ name: 'inspector', type: 'lookup', +reference: 'sys_user' }` always rendered as a plain text input asking the user + to paste a record id (UUID) — a supervisor assigning an inspector had to go + find that person's UUID by hand, while the same reference field picks records + by name in the create/edit dialog. + + `paramToField()` degrades a picker param to text when it has no `referenceTo` + target, and `referenceTo` was only ever populated on the field-backed branch of + `resolveActionParams()`. The inline branch dropped the authored `reference` + key entirely (as did the spec schema, which stripped it as unknown), so an + inline picker could never reach `` no matter how it was authored. + + - `resolveActionParam()` now maps an inline `reference` onto `referenceTo` — on + the inline branch, on the missing-field fallback branch, and as an override + on the field-backed branch (matching how every other inline value overrides + the resolved field). + - The text degradation now warns in dev naming the offending param, since with + `@objectstack/spec` rejecting a targetless inline picker at parse time it + means the metadata is broken, not merely partial. + - The fallback's placeholder and help text no longer claim "a picker is coming + soon" — the picker has shipped, and the message now says the parameter has no + reference object configured. Updated across all 10 locales. + +- cc5eca9: fix(app-shell): map raw `sys_activity` rows before rendering the inbox Activity tab + + The top-bar inbox bell's Activity tab (`InboxPopover`) rendered blank rows — + only the relative time showed (`47m ·`), with the actor, summary, and object + name all missing. `AppHeader.fetchPresenceAndActivities` cast the raw + `sys_activity` rows straight to `ActivityItem` without renaming their fields, + so the popover read `a.user` / `a.description` / `a.objectName` while the rows + only carry plugin-audit's `actor_name` / `summary` / `object_name`. + + The rows are now mapped onto `ActivityItem` (with `type` normalization, a + `timestamp` fallback, and an empty-`summary` filter), mirroring the mapping in + `useHomeInbox` so the bell and the Home dashboard stay in sync. + +- de5e40c: fix(approvals): Approval Center UX pass — badge nowrap, approve confirm, decision progress bar, localized declared actions (#2762) + + - **Badge no longer stacks CJK text vertically (P0-1)** — `Badge` gains + `whitespace-nowrap` in its base variants (a badge is a single-line pill by + definition), and the inbox 状态 column gets a minimum width, so 待审批 can + never render as 待/审/批. + - **Quick Approve now confirms (P0-2)** — the row's right-edge ✓, the mobile + card button and the `a` keyboard shortcut all route through a confirmation + dialog before executing, mirroring the Reject flow; an irreversible decision + can no longer fire on a stray click. + - **Decision progress is visualized (P1-1)** — the drawer renders a segmented + progress bar (ARIA `progressbar`) for `decision_progress`, per-group chips + get an explicit unsatisfied ○ state next to the satisfied ✓, the eligible + approver count is spelled out, and the drawer pager now reads + "Request N of M" so it can't be misread as approval progress. + - **Declared action labels localize (P0-3)** — `DeclaredActionsBar` resolves + label / confirmText / successMessage through the `_actions..*` + translation convention (metadata literals as fallback), matching + ObjectView/RecordDetailView; with the `@objectstack/plugin-approvals` + bundle, the drawer shows 通过 / 拒绝 / 转签 instead of English in a zh-CN + workspace. New `approvalsInbox` keys shipped in all ten locales. + +- 1a03af6: fix(approvals): Approval Center triage + drawer readability pass (#2762 P1-2/P1-3/P1-4/P1-5/P2) + + - **Decision-relevant data in the queue (P1-3)** — list rows and mobile cards + now surface the request's amount/total inline (detected from the snapshot, + preferring the server-formatted `payload_display` value), so a reviewer can + triage without opening each request. A sort control adds "Oldest first" and + "Amount (high→low)" alongside the default newest-first. + - **Empty applicant column (P1-4)** — flow-/system-initiated requests (no human + submitter) now read "Flow-initiated" with a workflow icon instead of a bare + person icon + "—", in the desktop table, mobile card, and drawer. + - **Approver chips deduped (P1-2)** — a person filling more than one approver + slot rendered as N identical "Waiting on" chips; they collapse to one chip + with a ×N count, the tooltip keeping every underlying id. + - **Action hierarchy (P1-5)** — `DeclaredActionsBar` maps the spec action + `variant` enum onto the Button variants (`primary` → filled default, + `danger` → destructive), so the drawer's Approve stands out and Reject reads + as destructive once `@objectstack/plugin-approvals` declares them. + - **Label polish (P2)** — `owner_id`-style resolved lookup keys render as + "Owner", not the awkward "Owner Id", in the drawer summary. + + New `approvalsInbox` keys (`flowOrigin`, `sortBy`/`sortRecent`/`sortOldest`/ + `sortAmount`) added to all ten locales. + +- e56a9fd: fix(list): keep the injected `owner_id` out of the auto-generated list columns + + `ObjectView` renders an object's default "所有记录" tabular view (and prefills the + "Add View" dialog) from the object's field order when it declares no explicit + list view. Both paths carried their own name-based `SYSTEM_FIELDS` exclusion set + that — like the pre-#2702 lists in `ObjectGrid` / `InterfaceListPage` — never + listed `owner_id`. Because the framework's `applySystemFields` spreads its + injected system/audit/ownership fields to the FRONT of the field map and + `owner_id` is deliberately non-hidden and non-readonly (ownership is + reassignable), it leaked through as the leading, raw-id column on every object + without a declared list view (e.g. `showcase_invoice`), redundant with the + business `owner` (`Field.user`) column. + + Both paths now derive their columns through a single shared + `defaultListColumnsFromObject` helper that classifies system fields via the + `isSystemManagedField` helper from `@object-ui/types` (the same classifier + #2702 introduced) — branching on the spec `system` flag with a name-set + fallback that includes the ownership/tenancy FKs. Auto-derived lists lead with + business fields again and pick up future injected fields without editing a name + list. Closes #2777. + +- 4fc4b97: feat(app-shell): localize the automations flow designer & inspector (en-US + zh-CN) + + Comprehensive zh-CN localization of the metadata-admin automations surfaces — + the visual Flow designer, node/edge inspector, validation, and the shared editor + panels shown on the flow screen. Client-side per the platform's + `translateMetadataType` precedent; en-US is unchanged (every zh overlay falls + back to English, so unknown/plugin values are never hidden). + + - Flow designer: node palette (labels/hints/categories + Chinese search), canvas + chrome & tooltips, header pills incl. enum values, preview panels, run-history + & debug simulator, nested-region tray, and localized default labels for + newly-created nodes. + - Node & edge inspectors: config-field labels / help / options / column headers + for the full engine-published `configSchema` field set (loop + `indexVariable`/`maxIterations`, http `durable`/`signingSecret`, connector flat + ids, notify's config fields, …), keyed off the raw node type so aliased types + localize correctly. + - Structural + unknown-reference validation messages (canvas banner, Problems + panel, debug simulator) and the Problems-panel chrome. + - Generic `SchemaForm` enum-option / raw-field-label localization used on the + flow property form, plus the History / Audit / References / Layered-diff panels + and the force-save dialog shown on the flow screen. + +- 8ecf5a6: Command palette (⌘K) now surfaces record search hits from the platform's global + search endpoint (`GET /api/v1/search`). + + Previously the palette only ran a per-object `find({ $search })` fanout (the + metadata-driven ADR-0061 search), which misses records that only the global + search index knows about — so typing a well-known record name returned no + records even though `/api/v1/search` served them. `ObjectStackAdapter` now + exposes a `searchAll(query, { limit, objects })` method that calls the unified + endpoint, `useRecordSearch` prefers it when present (falling back to the fanout + otherwise), and the palette renders the resulting record hits grouped by object. + +- ba642f8: feat(app-shell): Studio flow start node offers a "Record created or updated" trigger (#3427) + + The record-change trigger now supports `record-after-write` (create OR update in + one flow), so the flow designer's start-node trigger picker offers a "Record + created or updated" option. Selecting it shows the Object and Entry-condition + fields, and the scope resolver puts both `record` and `previous` in scope for it + (`previous == null` is how an author branches the create leg) — mirroring the + runtime binding that fires the flow on both insert and update. + +- b821287: feat(studio): first-class `notify` flow node in the Studio palette + inspector + + The `notify` flow node (ADR-0012 — outbound notification via the messaging + service) is a live built-in with a server descriptor, but Studio had no static + palette entry or config editor for it: `fieldsForNodeType('notify')` returned + `[]`, so it was only authorable by hand-editing JSON or when the running engine + happened to publish its descriptor (framework#1878 / framework#1895). + + - Added `notify` to `NODE_PALETTE` (Integration), with a Bell icon and the + integration tone, canvas category, and a sensible default-config seed + (`channels: ['inbox']`). + - Added a `notify` entry to `FLOW_NODE_CONFIG` mirroring the built-in node's + descriptor keys: `recipients`/`channels` (stringList), `title`, `message` + (textarea), `topic`, `severity` (select info/warning/critical), and the + click-through target (`sourceObject`/`sourceId`/`url`) — all written under + `node.config`. + + Closes the last item of the designer-authoring-gaps issue (framework#1895). + Unit + DOM tested (palette entry, config field kinds/paths, no inspector + regression). A browser dogfood pass of authoring a notify node end-to-end is + recommended before merge. + +- ddea597: feat(app-shell): surface step warnings in the Flow Runs panel (#3407) + + The automation engine now attaches advisory `warnings[]` to a step whose write + was legally stripped by the data layer — an `update_record`/`create_record` + targeting a `readonly` / `readonlyWhen` field. The step still reports + `success` (the strip is legitimate semantics), so the run trace previously + looked like a clean 3ms success while the intended write never landed; the + only signal lived in the server WARN log. + + `FlowRunsPanel` now reads `step.warnings` and renders each one amber beneath + its step — with a ⚠ marker on the step row — **without** recoloring the + status. The dropped-write signal that #3407/#3413 plumbed from the data layer + into the run's step log now reaches the Studio, closing the observability loop + the author actually looks at. + +- 6dee2cb: feat(form): consume spec-aligned FormView buttons/defaults in ObjectForm + + The authored `@objectstack/spec` FormViewSchema carries structured + `buttons.{submit,cancel,reset}.{show,label}` and `defaults`, but the form + renderer only read the flat renderer-invented `showSubmit`/`submitText`/ + `showCancel`/`cancelText`/`showReset`/`initialValues`. That left the two spec + keys parsed-but-inert (ADR-0078) and stuck at `experimental` in the spec + liveness ledger. + + `ObjectForm` now folds the structured shape down onto those flat props inside + its existing normalization pass, so every entry path (ObjectView + drawer/modal/page, RecordFormPage) honors it. An explicitly-set flat key still + wins, so metadata authored against the deprecated flat keys is unchanged. + `ObjectView` and `RecordFormPage` forward `buttons`/`defaults` from the spec + form view. `ObjectFormSchema` gains the optional `buttons`/`defaults` fields. + + Refs objectstack-ai/objectstack#1894, objectstack-ai/objectstack#2998. + +- 66dbca5: fix(SchemaForm): render row sub-fields for `repeater` fields whose schema is a union (objectui#3379) + + In Edit View Config → Columns & Filters → Sort, "Add" produced an empty row + with no field picker or order dropdown. A View's `sort` prop is a + `z.union([z.string(), z.array(z.object({ field, order }))])`, so its JSONSchema + is `anyOf: [string, {field,order}[]]`. The SchemaForm repeater read + `schema.items` at the top level — which is `undefined` for a union — and + derived zero sub-fields. + + The repeater now resolves the union to its array branch and uses that branch's + `items` for both the derived field list and the per-row controls + (`pickSubSchema`). The legacy bare-string `sort` form remains valid in the spec + (its removal is a separate, deferred deprecation cycle); this is purely a + renderer fix. + +- 4dfd14f: fix(app-shell): remove the never-firing `record-change` option from the flow trigger picker (#3427) + + The Studio flow designer's start-node trigger picker offered "Record changed + (any)" (`record-change`), but the runtime routes it to the record-change trigger, + which maps it to no ObjectQL hook — so the flow binds yet **never fires**. Authoring + it produced a silently-dead flow. Removed the option (and dropped `record-change` + from the scope resolver's record/previous sets and the zh-CN labels). The common + "created or updated" case is covered by `record-after-write`; a companion + `@objectstack/lint` rule flags any hand-authored `record-change` at `os validate` + time. + +- 7e354e9: The full-page search (`/apps/:app/search`) now surfaces record hits, not just + metadata nav items. + + Following the ⌘K command-palette fix (#3371), the search results page was still + matching only navigation entries (objects, dashboards, pages, reports). It now + runs the same global record search (`useRecordSearch` → `/api/v1/search`), + scoped to the app's searchable objects, and renders the record hits grouped by + object above the metadata matches. Both the search page and the palette now + resolve each object group's heading through the i18n label resolver, so + localized object labels display correctly instead of falling back to the raw + object name. + +- d62fb1f: feat(app-shell): toast when a save silently dropped read-only fields (framework #3431/#3455) + + The framework now reports fields it LEGALLY stripped from a write (a non-system + caller can't seed a `readonly` field, a `readonlyWhen` predicate locked it, …) + via a `droppedFields` payload on the create/update response. Previously the + console discarded it: a value the user typed into a locked field just vanished on + save with a success toast and no explanation. + + - **data-objectstack:** `ObjectStackAdapter` now emits a `WriteWarningEvent` + after a create/update whose response carried `droppedFields`, exposed through a + new `onWriteWarning(cb)` subscription (mirrors the existing `onMutation` bus). + Reads the field structurally, so an older client or a backend that never drops + is a no-op. New exported types: `WriteWarningEvent`, `WriteWarningListener`, + `DroppedFieldsEvent`. + - **app-shell:** `AdapterProvider` subscribes and raises a `toast.warning` + ("Some fields were not saved — the read-only field … could not be changed"), + so the strip is visible instead of silent. The write itself still succeeded; + status/behaviour are unchanged. + +- Updated dependencies [0b3be01] +- Updated dependencies [de5e40c] +- Updated dependencies [1a03af6] +- Updated dependencies [8ecf5a6] +- Updated dependencies [8fb1295] +- Updated dependencies [c77108c] +- Updated dependencies [c19ac11] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [ba73a02] +- Updated dependencies [341bfb5] +- Updated dependencies [bb4aa25] +- Updated dependencies [059a052] +- Updated dependencies [d62fb1f] + - @object-ui/i18n@17.0.0 + - @object-ui/components@17.0.0 + - @object-ui/data-objectstack@17.0.0 + - @object-ui/react@17.0.0 + - @object-ui/types@17.0.0 + - @object-ui/plugin-form@17.0.0 + - @object-ui/plugin-view@17.0.0 + - @object-ui/plugin-grid@17.0.0 + - @object-ui/plugin-kanban@17.0.0 + - @object-ui/plugin-dashboard@17.0.0 + - @object-ui/fields@17.0.0 + - @object-ui/plugin-report@17.0.0 + - @object-ui/plugin-calendar@17.0.0 + - @object-ui/plugin-charts@17.0.0 + - @object-ui/plugin-designer@17.0.0 + - @object-ui/plugin-detail@17.0.0 + - @object-ui/plugin-list@17.0.0 + - @object-ui/layout@17.0.0 + - @object-ui/plugin-chatbot@17.0.0 + - @object-ui/plugin-editor@17.0.0 + - @object-ui/auth@17.0.0 + - @object-ui/collaboration@17.0.0 + - @object-ui/core@17.0.0 + - @object-ui/permissions@17.0.0 + - @object-ui/providers@17.0.0 + ## 16.1.0 ### Minor Changes diff --git a/packages/app-shell/package.json b/packages/app-shell/package.json index 10687593b..781607846 100644 --- a/packages/app-shell/package.json +++ b/packages/app-shell/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/app-shell", - "version": "16.1.0", + "version": "17.0.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 eebee6bda..e67b36ec4 100644 --- a/packages/auth/CHANGELOG.md +++ b/packages/auth/CHANGELOG.md @@ -1,5 +1,15 @@ # @object-ui/auth +## 17.0.0 + +### Patch Changes + +- Updated dependencies [8ecf5a6] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [059a052] + - @object-ui/types@17.0.0 + ## 16.1.0 ### Minor Changes diff --git a/packages/auth/package.json b/packages/auth/package.json index 6e1857011..3f53553f0 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/auth", - "version": "16.1.0", + "version": "17.0.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 c1c460ea3..99966750d 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,21 @@ # @object-ui/cli +## 17.0.0 + +### Patch Changes + +- Updated dependencies [de5e40c] +- Updated dependencies [8ecf5a6] +- Updated dependencies [8fb1295] +- Updated dependencies [c77108c] +- Updated dependencies [c19ac11] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [059a052] + - @object-ui/components@17.0.0 + - @object-ui/react@17.0.0 + - @object-ui/types@17.0.0 + ## 16.1.0 ### Patch Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index 2b3b96a4b..dea293fff 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/cli", - "version": "16.1.0", + "version": "17.0.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 5f91ea9d3..799614336 100644 --- a/packages/collaboration/CHANGELOG.md +++ b/packages/collaboration/CHANGELOG.md @@ -1,5 +1,15 @@ # @object-ui/collaboration +## 17.0.0 + +### Patch Changes + +- Updated dependencies [8ecf5a6] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [059a052] + - @object-ui/types@17.0.0 + ## 16.1.0 ### Patch Changes diff --git a/packages/collaboration/package.json b/packages/collaboration/package.json index 1ad8d9c68..c3a25a0c2 100644 --- a/packages/collaboration/package.json +++ b/packages/collaboration/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/collaboration", - "version": "16.1.0", + "version": "17.0.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 79a53f084..89ef9584e 100644 --- a/packages/components/CHANGELOG.md +++ b/packages/components/CHANGELOG.md @@ -1,5 +1,68 @@ # @object-ui/components +## 17.0.0 + +### Patch Changes + +- de5e40c: fix(approvals): Approval Center UX pass — badge nowrap, approve confirm, decision progress bar, localized declared actions (#2762) + + - **Badge no longer stacks CJK text vertically (P0-1)** — `Badge` gains + `whitespace-nowrap` in its base variants (a badge is a single-line pill by + definition), and the inbox 状态 column gets a minimum width, so 待审批 can + never render as 待/审/批. + - **Quick Approve now confirms (P0-2)** — the row's right-edge ✓, the mobile + card button and the `a` keyboard shortcut all route through a confirmation + dialog before executing, mirroring the Reject flow; an irreversible decision + can no longer fire on a stray click. + - **Decision progress is visualized (P1-1)** — the drawer renders a segmented + progress bar (ARIA `progressbar`) for `decision_progress`, per-group chips + get an explicit unsatisfied ○ state next to the satisfied ✓, the eligible + approver count is spelled out, and the drawer pager now reads + "Request N of M" so it can't be misread as approval progress. + - **Declared action labels localize (P0-3)** — `DeclaredActionsBar` resolves + label / confirmText / successMessage through the `_actions..*` + translation convention (metadata literals as fallback), matching + ObjectView/RecordDetailView; with the `@objectstack/plugin-approvals` + bundle, the drawer shows 通过 / 拒绝 / 转签 instead of English in a zh-CN + workspace. New `approvalsInbox` keys shipped in all ten locales. + +- 8fb1295: fix(data-table): keep the right-pinned action column HEADER sticky on horizontal scroll (objectui#2784) + + The row-actions column is pinned to the right edge by injecting `sticky right-0` + into the column's `className`, which reaches both the body cells and the header + cell. Body cells stayed pinned, but the header cell unconditionally appended a + `relative` position utility (it anchors the column-resize handle) — and since + `cn` is `tailwind-merge`, the later `relative` won over the injected `sticky`. + So the "操作" title scrolled away while its body cells stayed frozen. + + The header now detects a right-pinned column (its `className` carries + `sticky` + `right-0`), skips `relative` for it (a sticky cell is already its own + positioning context, so the `absolute` resize handle still anchors correctly), + and re-asserts `sticky right-0 z-20` after `col.className` so tailwind-merge + keeps the pin and it stacks above the body's pinned cells (z-10). Left-frozen + columns, the resize handle, and non-pinned columns are unaffected. + +- c19ac11: fix(form): scroll and focus the first errored field on an invalid submit (#2793) + + Submitting a form with a missing required field already toasts the offending field names (#2329), but in a long form the field itself stays off-screen, so the user still hunts for it. react-hook-form's native focus-on-error only reaches fields whose registered ref is a focusable native input — it silently no-ops for custom widgets (lookup / select / master-detail), which is exactly the reported case. The form renderer now disables RHF's unreliable `shouldFocusError` and, in its `onInvalid` handler, scrolls the first errored field (in visual/declared order) into view via its `data-field` wrapper and focuses a focusable control inside it — working for every field type. + +- Updated dependencies [0b3be01] +- Updated dependencies [de5e40c] +- Updated dependencies [1a03af6] +- Updated dependencies [8ecf5a6] +- Updated dependencies [c77108c] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [ba73a02] +- Updated dependencies [bb4aa25] +- Updated dependencies [059a052] + - @object-ui/i18n@17.0.0 + - @object-ui/react@17.0.0 + - @object-ui/types@17.0.0 + - @object-ui/core@17.0.0 + - @object-ui/react-runtime@17.0.0 + - @object-ui/sdui-parser@17.0.0 + ## 16.1.0 ### Patch Changes diff --git a/packages/components/package.json b/packages/components/package.json index 3fac67cea..ee995dfa1 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/components", - "version": "16.1.0", + "version": "17.0.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 61447f87f..9f3b26e70 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,5 +1,15 @@ # @object-ui/core +## 17.0.0 + +### Patch Changes + +- Updated dependencies [8ecf5a6] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [059a052] + - @object-ui/types@17.0.0 + ## 16.1.0 ### Minor Changes diff --git a/packages/core/package.json b/packages/core/package.json index 8b0bdc5d6..27d30af6d 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/core", - "version": "16.1.0", + "version": "17.0.0", "type": "module", "sideEffects": false, "license": "MIT", diff --git a/packages/create-plugin/CHANGELOG.md b/packages/create-plugin/CHANGELOG.md index b4a55c815..afa758393 100644 --- a/packages/create-plugin/CHANGELOG.md +++ b/packages/create-plugin/CHANGELOG.md @@ -1,5 +1,7 @@ # @object-ui/create-plugin +## 17.0.0 + ## 16.1.0 ## 16.0.0 diff --git a/packages/create-plugin/package.json b/packages/create-plugin/package.json index d2a50f7c5..b81483707 100644 --- a/packages/create-plugin/package.json +++ b/packages/create-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/create-plugin", - "version": "16.1.0", + "version": "17.0.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 558248a89..4494c7b68 100644 --- a/packages/data-objectstack/CHANGELOG.md +++ b/packages/data-objectstack/CHANGELOG.md @@ -1,5 +1,48 @@ # @object-ui/data-objectstack +## 17.0.0 + +### Minor Changes + +- d62fb1f: feat(app-shell): toast when a save silently dropped read-only fields (framework #3431/#3455) + + The framework now reports fields it LEGALLY stripped from a write (a non-system + caller can't seed a `readonly` field, a `readonlyWhen` predicate locked it, …) + via a `droppedFields` payload on the create/update response. Previously the + console discarded it: a value the user typed into a locked field just vanished on + save with a success toast and no explanation. + + - **data-objectstack:** `ObjectStackAdapter` now emits a `WriteWarningEvent` + after a create/update whose response carried `droppedFields`, exposed through a + new `onWriteWarning(cb)` subscription (mirrors the existing `onMutation` bus). + Reads the field structurally, so an older client or a backend that never drops + is a no-op. New exported types: `WriteWarningEvent`, `WriteWarningListener`, + `DroppedFieldsEvent`. + - **app-shell:** `AdapterProvider` subscribes and raises a `toast.warning` + ("Some fields were not saved — the read-only field … could not be changed"), + so the strip is visible instead of silent. The write itself still succeeded; + status/behaviour are unchanged. + +### Patch Changes + +- 8ecf5a6: Command palette (⌘K) now surfaces record search hits from the platform's global + search endpoint (`GET /api/v1/search`). + + Previously the palette only ran a per-object `find({ $search })` fanout (the + metadata-driven ADR-0061 search), which misses records that only the global + search index knows about — so typing a well-known record name returned no + records even though `/api/v1/search` served them. `ObjectStackAdapter` now + exposes a `searchAll(query, { limit, objects })` method that calls the unified + endpoint, `useRecordSearch` prefers it when present (falling back to the fanout + otherwise), and the palette renders the resulting record hits grouped by object. + +- Updated dependencies [8ecf5a6] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [059a052] + - @object-ui/types@17.0.0 + - @object-ui/core@17.0.0 + ## 16.1.0 ### Minor Changes diff --git a/packages/data-objectstack/package.json b/packages/data-objectstack/package.json index 9950ded8e..87f9c7847 100644 --- a/packages/data-objectstack/package.json +++ b/packages/data-objectstack/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/data-objectstack", - "version": "16.1.0", + "version": "17.0.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 084b19a52..10c0f9ad3 100644 --- a/packages/fields/CHANGELOG.md +++ b/packages/fields/CHANGELOG.md @@ -1,5 +1,40 @@ # @object-ui/fields +## 17.0.0 + +### Patch Changes + +- 341bfb5: fix: read spec-canonical keys for dashboard header title and field length rules + + Two naming-drift closeouts (framework#1878 / framework#1891): + + - `DashboardRenderer` header now falls back to the spec-canonical `label` when + the legacy `title` is absent (mirrors the `DashboardGridLayout` fallback from + #2666) — a spec-compliant dashboard gets its header title. + - Field validation rules now read the spec-canonical camelCase + `minLength`/`maxLength` (what the server record-validator enforces) with the + legacy snake_case `min_length`/`max_length` kept as fallback — authored + length constraints reach the client form. + +- Updated dependencies [0b3be01] +- Updated dependencies [de5e40c] +- Updated dependencies [1a03af6] +- Updated dependencies [8ecf5a6] +- Updated dependencies [8fb1295] +- Updated dependencies [c77108c] +- Updated dependencies [c19ac11] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [ba73a02] +- Updated dependencies [bb4aa25] +- Updated dependencies [059a052] + - @object-ui/i18n@17.0.0 + - @object-ui/components@17.0.0 + - @object-ui/react@17.0.0 + - @object-ui/types@17.0.0 + - @object-ui/core@17.0.0 + - @object-ui/providers@17.0.0 + ## 16.1.0 ### Minor Changes diff --git a/packages/fields/package.json b/packages/fields/package.json index 6021a8efb..1fec30b97 100644 --- a/packages/fields/package.json +++ b/packages/fields/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/fields", - "version": "16.1.0", + "version": "17.0.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 c541cbce8..7c2d500d8 100644 --- a/packages/i18n/CHANGELOG.md +++ b/packages/i18n/CHANGELOG.md @@ -1,5 +1,102 @@ # @object-ui/i18n +## 17.0.0 + +### Patch Changes + +- 0b3be01: fix(app-shell): give inline `lookup` action params a real record picker (#3405) + + An action parameter declared inline as `{ name: 'inspector', type: 'lookup', +reference: 'sys_user' }` always rendered as a plain text input asking the user + to paste a record id (UUID) — a supervisor assigning an inspector had to go + find that person's UUID by hand, while the same reference field picks records + by name in the create/edit dialog. + + `paramToField()` degrades a picker param to text when it has no `referenceTo` + target, and `referenceTo` was only ever populated on the field-backed branch of + `resolveActionParams()`. The inline branch dropped the authored `reference` + key entirely (as did the spec schema, which stripped it as unknown), so an + inline picker could never reach `` no matter how it was authored. + + - `resolveActionParam()` now maps an inline `reference` onto `referenceTo` — on + the inline branch, on the missing-field fallback branch, and as an override + on the field-backed branch (matching how every other inline value overrides + the resolved field). + - The text degradation now warns in dev naming the offending param, since with + `@objectstack/spec` rejecting a targetless inline picker at parse time it + means the metadata is broken, not merely partial. + - The fallback's placeholder and help text no longer claim "a picker is coming + soon" — the picker has shipped, and the message now says the parameter has no + reference object configured. Updated across all 10 locales. + +- de5e40c: fix(approvals): Approval Center UX pass — badge nowrap, approve confirm, decision progress bar, localized declared actions (#2762) + + - **Badge no longer stacks CJK text vertically (P0-1)** — `Badge` gains + `whitespace-nowrap` in its base variants (a badge is a single-line pill by + definition), and the inbox 状态 column gets a minimum width, so 待审批 can + never render as 待/审/批. + - **Quick Approve now confirms (P0-2)** — the row's right-edge ✓, the mobile + card button and the `a` keyboard shortcut all route through a confirmation + dialog before executing, mirroring the Reject flow; an irreversible decision + can no longer fire on a stray click. + - **Decision progress is visualized (P1-1)** — the drawer renders a segmented + progress bar (ARIA `progressbar`) for `decision_progress`, per-group chips + get an explicit unsatisfied ○ state next to the satisfied ✓, the eligible + approver count is spelled out, and the drawer pager now reads + "Request N of M" so it can't be misread as approval progress. + - **Declared action labels localize (P0-3)** — `DeclaredActionsBar` resolves + label / confirmText / successMessage through the `_actions..*` + translation convention (metadata literals as fallback), matching + ObjectView/RecordDetailView; with the `@objectstack/plugin-approvals` + bundle, the drawer shows 通过 / 拒绝 / 转签 instead of English in a zh-CN + workspace. New `approvalsInbox` keys shipped in all ten locales. + +- 1a03af6: fix(approvals): Approval Center triage + drawer readability pass (#2762 P1-2/P1-3/P1-4/P1-5/P2) + + - **Decision-relevant data in the queue (P1-3)** — list rows and mobile cards + now surface the request's amount/total inline (detected from the snapshot, + preferring the server-formatted `payload_display` value), so a reviewer can + triage without opening each request. A sort control adds "Oldest first" and + "Amount (high→low)" alongside the default newest-first. + - **Empty applicant column (P1-4)** — flow-/system-initiated requests (no human + submitter) now read "Flow-initiated" with a workflow icon instead of a bare + person icon + "—", in the desktop table, mobile card, and drawer. + - **Approver chips deduped (P1-2)** — a person filling more than one approver + slot rendered as N identical "Waiting on" chips; they collapse to one chip + with a ×N count, the tooltip keeping every underlying id. + - **Action hierarchy (P1-5)** — `DeclaredActionsBar` maps the spec action + `variant` enum onto the Button variants (`primary` → filled default, + `danger` → destructive), so the drawer's Approve stands out and Reject reads + as destructive once `@objectstack/plugin-approvals` declares them. + - **Label polish (P2)** — `owner_id`-style resolved lookup keys render as + "Owner", not the awkward "Owner Id", in the drawer summary. + + New `approvalsInbox` keys (`flowOrigin`, `sortBy`/`sortRecent`/`sortOldest`/ + `sortAmount`) added to all ten locales. + +- ba73a02: fix(kanban): surface off-column records in an "Uncategorized" lane instead of dropping them (#2792) + + Records whose `groupBy` value matched no declared column were bucketed and then silently discarded — the board rendered empty while the list footer still counted the rows, so it read as data loss (a status the board doesn't render, an edited/removed picklist option, imported legacy data, or an empty value all triggered it). They now land in a trailing "Uncategorized" lane so no record is invisible and the visible card total reconciles with the record count. Dragging a card out of that lane into a real column repairs its status; the drag handler refuses to persist a move _into_ the lane (its sentinel id is not a real option). Adds `kanban.uncategorized` to the en/zh bundles. + +- bb4aa25: fix(i18n): apply globalActions label overlays to actions surfaced on a record-detail action bar (objectui#3372) + + On a record-detail action bar the caller passes `objectDef.name` for **every** + action, so a `globalAction` surfaced there (e.g. `log_call`) looked up + `objects.._actions..label`, missed, and leaked the English + metadata literal ("Log a Call") instead of its `globalActions..label` + overlay ("记录通话"). Object-owned actions on the same bar translated fine, + which is what made the gap visible. + + `useObjectLabel()`'s action resolvers now mirror the canonical + `@objectstack/spec` resolver (`system/i18n-resolver.lookupActionField`): when an + action is object-scoped, the object key still wins, but `globalActions..*` + is consulted as a fallback before returning the literal. This applies uniformly + to `actionLabel`, `actionConfirm`, `actionSuccess`, `actionDescription`, + `actionResultDialog`, `actionParamText`, and `actionParamOptionLabel`, so a + globalAction resolves the same on a record-detail action bar as it does + everywhere else. App-namespace discovery also recognises a `globalActions`-only + bundle (one with no object/field entries). + ## 16.1.0 ### Minor Changes diff --git a/packages/i18n/package.json b/packages/i18n/package.json index f54dc222e..4a3a8bd53 100644 --- a/packages/i18n/package.json +++ b/packages/i18n/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/i18n", - "version": "16.1.0", + "version": "17.0.0", "type": "module", "sideEffects": false, "license": "MIT", diff --git a/packages/layout/CHANGELOG.md b/packages/layout/CHANGELOG.md index 06d9a3001..b51f5dd7c 100644 --- a/packages/layout/CHANGELOG.md +++ b/packages/layout/CHANGELOG.md @@ -1,5 +1,22 @@ # @object-ui/layout +## 17.0.0 + +### Patch Changes + +- Updated dependencies [de5e40c] +- Updated dependencies [8ecf5a6] +- Updated dependencies [8fb1295] +- Updated dependencies [c77108c] +- Updated dependencies [c19ac11] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [059a052] + - @object-ui/components@17.0.0 + - @object-ui/react@17.0.0 + - @object-ui/types@17.0.0 + - @object-ui/core@17.0.0 + ## 16.1.0 ### Patch Changes diff --git a/packages/layout/package.json b/packages/layout/package.json index d96b12e1f..dcd6e93a5 100644 --- a/packages/layout/package.json +++ b/packages/layout/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/layout", - "version": "16.1.0", + "version": "17.0.0", "type": "module", "sideEffects": false, "main": "dist/index.umd.cjs", diff --git a/packages/mobile/CHANGELOG.md b/packages/mobile/CHANGELOG.md index 8a23979c2..80a886f81 100644 --- a/packages/mobile/CHANGELOG.md +++ b/packages/mobile/CHANGELOG.md @@ -1,5 +1,15 @@ # @object-ui/mobile +## 17.0.0 + +### Patch Changes + +- Updated dependencies [8ecf5a6] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [059a052] + - @object-ui/types@17.0.0 + ## 16.1.0 ### Patch Changes diff --git a/packages/mobile/package.json b/packages/mobile/package.json index 126504d31..eacfbe4eb 100644 --- a/packages/mobile/package.json +++ b/packages/mobile/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/mobile", - "version": "16.1.0", + "version": "17.0.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 96ebe3d1c..2cf37f67a 100644 --- a/packages/permissions/CHANGELOG.md +++ b/packages/permissions/CHANGELOG.md @@ -1,5 +1,15 @@ # @object-ui/permissions +## 17.0.0 + +### Patch Changes + +- Updated dependencies [8ecf5a6] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [059a052] + - @object-ui/types@17.0.0 + ## 16.1.0 ### Patch Changes diff --git a/packages/permissions/package.json b/packages/permissions/package.json index bf78f1b39..78c748721 100644 --- a/packages/permissions/package.json +++ b/packages/permissions/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/permissions", - "version": "16.1.0", + "version": "17.0.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 5d9622336..b262d5e38 100644 --- a/packages/plugin-ai/CHANGELOG.md +++ b/packages/plugin-ai/CHANGELOG.md @@ -1,5 +1,22 @@ # @object-ui/plugin-ai +## 17.0.0 + +### Patch Changes + +- Updated dependencies [de5e40c] +- Updated dependencies [8ecf5a6] +- Updated dependencies [8fb1295] +- Updated dependencies [c77108c] +- Updated dependencies [c19ac11] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [059a052] + - @object-ui/components@17.0.0 + - @object-ui/react@17.0.0 + - @object-ui/types@17.0.0 + - @object-ui/core@17.0.0 + ## 16.1.0 ### Patch Changes diff --git a/packages/plugin-ai/package.json b/packages/plugin-ai/package.json index 6836a2b25..a43a18fae 100644 --- a/packages/plugin-ai/package.json +++ b/packages/plugin-ai/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-ai", - "version": "16.1.0", + "version": "17.0.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 c7ffb4f23..5f079f52f 100644 --- a/packages/plugin-calendar/CHANGELOG.md +++ b/packages/plugin-calendar/CHANGELOG.md @@ -1,5 +1,31 @@ # @object-ui/plugin-calendar +## 17.0.0 + +### Patch Changes + +- Updated dependencies [0b3be01] +- Updated dependencies [de5e40c] +- Updated dependencies [1a03af6] +- Updated dependencies [8ecf5a6] +- Updated dependencies [8fb1295] +- Updated dependencies [c77108c] +- Updated dependencies [c19ac11] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [ba73a02] +- Updated dependencies [341bfb5] +- Updated dependencies [bb4aa25] +- Updated dependencies [059a052] + - @object-ui/i18n@17.0.0 + - @object-ui/components@17.0.0 + - @object-ui/react@17.0.0 + - @object-ui/types@17.0.0 + - @object-ui/fields@17.0.0 + - @object-ui/plugin-detail@17.0.0 + - @object-ui/core@17.0.0 + - @object-ui/mobile@17.0.0 + ## 16.1.0 ### Patch Changes diff --git a/packages/plugin-calendar/package.json b/packages/plugin-calendar/package.json index 0c32f13d6..adbc4e776 100644 --- a/packages/plugin-calendar/package.json +++ b/packages/plugin-calendar/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-calendar", - "version": "16.1.0", + "version": "17.0.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 e46a208e4..5e4a6b250 100644 --- a/packages/plugin-charts/CHANGELOG.md +++ b/packages/plugin-charts/CHANGELOG.md @@ -1,5 +1,27 @@ # @object-ui/plugin-charts +## 17.0.0 + +### Patch Changes + +- Updated dependencies [0b3be01] +- Updated dependencies [de5e40c] +- Updated dependencies [1a03af6] +- Updated dependencies [8ecf5a6] +- Updated dependencies [8fb1295] +- Updated dependencies [c77108c] +- Updated dependencies [c19ac11] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [ba73a02] +- Updated dependencies [bb4aa25] +- Updated dependencies [059a052] + - @object-ui/i18n@17.0.0 + - @object-ui/components@17.0.0 + - @object-ui/react@17.0.0 + - @object-ui/types@17.0.0 + - @object-ui/core@17.0.0 + ## 16.1.0 ### Patch Changes diff --git a/packages/plugin-charts/package.json b/packages/plugin-charts/package.json index 513ef9f6f..e6a83931b 100644 --- a/packages/plugin-charts/package.json +++ b/packages/plugin-charts/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-charts", - "version": "16.1.0", + "version": "17.0.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 ae4e4ba65..a754abb90 100644 --- a/packages/plugin-chatbot/CHANGELOG.md +++ b/packages/plugin-chatbot/CHANGELOG.md @@ -1,5 +1,22 @@ # @object-ui/plugin-chatbot +## 17.0.0 + +### Patch Changes + +- Updated dependencies [de5e40c] +- Updated dependencies [8ecf5a6] +- Updated dependencies [8fb1295] +- Updated dependencies [c77108c] +- Updated dependencies [c19ac11] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [059a052] + - @object-ui/components@17.0.0 + - @object-ui/react@17.0.0 + - @object-ui/types@17.0.0 + - @object-ui/core@17.0.0 + ## 16.1.0 ### Patch Changes diff --git a/packages/plugin-chatbot/package.json b/packages/plugin-chatbot/package.json index 71c023726..0febaf5a0 100644 --- a/packages/plugin-chatbot/package.json +++ b/packages/plugin-chatbot/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-chatbot", - "version": "16.1.0", + "version": "17.0.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 6debbe522..14ab0e5e7 100644 --- a/packages/plugin-dashboard/CHANGELOG.md +++ b/packages/plugin-dashboard/CHANGELOG.md @@ -1,5 +1,41 @@ # @object-ui/plugin-dashboard +## 17.0.0 + +### Patch Changes + +- 341bfb5: fix: read spec-canonical keys for dashboard header title and field length rules + + Two naming-drift closeouts (framework#1878 / framework#1891): + + - `DashboardRenderer` header now falls back to the spec-canonical `label` when + the legacy `title` is absent (mirrors the `DashboardGridLayout` fallback from + #2666) — a spec-compliant dashboard gets its header title. + - Field validation rules now read the spec-canonical camelCase + `minLength`/`maxLength` (what the server record-validator enforces) with the + legacy snake_case `min_length`/`max_length` kept as fallback — authored + length constraints reach the client form. + +- Updated dependencies [0b3be01] +- Updated dependencies [de5e40c] +- Updated dependencies [1a03af6] +- Updated dependencies [8ecf5a6] +- Updated dependencies [8fb1295] +- Updated dependencies [c77108c] +- Updated dependencies [c19ac11] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [ba73a02] +- Updated dependencies [341bfb5] +- Updated dependencies [bb4aa25] +- Updated dependencies [059a052] + - @object-ui/i18n@17.0.0 + - @object-ui/components@17.0.0 + - @object-ui/react@17.0.0 + - @object-ui/types@17.0.0 + - @object-ui/fields@17.0.0 + - @object-ui/core@17.0.0 + ## 16.1.0 ### Minor Changes diff --git a/packages/plugin-dashboard/package.json b/packages/plugin-dashboard/package.json index db78f3a00..e31f19241 100644 --- a/packages/plugin-dashboard/package.json +++ b/packages/plugin-dashboard/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-dashboard", - "version": "16.1.0", + "version": "17.0.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 7716768c8..529fbc094 100644 --- a/packages/plugin-designer/CHANGELOG.md +++ b/packages/plugin-designer/CHANGELOG.md @@ -1,5 +1,33 @@ # @object-ui/plugin-designer +## 17.0.0 + +### Patch Changes + +- Updated dependencies [0b3be01] +- Updated dependencies [de5e40c] +- Updated dependencies [1a03af6] +- Updated dependencies [8ecf5a6] +- Updated dependencies [8fb1295] +- Updated dependencies [c77108c] +- Updated dependencies [c19ac11] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [ba73a02] +- Updated dependencies [341bfb5] +- Updated dependencies [bb4aa25] +- Updated dependencies [059a052] +- Updated dependencies [d62fb1f] + - @object-ui/i18n@17.0.0 + - @object-ui/components@17.0.0 + - @object-ui/data-objectstack@17.0.0 + - @object-ui/react@17.0.0 + - @object-ui/types@17.0.0 + - @object-ui/plugin-form@17.0.0 + - @object-ui/plugin-grid@17.0.0 + - @object-ui/fields@17.0.0 + - @object-ui/core@17.0.0 + ## 16.1.0 ### Minor Changes diff --git a/packages/plugin-designer/package.json b/packages/plugin-designer/package.json index ab794b4e6..d092c4290 100644 --- a/packages/plugin-designer/package.json +++ b/packages/plugin-designer/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-designer", - "version": "16.1.0", + "version": "17.0.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 2b1f4405f..74bf6d803 100644 --- a/packages/plugin-detail/CHANGELOG.md +++ b/packages/plugin-detail/CHANGELOG.md @@ -1,5 +1,30 @@ # @object-ui/plugin-detail +## 17.0.0 + +### Patch Changes + +- Updated dependencies [0b3be01] +- Updated dependencies [de5e40c] +- Updated dependencies [1a03af6] +- Updated dependencies [8ecf5a6] +- Updated dependencies [8fb1295] +- Updated dependencies [c77108c] +- Updated dependencies [c19ac11] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [ba73a02] +- Updated dependencies [341bfb5] +- Updated dependencies [bb4aa25] +- Updated dependencies [059a052] + - @object-ui/i18n@17.0.0 + - @object-ui/components@17.0.0 + - @object-ui/react@17.0.0 + - @object-ui/types@17.0.0 + - @object-ui/fields@17.0.0 + - @object-ui/core@17.0.0 + - @object-ui/permissions@17.0.0 + ## 16.1.0 ### Minor Changes diff --git a/packages/plugin-detail/package.json b/packages/plugin-detail/package.json index a4a199a0e..afaa7ba44 100644 --- a/packages/plugin-detail/package.json +++ b/packages/plugin-detail/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-detail", - "version": "16.1.0", + "version": "17.0.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 3a0ef98c4..1e5b379a0 100644 --- a/packages/plugin-editor/CHANGELOG.md +++ b/packages/plugin-editor/CHANGELOG.md @@ -1,5 +1,22 @@ # @object-ui/plugin-editor +## 17.0.0 + +### Patch Changes + +- Updated dependencies [de5e40c] +- Updated dependencies [8ecf5a6] +- Updated dependencies [8fb1295] +- Updated dependencies [c77108c] +- Updated dependencies [c19ac11] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [059a052] + - @object-ui/components@17.0.0 + - @object-ui/react@17.0.0 + - @object-ui/types@17.0.0 + - @object-ui/core@17.0.0 + ## 16.1.0 ### Patch Changes diff --git a/packages/plugin-editor/package.json b/packages/plugin-editor/package.json index a4294fdd9..9f192bc4e 100644 --- a/packages/plugin-editor/package.json +++ b/packages/plugin-editor/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-editor", - "version": "16.1.0", + "version": "17.0.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 55703a2ab..65e7fdd3a 100644 --- a/packages/plugin-form/CHANGELOG.md +++ b/packages/plugin-form/CHANGELOG.md @@ -1,5 +1,48 @@ # @object-ui/plugin-form +## 17.0.0 + +### Patch Changes + +- 6dee2cb: feat(form): consume spec-aligned FormView buttons/defaults in ObjectForm + + The authored `@objectstack/spec` FormViewSchema carries structured + `buttons.{submit,cancel,reset}.{show,label}` and `defaults`, but the form + renderer only read the flat renderer-invented `showSubmit`/`submitText`/ + `showCancel`/`cancelText`/`showReset`/`initialValues`. That left the two spec + keys parsed-but-inert (ADR-0078) and stuck at `experimental` in the spec + liveness ledger. + + `ObjectForm` now folds the structured shape down onto those flat props inside + its existing normalization pass, so every entry path (ObjectView + drawer/modal/page, RecordFormPage) honors it. An explicitly-set flat key still + wins, so metadata authored against the deprecated flat keys is unchanged. + `ObjectView` and `RecordFormPage` forward `buttons`/`defaults` from the spec + form view. `ObjectFormSchema` gains the optional `buttons`/`defaults` fields. + + Refs objectstack-ai/objectstack#1894, objectstack-ai/objectstack#2998. + +- Updated dependencies [0b3be01] +- Updated dependencies [de5e40c] +- Updated dependencies [1a03af6] +- Updated dependencies [8ecf5a6] +- Updated dependencies [8fb1295] +- Updated dependencies [c77108c] +- Updated dependencies [c19ac11] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [ba73a02] +- Updated dependencies [341bfb5] +- Updated dependencies [bb4aa25] +- Updated dependencies [059a052] + - @object-ui/i18n@17.0.0 + - @object-ui/components@17.0.0 + - @object-ui/react@17.0.0 + - @object-ui/types@17.0.0 + - @object-ui/fields@17.0.0 + - @object-ui/core@17.0.0 + - @object-ui/permissions@17.0.0 + ## 16.1.0 ### Minor Changes diff --git a/packages/plugin-form/package.json b/packages/plugin-form/package.json index c561983c4..4a827261d 100644 --- a/packages/plugin-form/package.json +++ b/packages/plugin-form/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-form", - "version": "16.1.0", + "version": "17.0.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 3b4e96cb4..72c8de799 100644 --- a/packages/plugin-gantt/CHANGELOG.md +++ b/packages/plugin-gantt/CHANGELOG.md @@ -1,5 +1,30 @@ # @object-ui/plugin-gantt +## 17.0.0 + +### Patch Changes + +- Updated dependencies [0b3be01] +- Updated dependencies [de5e40c] +- Updated dependencies [1a03af6] +- Updated dependencies [8ecf5a6] +- Updated dependencies [8fb1295] +- Updated dependencies [c77108c] +- Updated dependencies [c19ac11] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [ba73a02] +- Updated dependencies [341bfb5] +- Updated dependencies [bb4aa25] +- Updated dependencies [059a052] + - @object-ui/i18n@17.0.0 + - @object-ui/components@17.0.0 + - @object-ui/react@17.0.0 + - @object-ui/types@17.0.0 + - @object-ui/fields@17.0.0 + - @object-ui/plugin-detail@17.0.0 + - @object-ui/core@17.0.0 + ## 16.1.0 ### Patch Changes diff --git a/packages/plugin-gantt/package.json b/packages/plugin-gantt/package.json index d48ddb234..6f3d3843b 100644 --- a/packages/plugin-gantt/package.json +++ b/packages/plugin-gantt/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-gantt", - "version": "16.1.0", + "version": "17.0.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 d288f70a1..b4f9d0970 100644 --- a/packages/plugin-grid/CHANGELOG.md +++ b/packages/plugin-grid/CHANGELOG.md @@ -1,5 +1,42 @@ # @object-ui/plugin-grid +## 17.0.0 + +### Patch Changes + +- c7cff19: feat(plugin-grid): "Import as historical data" option in the Import Wizard (framework #3479) + + Adds a checkbox to the Import Wizard's options panel that sends `treatAsHistorical` + on the import request. When on, the server skips the object's `state_machine` rule so + mid-lifecycle rows — a batch of already-`closed` tickets, `closed_won` deals — aren't + rejected by `initialStates`. Off by default: a normal import still walks the FSM, so + the exemption is always an explicit opt-in. + + Pairs with the framework side (objectstack #3483). `ImportRequestOptions.treatAsHistorical` + is added to `@object-ui/types`, and `assembleImportRequest` threads it through both the + inline and named-mapping request shapes (sent only when on). + +- Updated dependencies [0b3be01] +- Updated dependencies [de5e40c] +- Updated dependencies [1a03af6] +- Updated dependencies [8ecf5a6] +- Updated dependencies [8fb1295] +- Updated dependencies [c77108c] +- Updated dependencies [c19ac11] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [ba73a02] +- Updated dependencies [341bfb5] +- Updated dependencies [bb4aa25] +- Updated dependencies [059a052] + - @object-ui/i18n@17.0.0 + - @object-ui/components@17.0.0 + - @object-ui/react@17.0.0 + - @object-ui/types@17.0.0 + - @object-ui/fields@17.0.0 + - @object-ui/core@17.0.0 + - @object-ui/mobile@17.0.0 + ## 16.1.0 ### Patch Changes diff --git a/packages/plugin-grid/package.json b/packages/plugin-grid/package.json index 0e1dc4cce..a733d0cb8 100644 --- a/packages/plugin-grid/package.json +++ b/packages/plugin-grid/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-grid", - "version": "16.1.0", + "version": "17.0.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 e5903516e..831801af4 100644 --- a/packages/plugin-kanban/CHANGELOG.md +++ b/packages/plugin-kanban/CHANGELOG.md @@ -1,5 +1,34 @@ # @object-ui/plugin-kanban +## 17.0.0 + +### Patch Changes + +- ba73a02: fix(kanban): surface off-column records in an "Uncategorized" lane instead of dropping them (#2792) + + Records whose `groupBy` value matched no declared column were bucketed and then silently discarded — the board rendered empty while the list footer still counted the rows, so it read as data loss (a status the board doesn't render, an edited/removed picklist option, imported legacy data, or an empty value all triggered it). They now land in a trailing "Uncategorized" lane so no record is invisible and the visible card total reconciles with the record count. Dragging a card out of that lane into a real column repairs its status; the drag handler refuses to persist a move _into_ the lane (its sentinel id is not a real option). Adds `kanban.uncategorized` to the en/zh bundles. + +- Updated dependencies [0b3be01] +- Updated dependencies [de5e40c] +- Updated dependencies [1a03af6] +- Updated dependencies [8ecf5a6] +- Updated dependencies [8fb1295] +- Updated dependencies [c77108c] +- Updated dependencies [c19ac11] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [ba73a02] +- Updated dependencies [341bfb5] +- Updated dependencies [bb4aa25] +- Updated dependencies [059a052] + - @object-ui/i18n@17.0.0 + - @object-ui/components@17.0.0 + - @object-ui/react@17.0.0 + - @object-ui/types@17.0.0 + - @object-ui/fields@17.0.0 + - @object-ui/plugin-detail@17.0.0 + - @object-ui/core@17.0.0 + ## 16.1.0 ### Patch Changes diff --git a/packages/plugin-kanban/package.json b/packages/plugin-kanban/package.json index ce5040f1a..92576df0e 100644 --- a/packages/plugin-kanban/package.json +++ b/packages/plugin-kanban/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-kanban", - "version": "16.1.0", + "version": "17.0.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 9a241414e..39ac06991 100644 --- a/packages/plugin-list/CHANGELOG.md +++ b/packages/plugin-list/CHANGELOG.md @@ -1,5 +1,31 @@ # @object-ui/plugin-list +## 17.0.0 + +### Patch Changes + +- Updated dependencies [0b3be01] +- Updated dependencies [de5e40c] +- Updated dependencies [1a03af6] +- Updated dependencies [8ecf5a6] +- Updated dependencies [8fb1295] +- Updated dependencies [c77108c] +- Updated dependencies [c19ac11] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [ba73a02] +- Updated dependencies [341bfb5] +- Updated dependencies [bb4aa25] +- Updated dependencies [059a052] + - @object-ui/i18n@17.0.0 + - @object-ui/components@17.0.0 + - @object-ui/react@17.0.0 + - @object-ui/types@17.0.0 + - @object-ui/fields@17.0.0 + - @object-ui/core@17.0.0 + - @object-ui/mobile@17.0.0 + - @object-ui/permissions@17.0.0 + ## 16.1.0 ### Patch Changes diff --git a/packages/plugin-list/package.json b/packages/plugin-list/package.json index 6c0b779ef..fbc74bb1b 100644 --- a/packages/plugin-list/package.json +++ b/packages/plugin-list/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-list", - "version": "16.1.0", + "version": "17.0.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 5b48be24a..b6123b958 100644 --- a/packages/plugin-map/CHANGELOG.md +++ b/packages/plugin-map/CHANGELOG.md @@ -1,5 +1,22 @@ # @object-ui/plugin-map +## 17.0.0 + +### Patch Changes + +- Updated dependencies [de5e40c] +- Updated dependencies [8ecf5a6] +- Updated dependencies [8fb1295] +- Updated dependencies [c77108c] +- Updated dependencies [c19ac11] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [059a052] + - @object-ui/components@17.0.0 + - @object-ui/react@17.0.0 + - @object-ui/types@17.0.0 + - @object-ui/core@17.0.0 + ## 16.1.0 ### Patch Changes diff --git a/packages/plugin-map/package.json b/packages/plugin-map/package.json index 3058f9a2d..883c42399 100644 --- a/packages/plugin-map/package.json +++ b/packages/plugin-map/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-map", - "version": "16.1.0", + "version": "17.0.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 5166f5482..7b0651956 100644 --- a/packages/plugin-markdown/CHANGELOG.md +++ b/packages/plugin-markdown/CHANGELOG.md @@ -1,5 +1,22 @@ # @object-ui/plugin-markdown +## 17.0.0 + +### Patch Changes + +- Updated dependencies [de5e40c] +- Updated dependencies [8ecf5a6] +- Updated dependencies [8fb1295] +- Updated dependencies [c77108c] +- Updated dependencies [c19ac11] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [059a052] + - @object-ui/components@17.0.0 + - @object-ui/react@17.0.0 + - @object-ui/types@17.0.0 + - @object-ui/core@17.0.0 + ## 16.1.0 ### Patch Changes diff --git a/packages/plugin-markdown/package.json b/packages/plugin-markdown/package.json index a1669aded..b211e1b14 100644 --- a/packages/plugin-markdown/package.json +++ b/packages/plugin-markdown/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-markdown", - "version": "16.1.0", + "version": "17.0.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 1a8b06a24..3439831ab 100644 --- a/packages/plugin-report/CHANGELOG.md +++ b/packages/plugin-report/CHANGELOG.md @@ -1,5 +1,64 @@ # @object-ui/plugin-report +## 17.0.0 + +### Minor Changes + +- 059a052: feat(report)!: drop `SpecReportColumn`/`SpecReportGrouping` re-exports + retire the legacy ReportViewer chart fallback (#3463) + + Cross-repo close-out of the ADR-0021 report cleanup (framework #3463). Upstream + `@objectstack/spec` removed the dead `ReportColumnSchema` / `ReportGroupingSchema` + and the unread report `chart.groupBy`; this drops their objectui mirrors and the + now-orphaned legacy report chart path. + + - **types**: removed the `SpecReportColumn` / `SpecReportColumnInput` / + `SpecReportGrouping` / `SpecReportGroupingInput` type re-exports and the + `SpecReportColumnSchema` / `SpecReportGroupingSchema` value re-exports from + `@object-ui/types` (they aliased the deleted upstream symbols). The live + report shape is dataset-bound — `SpecReport` with `dataset` + `values` + (measure names) + `rows` / `columns` (dimension names). + - **app-shell**: `ReportView` now renders every report through the spec + `ReportRenderer` dispatcher (dataset → `DatasetReportRenderer`, stored pre-9.0 + JSON → presentation bridge, pre-spec `{ data, columns }` → `LegacyReportRenderer`). + Deleted the `ReportViewer` last-resort branch, the `mapReportForViewer` + spec→legacy chart-section adapter (the sole producer of `xAxisField` / + `yAxisFields`), and the now-dead data-fetch loading flag. No shipped report + metadata reached the removed branch — the Studio inspector only ever writes + the dataset-bound shape. + - **plugin-report**: removed the `ReportViewer` chart-section branch. It read + the invented `xAxisField` / `yAxisFields` (never the spec's `xAxis` / `yAxis`) + and was only fed by the deleted `mapReportForViewer`. `ReportViewer` itself is + retained — its table / summary / text sections still back the `report-viewer` + registered component and the pre-9.0 presentation bridge. + + **Migration**: nothing an author writes changes. TypeScript consumers importing + `SpecReportColumn*` / `SpecReportGrouping*` from `@object-ui/types` have no + replacement type — model report columns as the dataset's measure names and + grouping as its dimension names. + +### Patch Changes + +- Updated dependencies [0b3be01] +- Updated dependencies [de5e40c] +- Updated dependencies [1a03af6] +- Updated dependencies [8ecf5a6] +- Updated dependencies [8fb1295] +- Updated dependencies [c77108c] +- Updated dependencies [c19ac11] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [ba73a02] +- Updated dependencies [341bfb5] +- Updated dependencies [bb4aa25] +- Updated dependencies [059a052] + - @object-ui/i18n@17.0.0 + - @object-ui/components@17.0.0 + - @object-ui/react@17.0.0 + - @object-ui/types@17.0.0 + - @object-ui/plugin-grid@17.0.0 + - @object-ui/fields@17.0.0 + - @object-ui/core@17.0.0 + ## 16.1.0 ### Minor Changes diff --git a/packages/plugin-report/package.json b/packages/plugin-report/package.json index b0e2609ce..74d7fc767 100644 --- a/packages/plugin-report/package.json +++ b/packages/plugin-report/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-report", - "version": "16.1.0", + "version": "17.0.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 af0c80d02..1a9a7f03d 100644 --- a/packages/plugin-timeline/CHANGELOG.md +++ b/packages/plugin-timeline/CHANGELOG.md @@ -1,5 +1,23 @@ # @object-ui/plugin-timeline +## 17.0.0 + +### Patch Changes + +- Updated dependencies [de5e40c] +- Updated dependencies [8ecf5a6] +- Updated dependencies [8fb1295] +- Updated dependencies [c77108c] +- Updated dependencies [c19ac11] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [059a052] + - @object-ui/components@17.0.0 + - @object-ui/react@17.0.0 + - @object-ui/types@17.0.0 + - @object-ui/core@17.0.0 + - @object-ui/mobile@17.0.0 + ## 16.1.0 ### Patch Changes diff --git a/packages/plugin-timeline/package.json b/packages/plugin-timeline/package.json index d14cc2d3c..0fa30a78e 100644 --- a/packages/plugin-timeline/package.json +++ b/packages/plugin-timeline/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-timeline", - "version": "16.1.0", + "version": "17.0.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 ae155253f..3e4b0b178 100644 --- a/packages/plugin-tree/CHANGELOG.md +++ b/packages/plugin-tree/CHANGELOG.md @@ -1,5 +1,22 @@ # @object-ui/plugin-tree +## 17.0.0 + +### Patch Changes + +- Updated dependencies [de5e40c] +- Updated dependencies [8ecf5a6] +- Updated dependencies [8fb1295] +- Updated dependencies [c77108c] +- Updated dependencies [c19ac11] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [059a052] + - @object-ui/components@17.0.0 + - @object-ui/react@17.0.0 + - @object-ui/types@17.0.0 + - @object-ui/core@17.0.0 + ## 16.1.0 ### Patch Changes diff --git a/packages/plugin-tree/package.json b/packages/plugin-tree/package.json index ae09185a5..db070b2fa 100644 --- a/packages/plugin-tree/package.json +++ b/packages/plugin-tree/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-tree", - "version": "16.1.0", + "version": "17.0.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 e09a5032f..7c11387c7 100644 --- a/packages/plugin-view/CHANGELOG.md +++ b/packages/plugin-view/CHANGELOG.md @@ -1,5 +1,47 @@ # @object-ui/plugin-view +## 17.0.0 + +### Patch Changes + +- 6dee2cb: feat(form): consume spec-aligned FormView buttons/defaults in ObjectForm + + The authored `@objectstack/spec` FormViewSchema carries structured + `buttons.{submit,cancel,reset}.{show,label}` and `defaults`, but the form + renderer only read the flat renderer-invented `showSubmit`/`submitText`/ + `showCancel`/`cancelText`/`showReset`/`initialValues`. That left the two spec + keys parsed-but-inert (ADR-0078) and stuck at `experimental` in the spec + liveness ledger. + + `ObjectForm` now folds the structured shape down onto those flat props inside + its existing normalization pass, so every entry path (ObjectView + drawer/modal/page, RecordFormPage) honors it. An explicitly-set flat key still + wins, so metadata authored against the deprecated flat keys is unchanged. + `ObjectView` and `RecordFormPage` forward `buttons`/`defaults` from the spec + form view. `ObjectFormSchema` gains the optional `buttons`/`defaults` fields. + + Refs objectstack-ai/objectstack#1894, objectstack-ai/objectstack#2998. + +- Updated dependencies [0b3be01] +- Updated dependencies [de5e40c] +- Updated dependencies [1a03af6] +- Updated dependencies [8ecf5a6] +- Updated dependencies [8fb1295] +- Updated dependencies [c77108c] +- Updated dependencies [c19ac11] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [ba73a02] +- Updated dependencies [bb4aa25] +- Updated dependencies [059a052] + - @object-ui/i18n@17.0.0 + - @object-ui/components@17.0.0 + - @object-ui/react@17.0.0 + - @object-ui/types@17.0.0 + - @object-ui/plugin-form@17.0.0 + - @object-ui/plugin-grid@17.0.0 + - @object-ui/core@17.0.0 + ## 16.1.0 ### Patch Changes diff --git a/packages/plugin-view/package.json b/packages/plugin-view/package.json index c36083d35..7b5639345 100644 --- a/packages/plugin-view/package.json +++ b/packages/plugin-view/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/plugin-view", - "version": "16.1.0", + "version": "17.0.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 7cdb7826d..a3b142f42 100644 --- a/packages/providers/CHANGELOG.md +++ b/packages/providers/CHANGELOG.md @@ -1,5 +1,15 @@ # @object-ui/providers — Changelog +## 17.0.0 + +### Patch Changes + +- Updated dependencies [8ecf5a6] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [059a052] + - @object-ui/types@17.0.0 + ## 16.1.0 ### Patch Changes diff --git a/packages/providers/package.json b/packages/providers/package.json index f4788d67f..f3a9b227f 100644 --- a/packages/providers/package.json +++ b/packages/providers/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/providers", - "version": "16.1.0", + "version": "17.0.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 228be0958..ecf7a8ba6 100644 --- a/packages/react-runtime/CHANGELOG.md +++ b/packages/react-runtime/CHANGELOG.md @@ -1,5 +1,7 @@ # @object-ui/react-runtime +## 17.0.0 + ## 16.1.0 ## 16.0.0 diff --git a/packages/react-runtime/package.json b/packages/react-runtime/package.json index afc95c635..b834f49e5 100644 --- a/packages/react-runtime/package.json +++ b/packages/react-runtime/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/react-runtime", - "version": "16.1.0", + "version": "17.0.0", "type": "module", "sideEffects": false, "license": "MIT", diff --git a/packages/react/CHANGELOG.md b/packages/react/CHANGELOG.md index f908ebb6d..a93b6a005 100644 --- a/packages/react/CHANGELOG.md +++ b/packages/react/CHANGELOG.md @@ -1,5 +1,56 @@ # @object-ui/react +## 17.0.0 + +### Major Changes + +- c77108c: refactor(spec-bridge): remove the dead page/dashboard bridges (#1892) + + `SpecBridge`'s `page` and `dashboard` bridges — `bridgePage`, `bridgeDashboard`, + and the `SpecBridge#transformPage` / `#transformDashboard` methods — had no + runtime consumer. Pages render through their own renderer and dashboards + through `DashboardView → DashboardRenderer → DatasetWidget` (ADR-0021); neither + path routes through `SpecBridge`. The dashboard bridge's input shape + (`object` / `categoryField` / `valueField` / `aggregate`) is the pre-ADR-0021 + widget model, which the strict `DashboardWidgetSchema` now rejects — so the + bridge could not receive a spec-valid dashboard even in principle. + + Flagged dead by the metadata-liveness audit (framework #1878 / #1892). The + `list` and `form` bridges are unaffected and remain the live authoring path. + + BREAKING CHANGE: the public exports `bridgePage`, `bridgeDashboard`, and the + `SpecBridge#transformPage` / `#transformDashboard` methods are removed. There + is no replacement — render pages and dashboards through their renderers + (`DashboardRenderer` / the page renderer) directly. + +### Patch Changes + +- 8ecf5a6: Command palette (⌘K) now surfaces record search hits from the platform's global + search endpoint (`GET /api/v1/search`). + + Previously the palette only ran a per-object `find({ $search })` fanout (the + metadata-driven ADR-0061 search), which misses records that only the global + search index knows about — so typing a well-known record name returned no + records even though `/api/v1/search` served them. `ObjectStackAdapter` now + exposes a `searchAll(query, { limit, objects })` method that calls the unified + endpoint, `useRecordSearch` prefers it when present (falling back to the fanout + otherwise), and the palette renders the resulting record hits grouped by object. + +- Updated dependencies [0b3be01] +- Updated dependencies [de5e40c] +- Updated dependencies [1a03af6] +- Updated dependencies [8ecf5a6] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [ba73a02] +- Updated dependencies [bb4aa25] +- Updated dependencies [059a052] +- Updated dependencies [d62fb1f] + - @object-ui/i18n@17.0.0 + - @object-ui/data-objectstack@17.0.0 + - @object-ui/types@17.0.0 + - @object-ui/core@17.0.0 + ## 16.1.0 ### Minor Changes diff --git a/packages/react/package.json b/packages/react/package.json index e85c98f9f..38b25e987 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/react", - "version": "16.1.0", + "version": "17.0.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 f899738b5..98d1be29e 100644 --- a/packages/runner/CHANGELOG.md +++ b/packages/runner/CHANGELOG.md @@ -1,5 +1,25 @@ # @object-ui/runner +## 17.0.0 + +### Patch Changes + +- Updated dependencies [de5e40c] +- Updated dependencies [8ecf5a6] +- Updated dependencies [8fb1295] +- Updated dependencies [c77108c] +- Updated dependencies [c19ac11] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [ba73a02] +- Updated dependencies [059a052] + - @object-ui/components@17.0.0 + - @object-ui/react@17.0.0 + - @object-ui/types@17.0.0 + - @object-ui/plugin-kanban@17.0.0 + - @object-ui/plugin-charts@17.0.0 + - @object-ui/core@17.0.0 + ## 16.1.0 ### Minor Changes diff --git a/packages/runner/package.json b/packages/runner/package.json index c93224792..dfe39a032 100644 --- a/packages/runner/package.json +++ b/packages/runner/package.json @@ -1,7 +1,7 @@ { "name": "@object-ui/runner", "private": false, - "version": "16.1.0", + "version": "17.0.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 491672488..2f4b778be 100644 --- a/packages/sdui-parser/CHANGELOG.md +++ b/packages/sdui-parser/CHANGELOG.md @@ -1,5 +1,7 @@ # @object-ui/sdui-parser +## 17.0.0 + ## 16.1.0 ## 16.0.0 diff --git a/packages/sdui-parser/package.json b/packages/sdui-parser/package.json index 1a83bb20a..2fad2afc4 100644 --- a/packages/sdui-parser/package.json +++ b/packages/sdui-parser/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/sdui-parser", - "version": "16.1.0", + "version": "17.0.0", "type": "module", "sideEffects": false, "license": "MIT", diff --git a/packages/types/CHANGELOG.md b/packages/types/CHANGELOG.md index 1a20624ff..d08a79d3d 100644 --- a/packages/types/CHANGELOG.md +++ b/packages/types/CHANGELOG.md @@ -1,5 +1,84 @@ # @object-ui/types +## 17.0.0 + +### Minor Changes + +- 059a052: feat(report)!: drop `SpecReportColumn`/`SpecReportGrouping` re-exports + retire the legacy ReportViewer chart fallback (#3463) + + Cross-repo close-out of the ADR-0021 report cleanup (framework #3463). Upstream + `@objectstack/spec` removed the dead `ReportColumnSchema` / `ReportGroupingSchema` + and the unread report `chart.groupBy`; this drops their objectui mirrors and the + now-orphaned legacy report chart path. + + - **types**: removed the `SpecReportColumn` / `SpecReportColumnInput` / + `SpecReportGrouping` / `SpecReportGroupingInput` type re-exports and the + `SpecReportColumnSchema` / `SpecReportGroupingSchema` value re-exports from + `@object-ui/types` (they aliased the deleted upstream symbols). The live + report shape is dataset-bound — `SpecReport` with `dataset` + `values` + (measure names) + `rows` / `columns` (dimension names). + - **app-shell**: `ReportView` now renders every report through the spec + `ReportRenderer` dispatcher (dataset → `DatasetReportRenderer`, stored pre-9.0 + JSON → presentation bridge, pre-spec `{ data, columns }` → `LegacyReportRenderer`). + Deleted the `ReportViewer` last-resort branch, the `mapReportForViewer` + spec→legacy chart-section adapter (the sole producer of `xAxisField` / + `yAxisFields`), and the now-dead data-fetch loading flag. No shipped report + metadata reached the removed branch — the Studio inspector only ever writes + the dataset-bound shape. + - **plugin-report**: removed the `ReportViewer` chart-section branch. It read + the invented `xAxisField` / `yAxisFields` (never the spec's `xAxis` / `yAxis`) + and was only fed by the deleted `mapReportForViewer`. `ReportViewer` itself is + retained — its table / summary / text sections still back the `report-viewer` + registered component and the pre-9.0 presentation bridge. + + **Migration**: nothing an author writes changes. TypeScript consumers importing + `SpecReportColumn*` / `SpecReportGrouping*` from `@object-ui/types` have no + replacement type — model report columns as the dataset's measure names and + grouping as its dimension names. + +### Patch Changes + +- 8ecf5a6: Command palette (⌘K) now surfaces record search hits from the platform's global + search endpoint (`GET /api/v1/search`). + + Previously the palette only ran a per-object `find({ $search })` fanout (the + metadata-driven ADR-0061 search), which misses records that only the global + search index knows about — so typing a well-known record name returned no + records even though `/api/v1/search` served them. `ObjectStackAdapter` now + exposes a `searchAll(query, { limit, objects })` method that calls the unified + endpoint, `useRecordSearch` prefers it when present (falling back to the fanout + otherwise), and the palette renders the resulting record hits grouped by object. + +- 6dee2cb: feat(form): consume spec-aligned FormView buttons/defaults in ObjectForm + + The authored `@objectstack/spec` FormViewSchema carries structured + `buttons.{submit,cancel,reset}.{show,label}` and `defaults`, but the form + renderer only read the flat renderer-invented `showSubmit`/`submitText`/ + `showCancel`/`cancelText`/`showReset`/`initialValues`. That left the two spec + keys parsed-but-inert (ADR-0078) and stuck at `experimental` in the spec + liveness ledger. + + `ObjectForm` now folds the structured shape down onto those flat props inside + its existing normalization pass, so every entry path (ObjectView + drawer/modal/page, RecordFormPage) honors it. An explicitly-set flat key still + wins, so metadata authored against the deprecated flat keys is unchanged. + `ObjectView` and `RecordFormPage` forward `buttons`/`defaults` from the spec + form view. `ObjectFormSchema` gains the optional `buttons`/`defaults` fields. + + Refs objectstack-ai/objectstack#1894, objectstack-ai/objectstack#2998. + +- c7cff19: feat(plugin-grid): "Import as historical data" option in the Import Wizard (framework #3479) + + Adds a checkbox to the Import Wizard's options panel that sends `treatAsHistorical` + on the import request. When on, the server skips the object's `state_machine` rule so + mid-lifecycle rows — a batch of already-`closed` tickets, `closed_won` deals — aren't + rejected by `initialStates`. Off by default: a normal import still walks the FSM, so + the exemption is always an explicit opt-in. + + Pairs with the framework side (objectstack #3483). `ImportRequestOptions.treatAsHistorical` + is added to `@object-ui/types`, and `assembleImportRequest` threads it through both the + inline and named-mapping request shapes (sent only when on). + ## 16.1.0 ### Minor Changes diff --git a/packages/types/package.json b/packages/types/package.json index 5ee500caf..56527bff0 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@object-ui/types", - "version": "16.1.0", + "version": "17.0.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 556eda5c7..45a332380 100644 --- a/packages/vscode-extension/CHANGELOG.md +++ b/packages/vscode-extension/CHANGELOG.md @@ -1,5 +1,16 @@ # Changelog +## 17.0.0 + +### Patch Changes + +- Updated dependencies [8ecf5a6] +- Updated dependencies [6dee2cb] +- Updated dependencies [c7cff19] +- Updated dependencies [059a052] + - @object-ui/types@17.0.0 + - @object-ui/core@17.0.0 + ## 16.1.0 ### Patch Changes diff --git a/packages/vscode-extension/package.json b/packages/vscode-extension/package.json index 64b21e738..c1836f180 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": "16.1.0", + "version": "17.0.0", "publisher": "objectui", "private": true, "icon": "icon.svg",