Found while implementing #6788 (the basic-context-menu trigger card authoring content).
Out of that card's fence -- it names the one context-menu fixture and a render pin -- so it is
filed rather than fixed. Same defect class, a different renderer and a whole category.
Measured
Every one of the seven components-complex-scroll-area demos authors its body under
content:
{ "type": "scroll-area", "height": 300, "content": [ ... ] }packages/components/src/renderers/complex/scroll-area.tsx reads orientation, height,
width, className and renderChildren(schema.children). It never reads content.
Rendered through the real SchemaRenderer on d06059f24, the way the docs gallery renders
them -- 5 elements each, and the only text in the box is Radix's own injected scrollbar
stylesheet:
components-complex-scroll-area/chat-messages elements=5 leaked=1 text="[data-radix-scroll-area-viewport]{scrollbar-width:none; ..."
components-complex-scroll-area/code-preview elements=5 leaked=1 text="[data-radix-scroll-area-viewport]{ ..."
components-complex-scroll-area/document-browser elements=5 leaked=1 text="[data-radix-scroll-area-viewport]{ ..."
components-complex-scroll-area/horizontal-scroll elements=5 leaked=1 text="[data-radix-scroll-area-viewport]{ ..."
components-complex-scroll-area/short-150px elements=5 leaked=1 text="[data-radix-scroll-area-viewport]{ ..."
components-complex-scroll-area/tall-300px elements=5 leaked=1 text="[data-radix-scroll-area-viewport]{ ..."
components-complex-scroll-area/vertical-scroll elements=5 leaked=1 text="[data-radix-scroll-area-viewport]{ ..."
leaked=1 is the authored array reaching the DOM as the host attribute
content="[object Object]" -- the #5574 class, the same shape #6773 measured on the
aspect-ratio family.
So the published scroll-area page draws seven empty scroll boxes. 7 of 7, not a stray.
Population
scroll-area nodes authoring content in the catalog: 7 -- the whole category, and every
one of them is the entry's root node. Verified by walking all 431 fixtures.
Fix shape (for triage, not a decision)
"children", matching the key the renderer reads and the spelling #6773 used for the four
aspect-ratio demos and #6788 for the context-menu card. The renderer is the contract
(AGENTS.md #0.1): teaching ui:scroll-area to read content would add a second dialect for
one slot to a published surface.
Why nothing caught it
Same four reasons #6773 and #6788 measured. BaseSchema is .passthrough() and carries
[key: string]: any, so zod and tsc both accept content. check-doc-component-types.mjs
rules the question out by name. And catalog-gallery-render.test.tsx renders all seven
today and PASSES: its non-vacuity control is elements > WRAPPER_ELEMENTS || text, and
Radix's injected scrollbar stylesheet is text -- a category-wide empty render clears the
control on a string the component itself emitted.
The corpus sweep added by #6788 (examples/schema-catalog/test/card-demo-content-6788.test.tsx)
covers card nodes only; the same sweep over scroll-area nodes is what would have caught
this.
Related
#6788 (the card this was found under) - #6773 (same class, the aspect-ratio family) -
#5574 (the DOM-leak class the attribute belongs to)
Generated by Claude Code
Generated by Claude Code
Found while implementing #6788 (the
basic-context-menutrigger card authoringcontent).Out of that card's fence -- it names the one context-menu fixture and a render pin -- so it is
filed rather than fixed. Same defect class, a different renderer and a whole category.
Measured
Every one of the seven
components-complex-scroll-areademos authors its body undercontent:{ "type": "scroll-area", "height": 300, "content": [ ... ] }packages/components/src/renderers/complex/scroll-area.tsxreadsorientation,height,width,classNameandrenderChildren(schema.children). It never readscontent.Rendered through the real
SchemaRendererond06059f24, the way the docs gallery rendersthem -- 5 elements each, and the only text in the box is Radix's own injected scrollbar
stylesheet:
leaked=1is the authored array reaching the DOM as the host attributecontent="[object Object]"-- the #5574 class, the same shape #6773 measured on theaspect-ratio family.
So the published scroll-area page draws seven empty scroll boxes. 7 of 7, not a stray.
Population
scroll-areanodes authoringcontentin the catalog: 7 -- the whole category, and everyone of them is the entry's root node. Verified by walking all 431 fixtures.
Fix shape (for triage, not a decision)
"children", matching the key the renderer reads and the spelling #6773 used for the fouraspect-ratiodemos and #6788 for the context-menu card. The renderer is the contract(AGENTS.md #0.1): teaching
ui:scroll-areato readcontentwould add a second dialect forone slot to a published surface.
Why nothing caught it
Same four reasons #6773 and #6788 measured.
BaseSchemais.passthrough()and carries[key: string]: any, so zod and tsc both acceptcontent.check-doc-component-types.mjsrules the question out by name. And
catalog-gallery-render.test.tsxrenders all seventoday and PASSES: its non-vacuity control is
elements > WRAPPER_ELEMENTS || text, andRadix's injected scrollbar stylesheet is text -- a category-wide empty render clears the
control on a string the component itself emitted.
The corpus sweep added by #6788 (
examples/schema-catalog/test/card-demo-content-6788.test.tsx)covers
cardnodes only; the same sweep overscroll-areanodes is what would have caughtthis.
Related
#6788 (the card this was found under) - #6773 (same class, the aspect-ratio family) -
#5574 (the DOM-leak class the attribute belongs to)
Generated by Claude Code
Generated by Claude Code