/** * The DISPLAY BRICKS — the display-only HTML a screen may write, beside the Kit. * * The Kit is the vocabulary of BEHAVIOR: it sorts, formats, validates and calls * tools. These are the vocabulary of ARRANGEMENT, and they carry no behavior at * all: children and an inline `style`, nothing else. No `className`, no `id`, no * events, no `data-*`, no `aria-*`, no `dangerouslySetInnerHTML` — the React * implementations (`packages/ui/src/tree/display-bricks.tsx`) take exactly two * props per tag, so a prop that is not one of the two cannot arrive by spreading. * * Free CSS is safe because containment is CAPABILITY-shaped, never * content-shaped: the surface root paints inside its own box * (`SURFACE_CONTAINMENT`) so no declaration can reach host chrome, and the one * trusted-side filter drops the style values that would FETCH (`url()`, `src()`, * `image-set()`). Nothing reads a style for meaning; the LLM judge owns quality. */ /** One display tag. The name IS the tag — there are no props to describe. */ export interface DisplayTagSpec { readonly name: string; readonly summary: string; } export declare const DISPLAY_SPECS: readonly DisplayTagSpec[]; /** The tags, as the renderer, the typings and the checks read them. */ export declare const DISPLAY_TAG_NAMES: readonly string[]; /** * What a screen may paint with is a DEFAULT-DENY property allowlist and NOTHING * ELSE: a declaration survives iff its property is named here, whatever its * value. No value is ever inspected — so there is no CSS spelling for a model to * bypass. The list holds only properties that cannot fetch: a `color` takes a * URL nowhere, but `background`, `backgroundImage`, `filter`, `backdropFilter` * and `cursor` all can (`url()`, `image-set()`), so they are simply absent and * drop by default alongside `maskImage`, `borderImage` and `content`. Themed * fills use `backgroundColor`; gradients/blur are not available to a screen (a * host-controlled kit token could reintroduce them later, out of scope here). * `position` is allowed: the surface box clips even `fixed`/`sticky` to itself, * so no value check is needed to hold a screen inside its surface. * * It lives HERE, beside the tags, because BOTH sides read it and a second copy * of a security boundary is the copy that drifts: `@vendoai/ui` filters every * node's style through it at paint (`safeStyle`), and the component screen's * typings print it as the `style` type, so a property this list does not name is * a type error at check time rather than a declaration that silently vanishes. */ export declare const SAFE_STYLE_PROPERTIES: readonly string[]; //# sourceMappingURL=display.d.ts.map