import type { CoreNodeRenderState } from '../core/CoreNode.js';
/**
 * Types shared between Main Space and Core Space
 *
 * @remarks
 *
 * @module
 */
/**
 * Represents a width and height.
 */
export interface Dimensions {
    width: number;
    height: number;
}
/**
 * Payload for when text is loaded
 */
export type NodeTextLoadedPayload = {
    type: 'text';
    dimensions: Dimensions;
};
/**
 * Payload for when texture is loaded
 */
export type NodeTextureLoadedPayload = {
    type: 'texture';
    dimensions: Dimensions;
};
/**
 * Combined type for all loaded payloads
 */
export type NodeLoadedPayload = NodeTextLoadedPayload | NodeTextureLoadedPayload;
/**
 * Payload for when text failed to load
 */
export type NodeTextFailedPayload = {
    type: 'text';
    error: Error;
};
/**
 * Payload for when texture failed to load
 */
export type NodeTextureFailedPayload = {
    type: 'texture';
    error: Error;
};
/**
 * Payload for when texture failed to load
 */
export type NodeTextureFreedPayload = {
    type: 'texture';
};
/**
 * Combined type for all failed payloads
 */
export type NodeFailedPayload = NodeTextFailedPayload | NodeTextureFailedPayload;
/**
 * Event handler for when the texture/text of a node has loaded
 */
export type NodeLoadedEventHandler = (target: any, payload: NodeLoadedPayload) => void;
/**
 * Event handler for when the texture/text of a node has failed to load
 */
export type NodeFailedEventHandler = (target: any, payload: NodeFailedPayload) => void;
export type NodeRenderStatePayload = {
    type: 'renderState';
    payload: CoreNodeRenderState;
};
export type NodeRenderStateEventHandler = (target: any, payload: NodeRenderStatePayload) => void;
/**
 * Event payload for when an FpsUpdate event is emitted by either the Stage or
 * MainRenderer
 */
export interface FpsUpdatePayload {
    fps: number;
    contextSpyData: Record<string, number> | null;
}
/**
 * Event payload for when a frame tick event is emitted by the Stage
 */
export interface FrameTickPayload {
    time: number;
    delta: number;
}
/**
 * Event payload for when a an animtion tick event is emitted
 */
export interface AnimationTickPayload {
    progress: number;
}
/**
 * Event payload for when an QuadsUpdate event is emitted by the Stage
 */
export interface QuadsUpdatePayload {
    quads: number;
}
