Skip to content

chore: release packages#1358

Closed
github-actions[bot] wants to merge 1 commit into
mainfrom
changeset-release/main
Closed

chore: release packages#1358
github-actions[bot] wants to merge 1 commit into
mainfrom
changeset-release/main

Conversation

@github-actions
Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot commented May 23, 2026

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@object-ui/app-shell@5.2.0

Minor Changes

  • 921bd28: Console now honors App.homePageId for the bare /console/apps/:appName
    landing route. Previously it always redirected to the first reachable nav
    item, so CRM-style apps with KPI dashboards still landed users on the
    first object list (e.g. Leads) rather than the configured home page.

    The new resolveLandingRoute looks up the homePageId nav item, builds
    its route (object / view / page / dashboard / report), and falls back to
    the existing findFirstRoute only when no homePageId is set or it
    resolves to a routeless item type.

Patch Changes

  • 9997cae: DataSource: add optional bulkUpdate(resource, ids, patch) for "same patch, many rows" interactions (Slack "mark all as read", Linear "archive selected"). The ObjectStack adapter routes to POST /api/v1/data/:object/updateMany so the client pays one HTTP/auth/RLS round-trip instead of N parallel PATCHes, eliminating mark-all-read jank on inboxes with 50+ unread.

    AppHeader's markAllRead now prefers bulkUpdate, with a transparent fallback to the per-id loop for adapters that don't implement the helper.

  • 5425608: CRM UX polish pass — calmer enterprise look across detail + kanban.

    • plugin-kanban: column headers now use a 2px muted accent stripe with
      neutral foreground titles + a quiet grey count pill instead of full
      rainbow gradient + colored title + colored count. Pipeline boards
      (Opportunity, Case, Task, Lead) look like Salesforce/Linear instead of
      a toy. WIP-limit overflow remains destructive-red so urgency stays loud.
    • plugin-detail (record:reference_rail): new hideEmpty prop
      (default true) collapses entries whose total === 0 into a single
      + N empty (Quotes · Products …) chip at the bottom of the rail.
      Removes the 4–7 "No records" stack that dominated the aside.
    • plugin-detail (record:path): completed stages now render with an
      emerald-tinted background + bold green check instead of low-contrast
      bg-muted text-muted-foreground (which read as "light grey on white"
      and was borderline unreadable).
    • app-shell (RecordDetailView): record-not-found short-circuit.
      Previously a stale/missing recordId still rendered the page chrome
      (rail, discussion, breadcrumb with the raw id), making invalid links
      look like a partially broken page. Now renders a clean centered
      Empty state with database icon + i18n'd "Record not found" copy.
    • i18n: added detail.showEmptyRelated_{one,other} and
      empty.recordNotFound{,Description} keys (en + zh).
  • 7c441f5: End-to-end @-mention notifications.

    @object-ui/plugin-detail now exports extractMentions(text, suggestions)
    — a small utility that resolves @<label> tokens in a comment body to
    user ids, using the same suggestion list that drives the in-editor
    dropdown. Handles labels with spaces ("@qa Test"), CJK ("@王小明"),
    longest-match disambiguation ("Anna Lee" wins over "Anna"), and ignores
    unknown @-tokens. 9 unit tests.

    @object-ui/app-shell RecordDetailView now:

    1. Serializes the resolved mention ids into sys_comment.mentions
      (previously hard-coded '[]', so servers had no idea who was being
      pinged).
    2. Fan-outs a sys_notification row per mentioned recipient
      (self-mentions are filtered as noise) with the canonical bell-inbox
      shape: type: 'mention', recipient_id, actor_name, title,
      body preview (≤140 chars), source_object/source_id/
      source_comment_id, is_read: false, created_at.

    The notification write tolerates 404 silently, so deployments without
    a notification collection degrade to the previous behavior (mention
    text + highlight, no inbox row). Spec-compliant servers that emit
    notifications via their own sys_comment after-create hook can ignore
    the client-side write — the bell de-dupes by id at the polling layer.

  • 072cad0: Always seed @-mention suggestions with the current user so the dropdown
    appears even when the backend has no sys_user directory (or the fetch
    fails). Hosts with a real user roster still get the merged list —
    current user first, then directory entries de-duped by id.

    Previously, typing @ in the discussion comment box was a no-op on
    example backends that don't serve sys_user, making the feature look
    broken. Authors can now at minimum mention themselves; richer rosters
    are merged in automatically when available.

  • Updated dependencies [9997cae]

  • Updated dependencies [a3cb88f]

  • Updated dependencies [5425608]

  • Updated dependencies [6c3f018]

  • Updated dependencies [d912a60]

  • Updated dependencies [e919433]

  • Updated dependencies [70b5570]

  • Updated dependencies [e7b6eae]

    • @object-ui/types@5.2.0
    • @object-ui/data-objectstack@5.2.0
    • @object-ui/i18n@5.2.0
    • @object-ui/fields@5.2.0
    • @object-ui/layout@5.2.0
    • @object-ui/auth@5.2.0
    • @object-ui/collaboration@5.2.0
    • @object-ui/components@5.2.0
    • @object-ui/core@5.2.0
    • @object-ui/permissions@5.2.0
    • @object-ui/providers@5.2.0
    • @object-ui/react@5.2.0

