import type { $Global, Template } from "../common/types";
import { type ServerRenderer } from "./template";
declare const kAssets: unique symbol;
declare const kBlockIndex: unique symbol;
declare const kDeferIndex: unique symbol;
export interface VisibleTrigger {
    type: "visible";
    selector: string;
    options?: {
        rootMargin?: string;
    };
}
export interface IdleTrigger {
    type: "idle";
    selector?: never;
    options?: {
        timeout?: number;
    };
}
export interface MediaTrigger {
    type: "media";
    selector: string;
    options?: never;
}
export interface EventTrigger {
    type: `on-${string}`;
    selector: string;
    options?: never;
}
export type LoadTrigger = VisibleTrigger | IdleTrigger | MediaTrigger | EventTrigger;
type Trigger = LoadTrigger;
interface Asset {
    id: string;
    triggers?: Trigger[];
}
declare module "../common/types" {
    interface $Global {
        [kAssets]?: Asset[];
        [kBlockIndex]?: number;
        [kDeferIndex]?: number;
    }
}
type AssetFlush = (g: $Global, type: "block" | "defer", asset: string) => string;
export declare function withLoadAssets(renderer: ServerRenderer, assetId: string, triggers?: Trigger[]): ServerRenderer;
export declare function withPageAssets(template: ServerRenderer & Template, runtime: AssetFlush, assetId: string, runtimeId?: string): Template;
export declare function _flush_head(): string;
export {};
