Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
5076cb1
feat(plugin-tree,types): object-tree is judged — it publishes the key…
claude Oct 1, 2026
36c322a
feat(plugin-map): object-map is judged — mapStyle, navigation and ena…
claude Oct 1, 2026
1714acc
fix(types,plugin-timeline): the slice-2 and objectui#8654 bookings — …
claude Oct 1, 2026
17f1664
chore(changeset,plugin-map): date-note the objectui#8655 changeset th…
claude Oct 1, 2026
289df60
Merge origin/main into claude/issue-11168-lazy-blocks-form-layout (ob…
claude Oct 1, 2026
94db25d
fix(plugin-map): object-map reads mapStyle before map.style, as the s…
claude Oct 1, 2026
f7424b7
docs(plugin-view,app-shell): View tabs lists the two kept form layout…
claude Oct 1, 2026
25901fc
Merge origin/main into claude/issue-11168-lazy-blocks-form-layout (ob…
claude Oct 1, 2026
2817b5f
Merge origin/main into claude/issue-11168-lazy-blocks-form-layout (ob…
claude Oct 1, 2026
24c5172
Merge origin/main into claude/issue-11168-lazy-blocks-form-layout (ob…
claude Oct 1, 2026
556bc5d
Merge origin/main into claude/issue-11168-lazy-blocks-form-layout (ob…
claude Oct 1, 2026
e568331
fix(plugin-tree,plugin-map,plugin-timeline): `page` and a mode-less n…
claude Oct 1, 2026
b90fb31
docs(changeset): dated note on the pending objectui#8654 timeline ent…
claude Oct 1, 2026
821c810
test(plugin-tree,plugin-map): the no-objectName navigator row mounts …
claude Oct 1, 2026
e1860d8
fix(plugin-tree): `page` opens the record page of the object the tree…
claude Oct 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .changeset/11168-map-style-precedence.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
'@object-ui/plugin-map': patch
---

`object-map` reads `mapStyle` before `map.style`, as `@objectstack/spec`'s `object-map` row says in `mapStyle`'s own description ("Read before `map.style`"). This is objectui#11168 slice 3, under the seat's ruling: the renderer follows the spec.

**Behaviour change.** A map that writes both a node-level `mapStyle` and a `style` inside its `map` block now draws `mapStyle`. Until now, the block's `style` won on that path. A map writing only one of the two, or neither, draws exactly what it drew before. The map path with no `map` block already read `mapStyle` first.

No authored producer in objectui or objectstack writes both. The only producers of `mapStyle` are the `ListView` / `ObjectView` flatteners, and they write it on the path with no `map` block. So no stored document changes what it draws. The `object-map` registration publishes the spec's description for `mapStyle` verbatim.
5 changes: 5 additions & 0 deletions .changeset/11168-object-form-columns-label.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@object-ui/app-shell': patch
---

The page-block inspector labelled the `object-form` `columns` field "Columns (grid layout)" in English and 「列数(网格布局)」 in Chinese. That pointed at the `grid` form layout, which objectui#7759 Group C retires. The field does not depend on `layout`. Measured through the real `SchemaRenderer`, `columns` sets how many columns the form's field grid has under either layout, and the spec row says the same: "Number of field columns (multi-column forms), honoured under either `layout`". `1` stacks the fields, `2` to `4` give that many columns at the responsive breakpoints, and leaving it out lets the form infer the count from the number of fields. The labels now read "Field columns (1–4)" and 「字段列数(1–4)」 (objectui#11168 slice 3). The field, its key and what it writes are unchanged.
11 changes: 11 additions & 0 deletions .changeset/11168-object-map-inputs.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
'@object-ui/plugin-map': minor
---

`object-map` publishes the three keys its `@objectstack/spec` 17.5.0 row declares and its registration left out: `mapStyle`, `navigation` and `enableClustering` (objectui#11168 slice 3, objectui#11111 decision 3 = B). Each was measured on the real renderer first, and the renderer honours all three. The page validator used to report each one as an unknown prop.

- `mapStyle` replaces the demo tiles. Its description is the spec row's own, verbatim: it is read before `map.style`. The renderer now reads it that way too; the `mapStyle` precedence entry in this release states that change.
- `enableClustering: true` clusters nearby markers. Without the key, the map clusters only above 100 markers, and `false` turns clustering off at any count.
- On `navigation`, `drawer`, `modal` and `popover` open the marker's record. `new_window`, or `openNewTab: true`, opens the record page in a new tab. `page` and a block without `mode` open the record page of the map's `objectName` through the record navigator the host publishes (the console publishes one on its custom pages, record pages and list views). Under a host that publishes none, or on a map that names no `objectName`, they open nothing. On a map that no parent view navigates for, a click also opens nothing when the key is absent or the mode is `none` or `split`.

The `map` input's description now lists its members. Apart from the `mapStyle` precedence, rendering is unchanged.
12 changes: 12 additions & 0 deletions .changeset/11168-object-tree-inputs.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
'@object-ui/plugin-tree': minor
---

`object-tree` publishes the keys its `@objectstack/spec` 17.5.0 row declares and its renderer honours (objectui#11168 slice 3, objectui#11111 decision 3 = B). Each key was measured on the real renderer first.

- `data`, `staticData`, `filter` and `navigation` are now registration inputs on both tags (`object-tree` and `view:tree`). The page validator used to report each as an unknown prop, even though the tree reads it. Each description says what the tree does with the key, including the cases that draw nothing: the `api` and `schema` providers under `data`, and an absent `navigation`. On `navigation`, `page` and a block without `mode` open a record page through the record navigator the host publishes (the console publishes one on its custom pages, record pages and list views). The object is `data.object` when `data` is the object provider, so it wins when both are written, and the tree's `objectName` otherwise. Under a host that publishes none, or on a tree that names neither (inline rows with no `objectName`), they open nothing.
- `objectName` is no longer a required input. The record source is one of `data`, `staticData` and `objectName`. A tree on inline rows never reads the object name, and the validator used to raise `missing-required-prop` on a tree that draws.
- The `tree` input's description now names its four members and what each does.
- `ObjectTree` reads `navigation` without a cast, because the node type declares it.

What the tree draws and what a click opens are unchanged.
11 changes: 11 additions & 0 deletions .changeset/11168-timeline-navigation-wording.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
'@object-ui/plugin-timeline': patch
---

The `object-timeline` / `view:timeline` `navigation` input description had three wording errors, and all three are corrected (objectui#11168 slice 3, from the contract record on objectui#8654 and the one on PR #11335).

- The reason `split` opens nothing (the timeline hands the split shell no main panel) was attached to `page` and `none` as well. It now applies to `split` alone.
- The description said `openNewTab: true` "outranks the mode". That does not hold for `none`, which is checked first, as `preventNavigation` is. The description now says `openNewTab` outranks every mode except `none`.
- The description said `page`, and a block without `mode`, open nothing on a timeline no parent view navigates for. Since objectui#11293 they open the record page through the record navigator the host publishes (the console publishes one on its custom pages, record pages and list views), and they open nothing only under a host that publishes none. The description now says so. An absent key still opens nothing.

The README and the docs page's navigation table and callout are corrected the same way. Behaviour is unchanged.
15 changes: 15 additions & 0 deletions .changeset/11168-types-object-tree-mirror.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
'@object-ui/types': minor
---

`ObjectTreeSchema` mirrors the `object-tree` row of `@objectstack/spec` 17.5.0 (objectui#11168 slice 3). The change applies to both faces, TypeScript and zod.

- `objectName` is optional. The zod face ends in the record-source refinement the map and gantt mirrors carry: a node needs `data`, `staticData` or `objectName`. `objectui validate` used to refuse a `staticData`-only tree with `invalid_type` at `objectName`, even though the tree draws it. It now accepts that tree. A tree with no record source is refused once, at the root, with `RECORD_SOURCE_REQUIRED`. The node's `dataSource` binding does not count, because this block's registration is not gate-wrapped and no binding reaches the tree.
- `data` (`ViewData`), `staticData`, `tree` (the spec's `TreeConfig`, by reference) and `navigation` (the spec's `NavigationConfig`, by reference) are declared.

⚠️ This narrows what is accepted. Until now these keys rode the node's passthrough, so any value was accepted. Each is now judged:
- a bare array under `data` is a type error;
- a misspelled member inside `tree` is refused;
- an unknown `navigation.mode` is refused.

The fixed group ships the change as `minor`.
7 changes: 7 additions & 0 deletions .changeset/11168-ui-action-size.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@object-ui/types': minor
---

`UIActionSchema.size` takes the `action:button` row's vocabulary by reference (objectui#11168 slice 3). Before this, the type was `'sm' | 'md' | 'lg'`. That made `size: 'default'` and `size: 'icon'` a TypeScript error, although `@objectstack/spec` 17.5.0's `action:button` row accepts both, the `action:button` registration publishes them, and the Button primitive draws them.

The type is also the member type of the `action:group`, `action:menu` and `action:bar` lists. Measured through the real `SchemaRenderer`, a group member draws each of the five sizes exactly as an `action:button` does, and a member's own `md` renders as `default`. A size outside the five is still refused.
5 changes: 5 additions & 0 deletions .changeset/11168-view-tabs-layout-values.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@object-ui/plugin-view': patch
---

The README's "View tabs" section listed `form.layout` as `vertical | horizontal | inline | grid`. It now lists `vertical | horizontal`, the two values the form layout keeps after objectui#7759 Group C (objectui#11168 slice 3). The docs page carries the same line. Only the README text changes; the package's code is untouched.
10 changes: 10 additions & 0 deletions .changeset/8253-export-tree-view-config.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,3 +65,13 @@ misspelled key instead of a view that silently ignores it.
⛔ This does not make `tree` an authorable view type. objectui#5321 is untouched: the
block is host config, written by a host and never by a document author, and the
authored node remains the flat `ObjectTreeSchema`.

**Note, 2026-10-01 (objectui#11168 slice 3, shipping in this same release).**
The last sentence above calls the authored node "the flat `ObjectTreeSchema`".
`@objectstack/spec` 17.5.0 gave `object-tree` an element row whose `tree` block
carries `parentField`, `labelField`, `fields` and `defaultExpandedDepth`, and
`ObjectTreeSchema` now declares that block by reference, so an authored tree
writes those keys under `tree` rather than flat on the node. The flat spellings
`ObjectTreeSchema` still carries are the form a host composes. What this entry
says about the host `tree` view config, `TreeViewConfig` and objectui#5321 is
unchanged.
11 changes: 11 additions & 0 deletions .changeset/8654-timeline-navigation.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,14 @@
- An authored `{ "type": "object-timeline", "properties": { … } }` document was already judged by the spec row: a bad `mode` is refused at `properties.navigation.mode`, and a member the spec does not declare inside the block is refused. That is unchanged and now pinned.

What a click does with each member is unchanged. `drawer`, `modal` and `popover` open the entry's record in that overlay, and `new_window` or `openNewTab: true` opens the record page in a new tab. Three things open nothing on a timeline that no parent view navigates for: an absent key, `page` (also what a block without `mode` resolves to), and `split`. The published input description says so.

**Note, 2026-10-01 (objectui#11168 slice 3, shipping in this same release).**
The last paragraph above says `page`, and a block without `mode`, open nothing
on a timeline that no parent view navigates for, and that the published input
description says so. objectui#11293 changed that in this same release: a
`page` click with no `onNavigate` now goes to the record navigator the host
publishes, which the console publishes on its custom pages, record pages and
list views. Under such a host `page` and a block without `mode` open the record
page. They open nothing only under a host that publishes none, such as an
embedded renderer. The input description now says so (objectui#11168). An
absent key and `split` still open nothing.
15 changes: 15 additions & 0 deletions .changeset/8655-object-tree-props-schema-typed.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,3 +50,18 @@ needs a producer census a text search cannot make. `navigation` belongs to a
blocked card and is ledgered, ⛔ not ruled.

Nothing in `@object-ui/types` is declared, widened or narrowed by this change.

**Note, 2026-10-01 (objectui#11168 slice 3, shipping in this same release).**
The `navigation` and `tree` readings above changed after this entry was written.
`@objectstack/spec` 17.5.0 gave `object-tree` an element row, and that row
declares both keys, so both verdicts here were re-run on that contract.
- `navigation` is DECLARED on `ObjectTreeSchema` as the spec's
`NavigationConfig`, and the cast this entry says "stays" is gone.
- `tree` is DECLARED as the spec's `TreeConfig`, by reference. Mirroring the
element row is not the fork described above.
- `ObjectTreeSchema` also declares `data` as `ViewData` (not `BaseSchema`'s
untyped `data`) and `staticData`, and `objectName` is optional.

So the sentences above that say these keys are undeclared describe the tree at
objectui#8655, not the code in this release. See that slice's changesets for
`@object-ui/types` and `@object-ui/plugin-tree`.
Loading
Loading