@object-ui/data-objectstack@5.2.0

Minor Changes

  • 9997cae: DataSource: add optional bulkUpdate(resource, ids, patch) for "same patch, many rows" interactions (Slack "mark all as read", Linear "archive selected"). The ObjectStack adapter routes to POST /api/v1/data/:object/updateMany so the client pays one HTTP/auth/RLS round-trip instead of N parallel PATCHes, eliminating mark-all-read jank on inboxes with 50+ unread.

    AppHeader's markAllRead now prefers bulkUpdate, with a transparent fallback to the per-id loop for adapters that don't implement the helper.

Patch Changes

  • Updated dependencies [9997cae]
  • Updated dependencies [70b5570]
    • @object-ui/types@5.2.0
    • @object-ui/core@5.2.0

@object-ui/layout@5.2.0

Minor Changes

  • e7b6eae: NavigationRenderer now resolves a group's initial open state with two
    platform-aware defaults:
    1. expanded field honored. @objectstack/spec AppNavigation
      uses expanded: true | false on group items; objectui historically
      only read defaultOpen. App authors who wrote expanded: false
      would see no effect because the renderer silently fell back to the
      "open unless defaultOpen === false" rule. Both field names now
      resolve to the same explicit override.
    2. Auto-collapse long groups. When the author has set neither
      expanded nor defaultOpen, groups with 8 or more direct
      children
      default to collapsed. Long sidebar sections (e.g. 10+
      reports) doubled the sidebar height and pushed siblings below the
      fold — Slack, Linear, and Notion all default-collapse oversized
      sections for the same reason. Short groups (typical 3–6 items) still
      open by default.
    3. Active-route override. Both heuristics are bypassed when the
      current route lives inside the group, so users never lose visual
      orientation to a hidden active item.

Patch Changes

  • Updated dependencies [9997cae]
  • Updated dependencies [70b5570]
    • @object-ui/types@5.2.0
    • @object-ui/components@5.2.0
    • @object-ui/core@5.2.0
    • @object-ui/react@5.2.0

@object-ui/plugin-detail@5.2.0

Minor Changes

  • 7c441f5: End-to-end @-mention notifications.

    @object-ui/plugin-detail now exports extractMentions(text, suggestions)
    — a small utility that resolves @<label> tokens in a comment body to
    user ids, using the same suggestion list that drives the in-editor
    dropdown. Handles labels with spaces ("@qa Test"), CJK ("@王小明"),
    longest-match disambiguation ("Anna Lee" wins over "Anna"), and ignores
    unknown @-tokens. 9 unit tests.

    @object-ui/app-shell RecordDetailView now:

    1. Serializes the resolved mention ids into sys_comment.mentions
      (previously hard-coded '[]', so servers had no idea who was being
      pinged).
    2. Fan-outs a sys_notification row per mentioned recipient
      (self-mentions are filtered as noise) with the canonical bell-inbox
      shape: type: 'mention', recipient_id, actor_name, title,
      body preview (≤140 chars), source_object/source_id/
      source_comment_id, is_read: false, created_at.

    The notification write tolerates 404 silently, so deployments without
    a notification collection degrade to the previous behavior (mention
    text + highlight, no inbox row). Spec-compliant servers that emit
    notifications via their own sys_comment after-create hook can ignore
    the client-side write — the bell de-dupes by id at the polling layer.

  • 70b5570: record:path now distinguishes won/lost terminal stages. Stages can opt
    in via the new terminal: 'won' | 'lost' property on each stage entry,
    and the renderer also falls back to a value/label heuristic (matches
    closed_lost, lost, failed, cancelled, 失败, 流失, 丢单, etc.)
    so existing CRM-style picklists get the treatment without migration.

    • Lost stages render in a visually separated group with a left
      border, destructive (red) tint, pill shape, and glyph — mirroring
      the Salesforce / HubSpot alt-terminus pattern that signals "this
      breaks the forward path, not steps past it."
    • Won terminus (the last stage of the forward chevron) gets a subtle
      emerald wash + 🏆 glyph to read as "the goal," even before the record
      reaches it.
    • Mobile pill row distinguishes lost via color, since the layout doesn't
      have room to fork the row.

