/** * RFC 7386 JSON merge patch, for HUD theme edits. * * Why merge patch and not path-based `{path, value}` edits: a merge patch IS * the theme's own shape — `{ colors: { primary: "#FF8800" } }` — so the model * emits the one notation it already knows from reading themes, instead of * inventing dotted path strings it can typo. Deletion is `null` at the key * (RFC 7386), which is how "remove the outline" and "clear glowColor" are * expressed without a second vocabulary. * * The patch applies to a base and the MERGED result is validated as a whole * theme, so a patch can never sneak an invalid leaf past the checks that a * full write would catch. */ export declare function applyMergePatch(base: unknown, patch: unknown): unknown; export interface ThemeDiffEntry { path: string; from: unknown; to: unknown; } /** * Leaf-level differences between two themes, as dotted paths. Feeds the * report's `changed:` line — the model's confirmation of what its edit * actually did (and, on a full replace, of everything it changed without * meaning to). */ export declare function diffThemes(before: unknown, after: unknown, prefix?: string): ThemeDiffEntry[]; /** * Delete the leaf at a dotted validator path ("elements.healthBar.colors.background"). * Returns false when the path does not resolve — the caller then leaves the * error in place rather than pretending it fixed something. Companion to the * patch flows: a STORED base can carry pre-strict-era leaves the engine already * ignores, and pruning them (with a warning) is what lets an unrelated patch * apply instead of failing at paths it never touched. */ export declare function deleteAtPath(target: Record, dottedPath: string): boolean;