diff --git a/.changeset/adr-0089-visible-when-renderer.md b/.changeset/adr-0089-visible-when-renderer.md new file mode 100644 index 000000000..d52b32485 --- /dev/null +++ b/.changeset/adr-0089-visible-when-renderer.md @@ -0,0 +1,15 @@ +--- +"@object-ui/react": minor +"@object-ui/types": minor +--- + +ADR-0089: read the canonical `visibleWhen` conditional-visibility predicate in the form + page renderers. + +`@objectstack/spec` now unifies conditional visibility under a single canonical key, `visibleWhen`, and folds the deprecated `visibleOn` (view form) / `visibility` (page component) aliases into it at parse. This updates ObjectUI to read the canonical key: + +- **Page renderer** (`SchemaRenderer`) — evaluates `visibleWhen` first (show-when-truthy), then the deprecated `visibleOn` / `visibility` as a defensive read for raw / un-normalized metadata. `visibleWhen` is stripped from DOM props. +- **Spec→node bridges** — the page bridge maps a component's `visibleWhen ?? visibility` onto the node's canonical `visibleWhen`; the form-view bridge maps a field's `visibleWhen ?? visibleOn` onto the ObjectForm view-level predicate slot. +- **Form renderers** — the `@object-ui/react` `FormRenderer` prefers `visibleWhen` over the `visibleOn` alias. (`ObjectForm`/`form.tsx` already evaluated `visibleWhen`.) +- **Types** — the component base schema (`BaseSchema` / `base.zod`) gains the canonical `visibleWhen`; `visibleOn` is marked `@deprecated`. + +Fully back-compat: existing `visibleOn` / `visibility` metadata keeps working through the alias reads. diff --git a/packages/react/src/SchemaRenderer.tsx b/packages/react/src/SchemaRenderer.tsx index 4fbbbba4f..3e6937fef 100644 --- a/packages/react/src/SchemaRenderer.tsx +++ b/packages/react/src/SchemaRenderer.tsx @@ -272,18 +272,25 @@ export const SchemaRenderer = forwardRef