Patch Changes

  • a3cb88f: CRM UX polish batch:

    • Kanban columns: drop the per-column rainbow top stripe. Lane border + header divider are sufficient; cards are now the loudest thing on screen (Linear / HubSpot pattern).
    • Stage chevron (record:path): bump completed-stage contrast (emerald-800 text on emerald-500/15, was 700 on /10) and future-stage text from foreground/70 to foreground/85 for legibility.
    • i18n: add notifications.emptyUnread, notifications.filterUnread, notifications.filterAll (en + zh) so the InboxPopover Unread/All sub-filter renders in the active locale.
  • 5425608: CRM UX polish pass — calmer enterprise look across detail + kanban.

    • plugin-kanban: column headers now use a 2px muted accent stripe with
      neutral foreground titles + a quiet grey count pill instead of full
      rainbow gradient + colored title + colored count. Pipeline boards
      (Opportunity, Case, Task, Lead) look like Salesforce/Linear instead of
      a toy. WIP-limit overflow remains destructive-red so urgency stays loud.
    • plugin-detail (record:reference_rail): new hideEmpty prop
      (default true) collapses entries whose total === 0 into a single
      + N empty (Quotes · Products …) chip at the bottom of the rail.
      Removes the 4–7 "No records" stack that dominated the aside.
    • plugin-detail (record:path): completed stages now render with an
      emerald-tinted background + bold green check instead of low-contrast
      bg-muted text-muted-foreground (which read as "light grey on white"
      and was borderline unreadable).
    • app-shell (RecordDetailView): record-not-found short-circuit.
      Previously a stale/missing recordId still rendered the page chrome
      (rail, discussion, breadcrumb with the raw id), making invalid links
      look like a partially broken page. Now renders a clean centered
      Empty state with database icon + i18n'd "Record not found" copy.
    • i18n: added detail.showEmptyRelated_{one,other} and
      empty.recordNotFound{,Description} keys (en + zh).
  • e919433: Stop silently assuming USD when a currency field has no currency
    configured. For non-USD orgs (e.g. a CNY-based CRM seeded without an
    explicit currency) the cells now render as plain locale-formatted
    numbers (150,000.00) instead of $150,000.00 — which was the Implement visual designer for Object UI schemas #1
    "why is my RMB showing as dollars?" bug.

    Behavior change is opt-in via omission: when currency /
    defaultCurrency is set on the field/column, formatting is unchanged.

    Fixed call sites:

    • @object-ui/fields: formatCurrency, formatCompactCurrency, and
      CurrencyCellRenderer no longer default-param 'USD'.
    • @object-ui/i18n: formatCurrency() falls back to formatNumber
      semantics when currency is omitted.
    • @object-ui/plugin-grid: column-summary formatter (Sum: 5,000,000
      instead of Sum: $5,000,000.00).
    • @object-ui/plugin-detail: header-highlight currency formatter.
    • @object-ui/plugin-dashboard: ObjectMetricWidget inferred
      currency now resolves to undefined (not 'USD') for un-tagged
      fields, so MetricWidget's isCurrency heuristic falls through
      to plain number formatting.

@object-ui/types@5.2.0

Minor Changes

  • 9997cae: DataSource: add optional bulkUpdate(resource, ids, patch) for "same patch, many rows" interactions (Slack "mark all as read", Linear "archive selected"). The ObjectStack adapter routes to POST /api/v1/data/:object/updateMany so the client pays one HTTP/auth/RLS round-trip instead of N parallel PATCHes, eliminating mark-all-read jank on inboxes with 50+ unread.

    AppHeader's markAllRead now prefers bulkUpdate, with a transparent fallback to the per-id loop for adapters that don't implement the helper.

  • 70b5570: record:path now distinguishes won/lost terminal stages. Stages can opt
    in via the new terminal: 'won' | 'lost' property on each stage entry,
    and the renderer also falls back to a value/label heuristic (matches
    closed_lost, lost, failed, cancelled, 失败, 流失, 丢单, etc.)
    so existing CRM-style picklists get the treatment without migration.

    • Lost stages render in a visually separated group with a left
      border, destructive (red) tint, pill shape, and glyph — mirroring
      the Salesforce / HubSpot alt-terminus pattern that signals "this
      breaks the forward path, not steps past it."
    • Won terminus (the last stage of the forward chevron) gets a subtle
      emerald wash + 🏆 glyph to read as "the goal," even before the record
      reaches it.
    • Mobile pill row distinguishes lost via color, since the layout doesn't
      have room to fork the row.

@object-ui/auth@5.2.0

Patch Changes

  • Updated dependencies [9997cae]
  • Updated dependencies [70b5570]
    • @object-ui/types@5.2.0

@object-ui/cli@5.2.0

Patch Changes

  • Updated dependencies [9997cae]
  • Updated dependencies [70b5570]
    • @object-ui/types@5.2.0
    • @object-ui/components@5.2.0
    • @object-ui/react@5.2.0

