import { type KitComponentSpec, type KitSlotSpec, type PropClass } from "./schema.js"; /** The DESCRIPTIONS that mark a schema as something other than what it * parses as. Exported because every reader of a Kit schema — the screen * typings, the catalog's type printer — has to recognise the same strings, * and a second copy of one is a marker that stops matching. */ export declare const SLOT_PROP_DESCRIPTION = "holds Kit elements"; export declare const TEXT_SLOT_DESCRIPTION = "holds finished text"; export declare const ACTION_PROP_DESCRIPTION = "names a host tool"; export declare const ICON_NAME_DESCRIPTION = "lucide icon name in kebab-case"; /** The shared adjectives' names, so `kitPrompt` can leave them out of every * component's prop list and teach them once. */ export declare const KIT_SHARED_PROP_NAMES: readonly string[]; /** What the PREAMBLE teaches, so neither prompt spends a line on it per * component: the shared adjectives, and `style`, which every component takes. */ export declare const KIT_PREAMBLE_PROP_NAMES: readonly string[]; /** Where a slot's element sits, as ONE comparable string: `columns[].cell` for a * field of a description object, `marker` for a slot that is a prop of its own. * The prompt teaches this string and the nesting check matches on it, so the * place a component READS and the place the floor admits are the same place. */ export declare const kitSlotPath: (name: string, slot: KitSlotSpec) => string; /** Every spec, with each shared adjective folded into the components that read * it — so validation, the wire's allowed-prop set and the screen typings admit * it exactly where it lands, and refuse it where it would be dropped — and its * slots, which the same consumers read. */ export declare const KIT_SPECS: KitComponentSpec[]; /** * EVERY SLOT, keyed by the prop that ARRIVES — the screen VM's copy of the slot * law. * * A slot takes the element, or the function that returns it, and the VM calls * whichever it was given (`genui/component/vm-program.ts` `emitSlot`). That is one * law at two arities: a slot the Kit paints once per row is called with `(row, i)` * and hands over a LIST of elements — which is why the rows have to be reachable * from the same props object, and why those entries say which prop holds them — * and every other slot is called with no arguments and emits the one element it * returns. Written as a function and NOT known here, a slot crosses the VM * boundary as a `$handler` door instead, so the component is handed a callback * where an element belongs and paints blank: this table is what keeps that from * happening, so it is derived from {@link KIT_SPECS} rather than from `SLOTS`, * where the shared adjectives' slots (`hint`) are not yet folded in. * * Two shapes, because a slot is either a prop of its own (`rowActions`) or a * field of the description objects one prop holds (`columns[].cell`) — the same * distinction `at` draws, read from the arriving prop's end. */ export interface KitSlotProp { /** The prop holding the rows the slot is painted once for. Absent means the Kit * paints the slot ONCE, so its function takes no arguments. */ rows?: string; /** The field of each description object that IS the slot, when the arriving * prop is a list of descriptions rather than the slot itself. */ field?: string; } export declare const KIT_SLOT_PROPS: Readonly>>>; /** * THE component vocabulary — one list, derived from the specs, and the single * definition every other name here is a view of (the ui renderer maps them to * `KIT_COMPONENTS`). Nothing recomputes `KIT_SPECS.map(name)` a second time. */ export declare const KIT_COMPONENT_NAMES: readonly string[]; /** * What may be nested where — the one rule the renderer cannot state. * * The tree renderer hands `children` to EVERY node it renders * (`packages/ui/src/tree/renderer.tsx` `builtinContent`), so a chart handed a * child has always rendered as nothing at all: the model wrote content, the * person got a blank, and no stage said a word. This list is what the checks * floor refuses on. */ export declare const KIT_CHILDLESS_NAMES: readonly string[]; /** The same list, as the mutable array `@vendoai/ui`'s registry wants. */ export declare function kitComponentNames(): string[]; /** Look up a single spec by name. */ export declare function kitSpec(name: string): KitComponentSpec | undefined; /** Kit components a SCREEN's prompt must not teach — EMPTY, and the subtraction * below is what keeps it derivable rather than listed by hand. * * `Accordion` was the one name here, for an `items[].content` slot holding an * ELEMENT, which only hand-written JSX can fill. Hand-written JSX is what a * screen IS now, and the type check has admitted the whole Kit all along * (`checking/screen-typings.ts` `screenCatalog`) — so the filter was hiding a * component that renders, and the model was never offered the collapsible * sections a long app asks for. */ export declare const KIT_NON_SCREEN_NAMES: readonly string[]; /** * The Kit names a generated SCREEN may use. These are taught by `kitPrompt`, * typed into the screen's ambient `.d.ts`, and rendered from `KIT_COMPONENTS`. */ export declare const KIT_SCREEN_COMPONENT_NAMES: readonly string[]; /** Prop name → class for one Kit component (law-1 enforcement handle). */ export declare function kitPropClasses(name: string): Readonly> | undefined; //# sourceMappingURL=specs.d.ts.map