import type { App } from '../App'; import type { Node } from '../Node'; import type { Group } from '../shapes/Group'; export declare function clamp(v: number, min: number, max: number): number; export declare function num(props: Record, key: string, fallback: number): number; export declare function str(props: Record, key: string, fallback?: string): string; export declare function bool(props: Record, key: string, fallback?: boolean): boolean; export declare function getState(node: Node): Record; export declare function setState(node: Node, patch: Record): void; export declare function bindApp(node: Node, app: App): void; export declare function createWidgetGroup(app: App, type: string, props: Record, extra?: Record): Group; export type RefreshFn = (value: number) => void; export declare function setRefresh(node: Node, fn: RefreshFn): void; /** Animate a numeric widget value with optional refresh callback. */ export declare function animateLiveValue(node: Node, key: string, toValue: number, duration?: number): void; export declare function setLiveValue(node: Node, key: string, value: number): void; export declare function dashboardToJSON(node: Node): import('../types').SceneJSON; export declare function getParts(node: Node): Record; export declare function setParts(node: Node, parts: Record): void;