@object-ui/collaboration@5.2.0

Patch Changes

  • Updated dependencies [9997cae]
  • Updated dependencies [70b5570]
    • @object-ui/types@5.2.0

@object-ui/components@5.2.0

Patch Changes

  • Updated dependencies [9997cae]
  • Updated dependencies [a3cb88f]
  • Updated dependencies [5425608]
  • Updated dependencies [e919433]
  • Updated dependencies [70b5570]
    • @object-ui/types@5.2.0
    • @object-ui/i18n@5.2.0
    • @object-ui/core@5.2.0
    • @object-ui/react@5.2.0

@object-ui/core@5.2.0

Patch Changes

  • Updated dependencies [9997cae]
  • Updated dependencies [70b5570]
    • @object-ui/types@5.2.0

@object-ui/fields@5.2.0

Patch Changes

  • 6c3f018: CurrencyCellRenderer now reads the currency code from three locations
    in priority order: field.currency (legacy grid configs) →
    field.defaultCurrency (canonical top-level) →
    field.currencyConfig.defaultCurrency (nested shape emitted by
    @objectstack/spec Field.currency({ currencyConfig: ... })).

    Previously the renderer only checked the first two, so currency-type
    fields defined via the canonical spec helper rendered without their
    configured symbol. When none of the three is set, the cell still
    gracefully degrades to a plain formatted number — never silently
    assuming USD.

  • d912a60: CRM polish — denser kanban cards, smarter currency, calmer dates.

    • plugin-kanban card body: drop the verbose Label: value two-column
      grid in favor of a single-column dense list (values only, with the
      field label preserved as a hover title for accessibility). Pipeline
      cards across Salesforce / HubSpot / Linear all do this because the
      value's own type carries its meaning, and the saved space lets the
      title breathe.
    • fields/formatCurrency: drop trailing .00 when the value is a
      whole number (Salesforce convention: $1,234.50 keeps cents,
      $1,234 doesn't). Pipeline amounts like 500,000.00 now read as
      500,000.
    • fields/formatDate default branch: drop the year when it matches
      the current year — 7月21日 instead of 2026年7月21日. Past- and
      future-year dates keep the year for disambiguation
      (2025年11月23日).
    • fields/CurrencyCellRenderer: removed the now-redundant
      .replace(/[.,]00$/, '') workaround that hid cents for precision:0
      fields; the formatter now handles whole-unit trimming natively.
  • e919433: Stop silently assuming USD when a currency field has no currency
    configured. For non-USD orgs (e.g. a CNY-based CRM seeded without an
    explicit currency) the cells now render as plain locale-formatted
    numbers (150,000.00) instead of $150,000.00 — which was the Implement visual designer for Object UI schemas #1
    "why is my RMB showing as dollars?" bug.

    Behavior change is opt-in via omission: when currency /
    defaultCurrency is set on the field/column, formatting is unchanged.

    Fixed call sites:

    • @object-ui/fields: formatCurrency, formatCompactCurrency, and
      CurrencyCellRenderer no longer default-param 'USD'.
    • @object-ui/i18n: formatCurrency() falls back to formatNumber
      semantics when currency is omitted.
    • @object-ui/plugin-grid: column-summary formatter (Sum: 5,000,000
      instead of Sum: $5,000,000.00).
    • @object-ui/plugin-detail: header-highlight currency formatter.
    • @object-ui/plugin-dashboard: ObjectMetricWidget inferred
      currency now resolves to undefined (not 'USD') for un-tagged
      fields, so MetricWidget's isCurrency heuristic falls through
      to plain number formatting.
  • Updated dependencies [9997cae]

  • Updated dependencies [a3cb88f]

  • Updated dependencies [5425608]

  • Updated dependencies [e919433]

  • Updated dependencies [70b5570]

    • @object-ui/types@5.2.0
    • @object-ui/i18n@5.2.0
    • @object-ui/components@5.2.0
    • @object-ui/core@5.2.0
    • @object-ui/providers@5.2.0
    • @object-ui/react@5.2.0

@object-ui/i18n@5.2.0

Patch Changes

  • a3cb88f: CRM UX polish batch:

    • Kanban columns: drop the per-column rainbow top stripe. Lane border + header divider are sufficient; cards are now the loudest thing on screen (Linear / HubSpot pattern).
    • Stage chevron (record:path): bump completed-stage contrast (emerald-800 text on emerald-500/15, was 700 on /10) and future-stage text from foreground/70 to foreground/85 for legibility.
    • i18n: add notifications.emptyUnread, notifications.filterUnread, notifications.filterAll (en + zh) so the InboxPopover Unread/All sub-filter renders in the active locale.
  • 5425608: CRM UX polish pass — calmer enterprise look across detail + kanban.

    • plugin-kanban: column headers now use a 2px muted accent stripe with
      neutral foreground titles + a quiet grey count pill instead of full
      rainbow gradient + colored title + colored count. Pipeline boards
      (Opportunity, Case, Task, Lead) look like Salesforce/Linear instead of
      a toy. WIP-limit overflow remains destructive-red so urgency stays loud.
    • plugin-detail (record:reference_rail): new hideEmpty prop
      (default true) collapses entries whose total === 0 into a single
      + N empty (Quotes · Products …) chip at the bottom of the rail.
      Removes the 4–7 "No records" stack that dominated the aside.
    • plugin-detail (record:path): completed stages now render with an
      emerald-tinted background + bold green check instead of low-contrast
      bg-muted text-muted-foreground (which read as "light grey on white"
      and was borderline unreadable).
    • app-shell (RecordDetailView): record-not-found short-circuit.
      Previously a stale/missing recordId still rendered the page chrome
      (rail, discussion, breadcrumb with the raw id), making invalid links
      look like a partially broken page. Now renders a clean centered
      Empty state with database icon + i18n'd "Record not found" copy.
    • i18n: added detail.showEmptyRelated_{one,other} and
      empty.recordNotFound{,Description} keys (en + zh).
  • e919433: Stop silently assuming USD when a currency field has no currency
    configured. For non-USD orgs (e.g. a CNY-based CRM seeded without an
    explicit currency) the cells now render as plain locale-formatted
    numbers (150,000.00) instead of $150,000.00 — which was the Implement visual designer for Object UI schemas #1
    "why is my RMB showing as dollars?" bug.

    Behavior change is opt-in via omission: when currency /
    defaultCurrency is set on the field/column, formatting is unchanged.

    Fixed call sites:

    • @object-ui/fields: formatCurrency, formatCompactCurrency, and
      CurrencyCellRenderer no longer default-param 'USD'.
    • @object-ui/i18n: formatCurrency() falls back to formatNumber
      semantics when currency is omitted.
    • @object-ui/plugin-grid: column-summary formatter (Sum: 5,000,000
      instead of Sum: $5,000,000.00).
    • @object-ui/plugin-detail: header-highlight currency formatter.
    • @object-ui/plugin-dashboard: ObjectMetricWidget inferred
      currency now resolves to undefined (not 'USD') for un-tagged
      fields, so MetricWidget's isCurrency heuristic falls through
      to plain number formatting.

@object-ui/mobile@5.2.0

Patch Changes

  • Updated dependencies [9997cae]
  • Updated dependencies [70b5570]
    • @object-ui/types@5.2.0

@object-ui/permissions@5.2.0

Patch Changes

  • Updated dependencies [9997cae]
  • Updated dependencies [70b5570]
    • @object-ui/types@5.2.0

@object-ui/plugin-aggrid@5.2.0

Patch Changes

  • Updated dependencies [9997cae]
  • Updated dependencies [6c3f018]
  • Updated dependencies [d912a60]
  • Updated dependencies [e919433]
  • Updated dependencies [70b5570]
    • @object-ui/types@5.2.0
    • @object-ui/data-objectstack@5.2.0
    • @object-ui/fields@5.2.0
    • @object-ui/components@5.2.0
    • @object-ui/core@5.2.0
    • @object-ui/react@5.2.0

@object-ui/plugin-ai@5.2.0

Patch Changes

  • Updated dependencies [9997cae]
  • Updated dependencies [70b5570]
    • @object-ui/types@5.2.0
    • @object-ui/components@5.2.0
    • @object-ui/core@5.2.0
    • @object-ui/react@5.2.0

@object-ui/plugin-calendar@5.2.0

Patch Changes

  • Updated dependencies [9997cae]
  • Updated dependencies [a3cb88f]
  • Updated dependencies [5425608]
  • Updated dependencies [6c3f018]
  • Updated dependencies [d912a60]
  • Updated dependencies [7c441f5]
  • Updated dependencies [e919433]
  • Updated dependencies [70b5570]
    • @object-ui/types@5.2.0
    • @object-ui/plugin-detail@5.2.0
    • @object-ui/i18n@5.2.0
    • @object-ui/fields@5.2.0
    • @object-ui/components@5.2.0
    • @object-ui/core@5.2.0
    • @object-ui/mobile@5.2.0
    • @object-ui/react@5.2.0

@object-ui/plugin-charts@5.2.0

Patch Changes

  • Updated dependencies [9997cae]
  • Updated dependencies [a3cb88f]
  • Updated dependencies [5425608]
  • Updated dependencies [e919433]
  • Updated dependencies [70b5570]
    • @object-ui/types@5.2.0
    • @object-ui/i18n@5.2.0
    • @object-ui/components@5.2.0
    • @object-ui/core@5.2.0
    • @object-ui/react@5.2.0

@object-ui/plugin-chatbot@5.2.0

Patch Changes

  • Updated dependencies [9997cae]
  • Updated dependencies [70b5570]
    • @object-ui/types@5.2.0
    • @object-ui/components@5.2.0
    • @object-ui/core@5.2.0
    • @object-ui/react@5.2.0

@object-ui/plugin-dashboard@5.2.0

Patch Changes

  • e919433: Stop silently assuming USD when a currency field has no currency
    configured. For non-USD orgs (e.g. a CNY-based CRM seeded without an
    explicit currency) the cells now render as plain locale-formatted
    numbers (150,000.00) instead of $150,000.00 — which was the Implement visual designer for Object UI schemas #1
    "why is my RMB showing as dollars?" bug.

    Behavior change is opt-in via omission: when currency /
    defaultCurrency is set on the field/column, formatting is unchanged.

    Fixed call sites:

    • @object-ui/fields: formatCurrency, formatCompactCurrency, and
      CurrencyCellRenderer no longer default-param 'USD'.
    • @object-ui/i18n: formatCurrency() falls back to formatNumber
      semantics when currency is omitted.
    • @object-ui/plugin-grid: column-summary formatter (Sum: 5,000,000
      instead of Sum: $5,000,000.00).
    • @object-ui/plugin-detail: header-highlight currency formatter.
    • @object-ui/plugin-dashboard: ObjectMetricWidget inferred
      currency now resolves to undefined (not 'USD') for un-tagged
      fields, so MetricWidget's isCurrency heuristic falls through
      to plain number formatting.
  • Updated dependencies [9997cae]

  • Updated dependencies [a3cb88f]

  • Updated dependencies [5425608]

  • Updated dependencies [6c3f018]

  • Updated dependencies [d912a60]

  • Updated dependencies [e919433]

  • Updated dependencies [70b5570]

    • @object-ui/types@5.2.0
    • @object-ui/i18n@5.2.0
    • @object-ui/fields@5.2.0
    • @object-ui/components@5.2.0
    • @object-ui/core@5.2.0
    • @object-ui/react@5.2.0

@object-ui/plugin-designer@5.2.0

Patch Changes

  • Updated dependencies [9997cae]
  • Updated dependencies [a3cb88f]
  • Updated dependencies [5425608]
  • Updated dependencies [6c3f018]
  • Updated dependencies [d912a60]
  • Updated dependencies [e919433]
  • Updated dependencies [70b5570]
    • @object-ui/types@5.2.0
    • @object-ui/i18n@5.2.0
    • @object-ui/fields@5.2.0
    • @object-ui/plugin-grid@5.2.0
    • @object-ui/components@5.2.0
    • @object-ui/core@5.2.0
    • @object-ui/plugin-form@5.2.0
    • @object-ui/react@5.2.0

@object-ui/plugin-editor@5.2.0

Patch Changes

  • Updated dependencies [9997cae]
  • Updated dependencies [70b5570]
    • @object-ui/types@5.2.0
    • @object-ui/components@5.2.0
    • @object-ui/core@5.2.0
    • @object-ui/react@5.2.0

@object-ui/plugin-form@5.2.0

Patch Changes

  • Updated dependencies [9997cae]
  • Updated dependencies [6c3f018]
  • Updated dependencies [d912a60]
  • Updated dependencies [e919433]
  • Updated dependencies [70b5570]
    • @object-ui/types@5.2.0
    • @object-ui/fields@5.2.0
    • @object-ui/components@5.2.0
    • @object-ui/core@5.2.0
    • @object-ui/permissions@5.2.0
    • @object-ui/react@5.2.0

@object-ui/plugin-gantt@5.2.0

Patch Changes

  • Updated dependencies [9997cae]
  • Updated dependencies [a3cb88f]
  • Updated dependencies [5425608]
  • Updated dependencies [6c3f018]
  • Updated dependencies [d912a60]
  • Updated dependencies [7c441f5]
  • Updated dependencies [e919433]
  • Updated dependencies [70b5570]
    • @object-ui/types@5.2.0
    • @object-ui/plugin-detail@5.2.0
    • @object-ui/fields@5.2.0
    • @object-ui/components@5.2.0
    • @object-ui/core@5.2.0
    • @object-ui/react@5.2.0

@object-ui/plugin-grid@5.2.0

Patch Changes

  • e919433: Stop silently assuming USD when a currency field has no currency
    configured. For non-USD orgs (e.g. a CNY-based CRM seeded without an
    explicit currency) the cells now render as plain locale-formatted
    numbers (150,000.00) instead of $150,000.00 — which was the Implement visual designer for Object UI schemas #1
    "why is my RMB showing as dollars?" bug.

    Behavior change is opt-in via omission: when currency /
    defaultCurrency is set on the field/column, formatting is unchanged.

    Fixed call sites:

    • @object-ui/fields: formatCurrency, formatCompactCurrency, and
      CurrencyCellRenderer no longer default-param 'USD'.
    • @object-ui/i18n: formatCurrency() falls back to formatNumber
      semantics when currency is omitted.
    • @object-ui/plugin-grid: column-summary formatter (Sum: 5,000,000
      instead of Sum: $5,000,000.00).
    • @object-ui/plugin-detail: header-highlight currency formatter.
    • @object-ui/plugin-dashboard: ObjectMetricWidget inferred
      currency now resolves to undefined (not 'USD') for un-tagged
      fields, so MetricWidget's isCurrency heuristic falls through
      to plain number formatting.
  • Updated dependencies [9997cae]

  • Updated dependencies [6c3f018]

  • Updated dependencies [d912a60]

  • Updated dependencies [e919433]

  • Updated dependencies [70b5570]

    • @object-ui/types@5.2.0
    • @object-ui/fields@5.2.0
    • @object-ui/components@5.2.0
    • @object-ui/core@5.2.0
    • @object-ui/mobile@5.2.0
    • @object-ui/react@5.2.0

@object-ui/plugin-kanban@5.2.0

Patch Changes

  • a3cb88f: CRM UX polish batch:

    • Kanban columns: drop the per-column rainbow top stripe. Lane border + header divider are sufficient; cards are now the loudest thing on screen (Linear / HubSpot pattern).
    • Stage chevron (record:path): bump completed-stage contrast (emerald-800 text on emerald-500/15, was 700 on /10) and future-stage text from foreground/70 to foreground/85 for legibility.
    • i18n: add notifications.emptyUnread, notifications.filterUnread, notifications.filterAll (en + zh) so the InboxPopover Unread/All sub-filter renders in the active locale.
  • 5425608: CRM UX polish pass — calmer enterprise look across detail + kanban.

    • plugin-kanban: column headers now use a 2px muted accent stripe with
      neutral foreground titles + a quiet grey count pill instead of full
      rainbow gradient + colored title + colored count. Pipeline boards
      (Opportunity, Case, Task, Lead) look like Salesforce/Linear instead of
      a toy. WIP-limit overflow remains destructive-red so urgency stays loud.
    • plugin-detail (record:reference_rail): new hideEmpty prop
      (default true) collapses entries whose total === 0 into a single
      + N empty (Quotes · Products …) chip at the bottom of the rail.
      Removes the 4–7 "No records" stack that dominated the aside.
    • plugin-detail (record:path): completed stages now render with an
      emerald-tinted background + bold green check instead of low-contrast
      bg-muted text-muted-foreground (which read as "light grey on white"
      and was borderline unreadable).
    • app-shell (RecordDetailView): record-not-found short-circuit.
      Previously a stale/missing recordId still rendered the page chrome
      (rail, discussion, breadcrumb with the raw id), making invalid links
      look like a partially broken page. Now renders a clean centered
      Empty state with database icon + i18n'd "Record not found" copy.
    • i18n: added detail.showEmptyRelated_{one,other} and
      empty.recordNotFound{,Description} keys (en + zh).
  • d912a60: CRM polish — denser kanban cards, smarter currency, calmer dates.

    • plugin-kanban card body: drop the verbose Label: value two-column
      grid in favor of a single-column dense list (values only, with the
      field label preserved as a hover title for accessibility). Pipeline
      cards across Salesforce / HubSpot / Linear all do this because the
      value's own type carries its meaning, and the saved space lets the
      title breathe.
    • fields/formatCurrency: drop trailing .00 when the value is a
      whole number (Salesforce convention: $1,234.50 keeps cents,
      $1,234 doesn't). Pipeline amounts like 500,000.00 now read as
      500,000.
    • fields/formatDate default branch: drop the year when it matches
      the current year — 7月21日 instead of 2026年7月21日. Past- and
      future-year dates keep the year for disambiguation
      (2025年11月23日).
    • fields/CurrencyCellRenderer: removed the now-redundant
      .replace(/[.,]00$/, '') workaround that hid cents for precision:0
      fields; the formatter now handles whole-unit trimming natively.
  • Updated dependencies [9997cae]

  • Updated dependencies [a3cb88f]

  • Updated dependencies [5425608]

  • Updated dependencies [6c3f018]

  • Updated dependencies [d912a60]

  • Updated dependencies [7c441f5]

  • Updated dependencies [e919433]

  • Updated dependencies [70b5570]

    • @object-ui/types@5.2.0
    • @object-ui/plugin-detail@5.2.0
    • @object-ui/i18n@5.2.0
    • @object-ui/fields@5.2.0
    • @object-ui/components@5.2.0
    • @object-ui/core@5.2.0
    • @object-ui/react@5.2.0

@object-ui/plugin-list@5.2.0

Patch Changes

  • 50cdefd: Gallery cards no longer render a giant gradient letter placeholder when
    the configured coverField has no populated values anywhere in the
    dataset. Previously, simply declaring gallery.coverField would force
    the cover area on even when every record's image was null/empty, producing
    oversized 200×200 "C" / "A" letter blocks that dwarfed the actual card
    content (the Contact and Account card views in the CRM example were the
    most visible offenders).

    The configured-but-empty state now matches the unconfigured state:
    collapse the cover area, render a compact title-plus-fields card.
    When at least one record in the dataset has a cover image, the cover
    area still renders for all cards so heights stay consistent.

@object-ui/plugin-map@5.2.0

Patch Changes

  • Updated dependencies [9997cae]
  • Updated dependencies [70b5570]
    • @object-ui/types@5.2.0
    • @object-ui/components@5.2.0
    • @object-ui/core@5.2.0
    • @object-ui/react@5.2.0

@object-ui/plugin-markdown@5.2.0

Patch Changes

  • Updated dependencies [9997cae]
  • Updated dependencies [70b5570]
    • @object-ui/types@5.2.0
    • @object-ui/components@5.2.0
    • @object-ui/core@5.2.0
    • @object-ui/react@5.2.0

@object-ui/plugin-report@5.2.0

Patch Changes

  • Updated dependencies [9997cae]
  • Updated dependencies [a3cb88f]
  • Updated dependencies [5425608]
  • Updated dependencies [6c3f018]
  • Updated dependencies [d912a60]
  • Updated dependencies [e919433]
  • Updated dependencies [70b5570]
    • @object-ui/types@5.2.0
    • @object-ui/i18n@5.2.0
    • @object-ui/fields@5.2.0
    • @object-ui/plugin-grid@5.2.0
    • @object-ui/components@5.2.0
    • @object-ui/core@5.2.0
    • @object-ui/react@5.2.0

@object-ui/plugin-timeline@5.2.0

Patch Changes

  • Updated dependencies [9997cae]
  • Updated dependencies [70b5570]
    • @object-ui/types@5.2.0
    • @object-ui/components@5.2.0
    • @object-ui/core@5.2.0
    • @object-ui/mobile@5.2.0
    • @object-ui/react@5.2.0

@object-ui/plugin-view@5.2.0

Patch Changes

  • Updated dependencies [9997cae]
  • Updated dependencies [e919433]
  • Updated dependencies [70b5570]
    • @object-ui/types@5.2.0
    • @object-ui/plugin-grid@5.2.0
    • @object-ui/components@5.2.0
    • @object-ui/core@5.2.0
    • @object-ui/plugin-form@5.2.0
    • @object-ui/react@5.2.0

@object-ui/plugin-workflow@5.2.0

Patch Changes

  • Updated dependencies [9997cae]
  • Updated dependencies [70b5570]
    • @object-ui/types@5.2.0
    • @object-ui/components@5.2.0
    • @object-ui/core@5.2.0
    • @object-ui/react@5.2.0

@object-ui/providers@5.2.0

Patch Changes

  • Updated dependencies [9997cae]
  • Updated dependencies [70b5570]
    • @object-ui/types@5.2.0

@object-ui/react@5.2.0

Patch Changes

  • Updated dependencies [9997cae]
  • Updated dependencies [a3cb88f]
  • Updated dependencies [5425608]
  • Updated dependencies [e919433]
  • Updated dependencies [70b5570]
    • @object-ui/types@5.2.0
    • @object-ui/data-objectstack@5.2.0
    • @object-ui/i18n@5.2.0
    • @object-ui/core@5.2.0

@object-ui/runner@5.2.0

Patch Changes

  • Updated dependencies [9997cae]
  • Updated dependencies [a3cb88f]
  • Updated dependencies [5425608]
  • Updated dependencies [d912a60]
  • Updated dependencies [70b5570]
    • @object-ui/types@5.2.0
    • @object-ui/plugin-kanban@5.2.0
    • @object-ui/components@5.2.0
    • @object-ui/core@5.2.0
    • @object-ui/plugin-charts@5.2.0
    • @object-ui/react@5.2.0

@object-ui/tenant@5.2.0

Patch Changes

  • Updated dependencies [9997cae]
  • Updated dependencies [70b5570]
    • @object-ui/types@5.2.0

@object-ui/console@5.2.0

@object-ui/create-plugin@5.2.0

object-ui@5.2.0

Patch Changes

  • Updated dependencies [9997cae]
  • Updated dependencies [70b5570]
    • @object-ui/types@5.2.0
    • @object-ui/core@5.2.0

@vercel
Copy link
Copy Markdown

vercel Bot commented May 23, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
objectui-demo Ready Ready Preview, Comment May 23, 2026 6:44am
1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectui Ignored Ignored May 23, 2026 6:44am

Request Review

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant