import { type Constructor, type IComponent } from "./engine_types.js";
declare type setter = (v: any) => void;
declare type getter = () => any;
/**
 * Marks a field to trigger the `onValidate` callback when its value changes.
 * Useful for reacting to property changes from the editor or at runtime.
 *
 * Your component must implement `onValidate(property?: string)` to receive notifications.
 *
 * @param set Optional custom setter called before the value is assigned
 * @param get Optional custom getter called when the value is read
 *
 * @example Basic usage
 * ```ts
 * export class MyComponent extends Behaviour {
 *   @serializable()
 *   @validate()
 *   color: Color = new Color(1, 0, 0);
 *
 *   onValidate(property?: string) {
 *     if (property === "color") {
 *       console.log("Color changed to:", this.color);
 *     }
 *   }
 * }
 * ```
 * @example With custom setter
 * ```ts
 * @validate(function(value) {
 *   console.log("Setting speed to", value);
 * })
 * speed: number = 1;
 * ```
 */
export declare const validate: (set?: setter, get?: getter) => (target: IComponent | any, propertyKey: string, descriptor?: undefined) => void;
/** Experimental attribute
 * Use to hook into another type's methods and run before the other methods run (similar to Harmony prefixes).
 * Return false to prevent the original method from running.
 */
export declare const prefix: <T>(type: Constructor<T>) => (target: IComponent | any, _propertyKey: string | {
    name: string;
}, _PropertyDescriptor: PropertyDescriptor) => void;
export {};
