export class UIControl extends Node { constructor(name: any); size: { width: number; height: number; }; backgroundColor: { r: number; g: number; b: number; a: number; }; borderColor: { r: number; g: number; b: number; a: number; }; borderWidth: number; enabled: boolean; hovered: boolean; pressed: boolean; focused: boolean; onClick: any; onMouseEnter: any; onMouseLeave: any; onMouseDown: any; onMouseUp: any; containsPoint(screenX: any, screenY: any): boolean; getScreenBounds(): { x: number; y: number; width: number; height: number; }; /** * Handle mouse event (called by UIRoot) */ handleMouseEvent(event: any): boolean; /** * Draw control (override in subclasses) */ _draw(canvas: any): void; } /** * Label - text display * * Uses tessera.js BitmapFont for rendering */ export class Label extends UIControl { constructor(text?: string, options?: {}); text: string; fontSize: any; color: any; font: any; autoSize: boolean; } /** * Button - clickable button with text */ export class Button extends UIControl { constructor(text?: string, options?: {}); text: string; fontSize: any; textColor: any; font: any; normalColor: any; hoverColor: any; pressedColor: any; disabledColor: any; backgroundColor: any; } /** * ProgressBar - visual bar showing progress (health, mana, loading) */ export class ProgressBar extends UIControl { constructor(name?: string); value: number; fillColor: { r: number; g: number; b: number; a: number; }; emptyColor: { r: number; g: number; b: number; a: number; }; } /** * Panel - container for other UI elements * * Can be used for: * - Dialog boxes * - Inventory grids * - Settings menus */ export class Panel extends UIControl { constructor(name?: string); } /** * UIRoot - manages UI hierarchy and input * * Why separate from Scene: * - UI doesn't need camera transforms * - Different input handling (screen coordinates) * - Separate update/draw loop * * Acts as event dispatcher for mouse/touch events */ export class UIRoot { constructor(canvas: any); canvas: any; root: UIControl; mousePosition: { x: number; y: number; }; focusedControl: any; hoveredControl: any; addChild(control: any): Node; removeChild(control: any): void; /** * Update UI (called every frame) */ update(delta: any): void; /** * Handle mouse input * * @param {Object} inputMap - tessera.js InputMap */ handleInput(inputMap: any): void; /** * Dispatch mouse event to controls (depth-first) * * Returns true if event was consumed */ dispatchMouseEvent(event: any, node?: UIControl): boolean; /** * Draw UI (called after game scene) */ draw(): void; /** * Find control at screen position (for debugging) */ getControlAt(x: any, y: any, node?: UIControl): any; } /** * Layout helpers - common UI layout patterns */ export class UILayout { /** * Vertical layout - stack controls vertically * * @param {Array} controls - Controls to layout * @param {number} startY - Starting Y position * @param {number} spacing - Space between controls */ static vertical(controls: Array, startX: any, startY: number, spacing?: number): void; /** * Horizontal layout - stack controls horizontally */ static horizontal(controls: any, startX: any, startY: any, spacing?: number): void; /** * Grid layout - arrange controls in grid */ static grid(controls: any, startX: any, startY: any, columns: any, cellWidth: any, cellHeight: any, spacing?: number): void; /** * Center control on screen */ static center(control: any, screenWidth: any, screenHeight: any): void; /** * Anchor to screen edge * * @param {string} anchor - "top-left", "top-right", "bottom-left", "bottom-right" */ static anchor(control: any, anchor: string, screenWidth: any, screenHeight: any, margin?: number): void; } import { Node } from "./core.js";