/** A widget's client payload. Data widgets reuse the SAME shapes the navigation * views use, so every renderer already knows how to draw them. */ export declare function widgetPayload(w: any, conceptIdx: Map, id: string): any; /** One ComposedView → the `views[]` payload entry a surface stores under * the view's id. New in t3 (not motion): the constructor exists so that the * dashboard slice and the report slice (t4) build the SAME entry for the * same parameter-free named view — payload equivalence across surfaces as a * fact of construction, not a discipline two modules must keep. */ export declare function viewPayload(cv: { id: string; label: string; widgets: any[]; }, conceptIdx: Map): any; /** * EVERY (document, block) A VIEW WILL ASK FOR AT RUNTIME — found by SHAPE, not * by kind. * * Split mode trims a concept down to the blocks some rows view targets, so this * set decides what survives. It used to be gathered by walking top-level views * and testing `kind === 'rows'`, which missed a `widget: rows` nested in a * composed view and anything nested deeper still (`tabs`). The blocks those * widgets needed were stripped from every concept, and the published dashboard * answered "0 matching row(s) across 0 document(s)" while the charts beside them * drew perfectly — chart data is precomputed. The self-contained artifact was * fine, because it never trims, so only the hosted copy was wrong. * * The lesson is in the shape of this function rather than in the fix. A * `groups` array of `{ path, block, keys }` IS the runtime request: whatever * node carries one will read those rows, whatever it calls itself. Recognising * that shape anywhere in the tree means a widget type invented tomorrow, or a * container nested three deep, is covered without anyone remembering to teach * this function about it. */ export declare function rowGroupsIn(node: any, out?: { path: string; block: string; }[]): { path: string; block: string; }[]; /** * THE INVARIANT, AS SOMETHING A TEST CAN ASSERT ON ANY PAYLOAD. * * A payload is wrong if a view will ask for rows the payload does not carry. * Exported so that every test which builds a split payload can check it without * inventing a fixture that happens to nest a rows widget — the class of bug is * caught by the assertion, not by the cleverness of one test's dashboard. * * Returns the gaps: `{ path, block }` a view references and the shipped concept * cannot answer. Empty means the payload is self-consistent. */ export declare function payloadRowGaps(payload: any): { path: string; block: string; }[];