import { type Observable } from "../../support/observableUtils.js";
import { CollectionProxy } from "../../utilities/CollectionProxy.js";
import type { LayerExtension } from "../_LayerExtension";
import type { SublayerExtension } from "../_SublayerExtension";
/**
 * Properties that can be passed into the ArrayWrappedCollection constructor.
 */
export interface ArrayWrappedCollectionProperties {
    /**
     * The parent of the ArrayWrappedCollection. If a targetProperty is not
     * specified, then the arrayProperty is accessed/watched directly off the
     * parent.
     */
    parent: Observable;
    /**
     * An optional path to another Accessor, relative to the parent, that owns
     * the array being wrapped.
     */
    targetProperty?: string;
    /**
     * The path to the array to be wrapped by the collection. If targetProperty
     * is not specified, the path is relative to the parent; otherwise, the path
     * is relative to the parent[targetProperty].
     */
    arrayProperty: string;
}
/**
 * A collection that wraps an array on an Accessor.
 */
export declare class ArrayWrappedCollection<T> extends CollectionProxy<T> {
    private readonly _parent;
    private readonly _targetProperty;
    private readonly _arrayProperty;
    private get _target();
    constructor(layerExtension: LayerExtension | SublayerExtension, property: string);
    constructor(properties: ArrayWrappedCollectionProperties);
    add(item: T, index?: number): this;
    private _onTargetResolved;
    private _setProp;
    private _getProp;
}
