/** * S2 — the pinned app's remembered silhouette. * * A slot repaints its skeleton on EVERY mount (use-app.ts refetches get+open * and the server re-runs the screen), so the wait is honest but shapeless: a * generic shimmer standing in front of an app the person has already seen. * This remembers what its BOXES look like — layout only, never a value — so the * next wait is drawn in the shape of the thing that is coming. * * Same storage manners as discoverability.ts and last-thread.ts: one `vendo:` * key per app, and degraded environments (SSR, sandboxed iframe, blocked or * full storage) read as "nothing remembered" while writes stay silent. */ import { type UIPayload } from "../../core/index.js"; import { type FormShape } from "../tree/forming-skeleton.js"; /** One bone. `line` is a kit VALUE (Text, a Link, an Icon) — one typographic line * whatever the datum behind it; every other kind is deriveFormShape's own * vocabulary, unchanged. */ export interface ShapeBox { kind: FormShape | "line"; } /** What one app's key holds. `v` is the served tree's content hash, so an edit * replaces the silhouette instead of outliving it. */ export interface AppShape { v: string; boxes: ShapeBox[]; } /** The remembered silhouette. Nothing stored, a record we cannot read, or an * app with no bones all answer undefined — the slot falls back to the calm * generic ghost. */ export declare function rememberedShape(appId: string): ShapeBox[] | undefined; /** The silhouette this SLOT last held — what it waits in while the placements * read is still in flight and the app coming back is not named yet. Without one * the slot falls back to the generic ghost; either way it must not paint the * empty-slot invite, which is a claim about a slot nothing is pinned in. */ export declare function rememberedSlotShape(slotId: string): ShapeBox[] | undefined; /** Remember which app is in this slot. Best-effort, like every write here. */ export declare function rememberSlotApp(slotId: string, appId: string): void; /** Remember what the served tree looks like. Only a tree surface has insides we * can see, so an iframe-served app never reaches here and keeps the generic * ghost forever. Best-effort, and a no-op when this version is already held. */ export declare function rememberShape(appId: string, payload: UIPayload): void;