import { ElementTemplateUpdateOps } from './opcodes.js';
export type SerializableValue = string | number | boolean | null | SerializableValue[] | {
    [key: string]: SerializableValue;
};
export type RuntimeOptions = Record<string, SerializableValue>;
export interface SerializedElementTemplate {
    templateKey: string;
    bundleUrl?: string;
    attributeSlots?: SerializableValue[] | null;
    elementSlots?: SerializedElementTemplate[][] | null;
    uid: number | string;
}
export type CreateTemplateCommand = [
    typeof ElementTemplateUpdateOps.createTemplate,
    handleId: number,
    templateKey: string,
    bundleUrl: string | null | undefined,
    attributeSlots: SerializableValue[] | null | undefined,
    elementSlots: number[][] | null | undefined
];
export type SetAttributeCommand = [
    typeof ElementTemplateUpdateOps.setAttribute,
    targetHandleId: number,
    attrSlotIndex: number,
    value: SerializableValue | null
];
export type InsertNodeCommand = [
    typeof ElementTemplateUpdateOps.insertNode,
    targetHandleId: number,
    elementSlotIndex: number,
    childHandleId: number,
    referenceHandleId: number
];
export type RemoveNodeCommand = [
    typeof ElementTemplateUpdateOps.removeNode,
    targetHandleId: number,
    elementSlotIndex: number,
    childHandleId: number,
    removedSubtreeHandleIds: number[]
];
export type ElementTemplateUpdateCommand = CreateTemplateCommand | SetAttributeCommand | InsertNodeCommand | RemoveNodeCommand;
export type ElementTemplateUpdateCommandStream = ElementTemplateUpdateCommand[number][];
export interface ElementTemplateFlushOptions {
    pipelineOptions?: PipelineOptions;
}
export interface ElementTemplateUpdateCommitContext {
    ops: ElementTemplateUpdateCommandStream;
    flushOptions: ElementTemplateFlushOptions;
    flowIds?: number[];
}
