/** * The press — every control the screen paints, activated once, to answer the * one question no compiler asks: does this button DO anything? * * A screen can compile, type-check, and paint a perfect-looking "Book * appointment" button whose handler falls out of an early `return` and reaches * no tool and no state. Every stage before this one reads the screen; this one * USES it. A control is judged on what a press produces, and there are only * three outcomes: it asks the host for a tool call, it changes what is painted, * or it does nothing at all — and the third is a dead control. * * NOTHING IS PERFORMED. A `tools.x()` inside a handler records an {@link Intent} * and returns a promise nobody here resolves (./boot.ts) — the tool bridge is * the ONLY way anything leaves the VM, and this file never calls * `ScreenInstance.settle`. So pressing a "Delete everything" button observes the * request and performs no part of it, against a live host or any other. * * A FRESH SCREEN PER PRESS. A press that opens a dialog or fills a field leaves * the next press somewhere the person never was, and its handler ids may name * nodes that are gone. Booting again costs about four milliseconds, which is * cheaper than any reasoning about what the last press left behind — so every * control is judged on the screen the person is FIRST shown. */ import { type FlatTree, type InertControl, type ScreenInstance } from "./types.js"; /** * Press every control on `painted` and report the ones that did nothing. * * `boot` mints a screen from the same input that produced `painted` — the * caller's, because only the caller knows which engine and which budget this * venue runs on. A boot that fails is left to raise: a gate that could not run * the screen must not read its own silence as a screen with no dead controls. */ export declare function pressControls(painted: FlatTree, boot: () => ScreenInstance): InertControl[]; //# sourceMappingURL=press.d.ts.map