From 3ffa34b946ce172b7b1d6a689c94cd4741789808 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 25 Aug 2026 04:38:01 +0000 Subject: [PATCH] docs(layout): add maxVisible and mobileMaxVisible to page-header's PageHeaderProps key list MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `content/docs/layout/page-header.mdx` named 8 of the contract's keys. Walking `PageHeaderProps`' zod shape in the installed @objectstack/spec 17.2.0 gives 11 DECLARED keys — 10 live plus the `icon` ADR-0087 D2 tombstone (`optional -> never`), which this page already excludes correctly. The two the list omitted, `maxVisible` and `mobileMaxVisible`, are live and authorable. Derived from the shape's declared keys, not from a `safeParse` output: an optional key with no default never appears in a parse result, so a parse of `{title, subtitle}` yields only 6 keys and would have deleted `actions` and `aria` while never surfacing these two. The added paragraph states that both keys belong to the canonical `page:header` renderer in `@object-ui/components` (which reads them) rather than to `@object-ui/layout`'s `PageHeader` (which does not) — the same component-vs-contract split this page already draws for `icon`. --- content/docs/layout/page-header.mdx | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/content/docs/layout/page-header.mdx b/content/docs/layout/page-header.mdx index 7d87d4c047..dfcbf70224 100644 --- a/content/docs/layout/page-header.mdx +++ b/content/docs/layout/page-header.mdx @@ -65,8 +65,17 @@ interface PageHeaderComponentProps extends React.HTMLAttributes `subtitle` is the canonical key: `@objectstack/spec/ui`'s `PageHeaderProps` — the contract for the authored `page:header` node — declares `title / subtitle / breadcrumb / actions / -recordChrome / showStar / showCopyId / aria` and has no `description`. Both `title` and -`subtitle` interpolate `{field.path}` tokens against the surrounding record context. +recordChrome / showStar / showCopyId / maxVisible / mobileMaxVisible / aria` and has no +`description`. Both `title` and `subtitle` interpolate `{field.path}` tokens against the +surrounding record context. + +`maxVisible` and `mobileMaxVisible` are the canonical node's action-overflow budget, and +they belong to that contract rather than to this component: the `page:header` renderer in +`@object-ui/components` reads them, and `@object-ui/layout`'s `PageHeader` — the component +documented above — does not. The shape describes them as "How many header actions render as +inline buttons before the rest fold into the overflow menu (renderer default 3)" and "The +`maxVisible` budget on mobile viewports (renderer default 1)"; +[Slotted pages](/docs/guide/slotted-pages) shows them authored on a page. `icon` is deliberately **not** in that list, and the distinction matters because this page documents a React component while the spec governs an authored node. `PageHeaderProps.icon`