import { Cancellable } from "@lincode/promiselikes";
import type Appendable from "../../display/core/Appendable";
type Ticker = "beforeRender" | "afterRender" | "render" | "loop";
type SetupTicker = Ticker | typeof queueMicrotask | [() => Promise<void>];
export type SystemOptions<GameObject extends object | Appendable, Data extends Record<string, any> | void> = {
    data?: Data | ((gameObject: GameObject) => Data);
    effect?: (gameObject: GameObject, data: Data) => void | false | (() => void);
    cleanup?: (gameObject: GameObject, data: Data) => void;
    update?: (gameObject: GameObject, data: Data) => void;
    updateTicker?: Ticker;
    effectTicker?: SetupTicker;
    beforeTick?: (queued: Map<GameObject, Data> | Set<GameObject>) => void;
    afterTick?: (queued: Map<GameObject, Data> | Set<GameObject>) => void;
    sort?: (a: GameObject, b: GameObject) => number;
};
declare const _default: <GameObject extends object | Appendable, Data extends void | Record<string, any>>(name: string, { data, effect, cleanup, update, updateTicker, effectTicker, beforeTick, afterTick, sort }: SystemOptions<GameObject, Data>, userland?: boolean) => {
    add: ((item: GameObject, initData?: Data | undefined) => false | Cancellable) | ((item: GameObject, initData?: Data | undefined) => boolean);
    delete: ((item: GameObject) => false | Cancellable | undefined) | ((item: GameObject) => boolean);
};
export default _default;
