import { MarkupEntity, MarkupEntityConstructorArgs } from './MarkupEntity';
import { MarkupEntityBase } from './MarkupEntityBase';
import { MarkupSheet2DCollection } from './MarkupSheet2DCollection';
import { MergableObjectEventArgs, MergableObjectState, MergableObjectWithState } from '../../MergableSet';
import { MarkupProperty } from '../MarkupEntityTypes';
/**
 * Class representing a markup sheet in the markup API.
 */
export declare class MarkupSheet2D extends MarkupEntityBase {
    readonly parent: MarkupSheet2DCollection;
    isEnabled: boolean;
    /**
     * Do not use. Use {@link MarkupSheet2DCollection.addSheet} instead.
     * @hidden
     */
    constructor(id: string, parent: MarkupSheet2DCollection, properties?: Map<string, MarkupProperty>);
    onAdded(o: MergableObjectEventArgs<MarkupSheet2D>): void;
    onUpdate(o: MergableObjectEventArgs<MarkupSheet2D>): void;
    onDelete(o: MergableObjectEventArgs<MarkupSheet2D>): void;
    isEqual(o: MarkupSheet2D): boolean;
    clone(): MarkupSheet2D;
    [Symbol.iterator](): IterableIterator<MarkupEntity>;
    /**
     * @param states Array of states used to filter out entities, default is [MergableObjectState.Added, MergableObjectState.Modified, MergableObjectState.Unchanged].
     * @example
     * ```typescript
     * // Loops all modified entities in this sheet.
     * for(const modifiedEntity of sheet.entities([MergableObjectState.Modified])) {
     *  modifiedEntity.x = 10;
     *  modifiedEntity.update();
     * }
     * ```
     */
    entites(states?: MergableObjectState[]): IterableIterator<MarkupEntity>;
    /**
     * @param ctor Entity type to add to the sheet
     * @param entitySpecifics specific parameters for that entity type.
     * @returns a new entity that has been added to the sheet.
     */
    add<ARG, RET extends MarkupEntity>(ctor: new (args: MarkupEntityConstructorArgs & ARG) => RET, entitySpecifics: ARG, properties?: Map<string, MarkupProperty>): RET;
    /**
     * Get a markup entity based on an id.
     * @param entityOrId id of markup entity you want to get.
     * @returns The markup entity corralating to the id if it exists in the sheet.
     */
    get(entityOrId: Pick<MarkupEntity, 'id'> | string): MergableObjectWithState<MarkupEntity> | undefined;
    /**
     * Marks the sheet as updated in the {@link MarkupSheet2DCollection}.
     */
    markAsUpdated(): boolean;
    /**
     * Mark this sheet to be deleted on the next {@link MarkupSheet2DCollection.saveAndMergeSheets}.
     * @returns true if sheet was deleted, false if it failed to delete.
     */
    markAsDeleted(): boolean;
    /**
     * Duplicates the sheet and all its entities.
     * @param id Id of the new duplicate sheet.
     * @returns The new duplicate sheet.
     */
    duplicate(id: string): MarkupSheet2D;
}
//# sourceMappingURL=MarkupSheet2D.d.ts.map