import { InstancedBufferAttribute, Object3D } from 'three';
import { MaterialClass } from './panel-material.js';
import { InstancedPanel } from './instanced-panel.js';
import { OrderInfo, WithReversePainterSortStableCache } from '../order.js';
import { Signal } from '@preact/signals-core';
import { MergedProperties } from '../properties/merged.js';
import { RootContext } from '../context.js';
export type ShadowProperties = {
    receiveShadow?: boolean;
    castShadow?: boolean;
};
export type RenderProperties = {
    depthWrite?: boolean;
    depthTest?: boolean;
    renderOrder?: number;
};
export type PanelGroupProperties = {
    panelMaterialClass?: MaterialClass;
} & ShadowProperties & RenderProperties;
export declare function computedPanelGroupDependencies(propertiesSignal: Signal<MergedProperties>): import("@preact/signals-core").ReadonlySignal<Required<PanelGroupProperties>>;
export declare class PanelGroupManager {
    private readonly root;
    private readonly objectRef;
    private map;
    constructor(root: WithReversePainterSortStableCache & Pick<RootContext, 'onFrameSet' | 'requestFrame' | 'requestRender' | 'pixelSize'>, objectRef: {
        current?: Object3D | null;
    });
    init(abortSignal: AbortSignal): void;
    private traverse;
    getGroup(majorIndex: number, properties: Required<PanelGroupProperties>): InstancedPanelGroup;
}
export declare class InstancedPanelGroup {
    private readonly object;
    readonly root: WithReversePainterSortStableCache & Pick<RootContext, 'requestFrame' | 'requestRender' | 'pixelSize'>;
    private readonly orderInfo;
    private readonly panelGroupProperties;
    private mesh?;
    instanceMatrix: InstancedBufferAttribute;
    instanceData: InstancedBufferAttribute;
    instanceClipping: InstancedBufferAttribute;
    private readonly instanceMaterial;
    private buckets;
    private elementCount;
    private bufferElementSize;
    instanceDataOnUpdate: InstancedBufferAttribute['addUpdateRange'];
    private nextUpdateTime;
    private nextUpdateTimeoutRef;
    private activateElement;
    private setElementIndex;
    private bufferCopyWithin;
    private clearBufferAt;
    constructor(object: Object3D, root: WithReversePainterSortStableCache & Pick<RootContext, 'requestFrame' | 'requestRender' | 'pixelSize'>, orderInfo: OrderInfo, panelGroupProperties: Required<PanelGroupProperties>);
    private updateCount;
    private requestUpdate;
    private requestUpdateNextFrame;
    insert(bucketIndex: number, panel: InstancedPanel): void;
    delete(bucketIndex: number, elementIndex: number | undefined, panel: InstancedPanel): void;
    onFrame(): void;
    private update;
    private resize;
    destroy(): void;
}
