Skip to content

Commit 826b4a5

Browse files
committed
Merge origin/main (456238c) into claude/issue-11802-form-dnd-announcements
Brings the eager-closure ceilings objectui#11852 replaced on main, so Bundle Analysis weighs this branch against the ceilings in force. Claude-Session: https://claude.ai/code/session_01DrKzdPdyLLBW3qpZ4vtk7z Co-authored-by: Claude <noreply@anthropic.com>
2 parents 8f5fb15 + 456238c commit 826b4a5

41 files changed

Lines changed: 4028 additions & 294 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
---
2+
'@object-ui/app-shell': patch
3+
---
4+
5+
Studio's *New package* dialog fills in and checks the Package ID, and *New object* shows the object name that will be saved (objectui#11792).
6+
7+
- **The Package ID follows the display name.** In the create dialog, typing a display name fills the Package ID as `com.<organization>.<name>`. The organization part is the active organization's slug, which the session already holds. With no active organization it is left out, giving `com.<name>`. The object namespace keeps following the id as before. Once you edit the id yourself, it stops following the name.
8+
- **An id the server would refuse is caught in the dialog.** *Create package* used to send any non-empty id. `Repairs Center` was sent and refused with a 400. The id field is now the same input the landing page's Duplicate form uses: it lowercases, removes unsupported characters and says so, and explains the format while the id is invalid. *Create package* stays disabled until the id passes `ManifestSchema`'s own id rule from `@objectstack/spec`, the rule `POST /api/v1/packages` checks.
9+
- **New object previews the saved name.** The Data pillar saves a new object under its package namespace (`repair_ticket` is saved as `repairs_repair_ticket`). The *New object* dialog now shows that name under the identifier field. It uses the same rule the save uses.
10+
11+
Editing and viewing a package are unchanged. The app, automation and access *New* dialogs are unchanged. Nothing is added to the package entry: no export, prop, type member or language-pack key. The new copy lives in the metadata-admin designer's own string tables (en and zh).
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
---
2+
'@object-ui/plugin-charts': patch
3+
'@object-ui/app-shell': patch
4+
---
5+
6+
Rotated x-axis labels fit inside the chart, and the dashboard inspector's Layout fields are readable (objectui#11796).
7+
8+
- **Rotated category labels are no longer cut off.** When a bar, line or area chart turns its x-axis labels to fit them, each label hangs its start away from the plot. The axis used to reserve a fixed 60px for them, which counted the text width alone, so the longest labels ran past it and the chart cut off their first letters ("acklog" for Backlog, "ogress" for In Progress on a dashboard bar chart). The axis now reserves the room its longest drawn label needs at the rotation angle: more for long labels, less for short ones, with a wide glyph (Chinese, Japanese, Korean) counted a full em. Every rotated label is now shortened with an ellipsis past 12 characters, also on axes with more than five categories, where a long label used to be clipped mid-word instead. The full name stays on the bar's tooltip. Charts whose labels do not rotate keep the axis height they had.
9+
- **The dashboard inspector stacks its fields.** Studio's dashboard inspector is a narrow side panel, and the dashboard form's Layout section put Columns, Gap and Refresh Interval Seconds in three columns there: a two-digit value showed one digit and the labels wrapped onto several lines. The inspector now renders every section of the form in one column, in the declared field order. Other forms keep the column layout their sections declare.
10+
11+
Nothing is added to either package entry: no export, prop, type member or language-pack key.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
'@object-ui/console': patch
3+
---
4+
5+
The console's first page load no longer downloads the Studio builder or the chart engine (objectui#11798).
6+
7+
- **Studio loads with its route.** `StudioDesignSurface` and `BuilderLanding`, and the modules only they use (the pillar panels and the form designer), were in the bundle every console page fetched before it rendered, for every user, including the many who can never enter Studio. They now load when a Studio screen is first opened: the `/studio` routes and the `studio:builder` app component both reach them through a console-local module that nothing imports statically. The Studio entry gate is unchanged and still decides first, so a principal without `studio.access` never downloads the builder. While the builder loads, the full-screen pillar builder shows the console's loading splash, and the `/studio` landing and the `studio:builder` entry show a loading line inside their frame, announced to assistive technology as a status.
8+
- **Charts load with the first chart.** Recharts and d3 were already imported only on demand, but the console's `vendor-charts` chunk group also claimed their dependencies, among them `use-sync-external-store`, a small React shim that the translation runtime imports on every page. That one shared module made the whole chart engine part of the first page load. The `vendor-react` group now owns the shim, so the chart chunk holds nothing the first page needs and loads when the first chart renders.
9+
10+
The flow designer's canvas is unchanged here: `@object-ui/app-shell` registers its metadata designers, the flow canvas among them, when the package loads, so the console cannot defer it.
11+
12+
Nothing is added to or removed from any package entry, and no route, registry key or translation key changes.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
---
2+
'@object-ui/app-shell': patch
3+
---
4+
5+
Studio's source editors report a Monaco loader that cannot be reached once, as one console warning that names the URL, and no longer leave uncaught errors behind (objectui#11800).
6+
7+
On an install without access to the Monaco CDN (no egress, or a Content-Security-Policy that blocks it), opening a source page in Studio already fell back to a plain textarea, by design. The browser QA pass that found this also saw six uncaught `Event` errors and "Monaco initialization: error: Event" twice, in the dev build. The uncaught errors came from `@monaco-editor/loader`: every `loader.init()` call made while the loader fails leaves one rejected promise no caller can reach. The canvas preview, the inspector editor and the editor's own Monaco `Editor` each called it, and StrictMode doubled each call.
8+
9+
- The metadata designer's code editors (the JSON source tab and the html/react page source editor) call `loader.init()` once per page and share the answer.
10+
- The Monaco `Editor` mounts only after the loader has resolved. While it loads, the editor area shows the skeleton it already showed while the editor module loaded. On a failing install the `Editor` never mounts, so it does not log its own init error.
11+
- The one rejection the loader leaves unhandled is cancelled in an `unhandledrejection` listener that matches the loader's own failure by identity. Every other rejection on the page is still reported.
12+
- The failure is logged once per page as a `console.warn` naming the cause. For a blocked CDN that is the loader script URL, e.g. `https://cdn.jsdelivr.net/npm/monaco-editor@0.55.1/min/vs/loader.js`.
13+
14+
The textarea fallback looks and behaves as before, and still appears as soon as the loader fails. A source editor opened after the failure is known now shows the textarea on its first render. Monaco is still loaded from the CDN; serving it from the console's own assets is not part of this change. Nothing is added to the package entry: no export, prop, type member or language-pack key.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
---
2+
'@object-ui/app-shell': patch
3+
---
4+
5+
Renaming a node in the flow designer now also updates the expressions that read its outputs, removing a node that is still referenced is refused, and the Problems panel reports a reference to a node that does not exist as an error (objectui#11838).
6+
7+
Later nodes read a node's outputs by its id. A decision branch reads `x.decision == 'approve'`, and a record field reads `{x.field}`. Renaming `x` used to update its edges and boundary event, but these expressions still named `x`. The saved draft then read a node that no longer existed, and the Problems panel showed only a scope warning.
8+
9+
- **The rename updates every expression that reads the node, in the same change.** This covers decision branches, edge conditions, value expressions, and `{x.field}` or `{{x.field}}` holes in text, including those inside a loop, parallel or try/catch region. Each expression is read with the expression parser. Only the node's name changes. A different identifier that contains the old id (`xy`), a field named like it (`y.x`), text inside quotes, and a variable the expression itself declares with the same name (`rows.exists(x, x.ok)`) are not changed.
10+
- **A rename that cannot update an expression safely is refused, and nothing changes.** If an expression that reads the node does not parse, the message under the ID field names it. The rename is also refused when the old or new id is also a variable name in the flow, because the expression could mean either one.
11+
- **Removing a node that is still referenced is refused, and nothing changes.** While a boundary event is attached to the node, or an expression reads its outputs, both **Remove node** in the inspector and the **Delete** key on the canvas refuse the removal. The message names each place that still refers to the node: under the button, or at the top of the canvas. Change or remove those first, and the removal then goes through. The node's own edges are still removed with it, as before.
12+
- **The Problems panel reports two new errors.** An expression that reads a node that does not exist is an error, for example `x.decision` in a flow saved without node `x`. So is a boundary event attached to a node that does not exist. Each error is shown on the node or edge where the expression is written. The debugger's Run check is unchanged, because the platform accepts these flows and fails only when it reaches that node.
13+
14+
No export, prop, type member or language-pack key is added. The new messages are in the metadata-admin designer's own string tables (en and zh).

‎apps/console/src/__tests__/registerStudioComponents.builderDirect.test.tsx‎

Lines changed: 0 additions & 122 deletions
This file was deleted.

0 commit comments

Comments
 (0)