import EventEmitter from 'eventemitter3';
import { type ColorSource } from '../../color/Color';
import { Matrix } from '../../maths/Matrix';
import { ObservablePoint } from '../../maths/ObservablePoint';
import { LayerGroup } from './LayerGroup';
import type { PointData } from '../../maths/PointData';
import type { Dict } from '../../utils/types';
import type { Renderable } from '../renderers/shared/Renderable';
import type { BLEND_MODES } from '../renderers/shared/state/const';
import type { View } from '../renderers/shared/View';
import type { DestroyOptions } from './destroyTypes';
import type { Effect } from './Effect';
export interface ContainerEvents extends PixiMixins.ContainerEvents {
    added: [container: Container];
    childAdded: [child: Container, container: Container, index: number];
    removed: [container: Container];
    childRemoved: [child: Container, container: Container, index: number];
    destroyed: [];
}
type AnyEvent = {
    [K: ({} & string) | ({} & symbol)]: any;
};
export interface ContainerOptions<T extends View> {
    label?: string;
    layer?: boolean;
    sortableChildren?: boolean;
    view?: T;
}
export declare const UPDATE_COLOR = 1;
export declare const UPDATE_BLEND = 2;
export declare const UPDATE_VISIBLE = 4;
export declare const UPDATE_TRANSFORM = 8;
export interface Container extends Omit<PixiMixins.Container, keyof EventEmitter<ContainerEvents & AnyEvent>>, EventEmitter<ContainerEvents & AnyEvent> {
}
export declare class Container<T extends View = View> extends EventEmitter<ContainerEvents & AnyEvent> implements Renderable {
    /**
     * Mixes all enumerable properties and methods from a source object to Container.
     * @param source - The source of properties and methods to mix in.
     */
    static mixin(source: Dict<any>): void;
    /** @internal */
    uid: number;
    label: string;
    /** @deprecated since 8.0.0 */
    get name(): string;
    /** @deprecated since 8.0.0 */
    set name(value: string);
    /** @internal */
    _updateFlags: number;
    /** @internal */
    isLayerRoot: boolean;
    /** @internal */
    layerGroup: LayerGroup;
    /** @internal */
    didChange: boolean;
    /** @internal */
    didViewUpdate: boolean;
    /** @internal */
    relativeLayerDepth: number;
    children: Container[];
    parent: Container;
    /** @internal */
    includeInBuild: boolean;
    /** @internal */
    measurable: boolean;
    /** @internal */
    isSimple: boolean;
    /** @internal */
    updateTick: number;
    localTransform: Matrix;
    layerTransform: Matrix;
    private _worldTransform;
    destroyed: boolean;
    /**
     * The coordinate of the object relative to the local coordinates of the parent.
     * @internal
     */
    _position: ObservablePoint;
    /**
     * The scale factor of the object.
     * @internal
     */
    _scale: ObservablePoint;
    /**
     * The pivot point of the container that it rotates around.
     * @internal
     */
    _pivot: ObservablePoint;
    /**
     * The skew amount, on the x and y axis.
     * @internal
     */
    _skew: ObservablePoint;
    /**
     * The X-coordinate value of the normalized local X axis,
     * the first column of the local transformation matrix without a scale.
     * @internal
     */
    _cx: number;
    /**
     * The Y-coordinate value of the normalized local X axis,
     * the first column of the local transformation matrix without a scale.
     * @internal
     */
    _sx: number;
    /**
     * The X-coordinate value of the normalized local Y axis,
     * the second column of the local transformation matrix without a scale.
     * @internal
     */
    _cy: number;
    /**
     * The Y-coordinate value of the normalized local Y axis,
     * the second column of the local transformation matrix without a scale.
     * @internal
     */
    _sy: number;
    /** The rotation amount. */
    private _rotation;
    /** @internal */
    localColor: number;
    /** @internal */
    layerColor: number;
    /** @internal */
    localBlendMode: BLEND_MODES;
    /** @internal */
    layerBlendMode: BLEND_MODES;
    /** @internal */
    localVisibleRenderable: number;
    /** @internal */
    layerVisibleRenderable: number;
    effects: Effect[];
    addEffect(effect: Effect): void;
    removeEffect(effect: Effect): void;
    readonly view: T;
    constructor({ label, layer, view, sortableChildren }?: ContainerOptions<T>);
    /**
     * Adds one or more children to the container.
     *
     * Multiple items can be added like so: `myContainer.addChild(thingOne, thingTwo, thingThree)`
     * @param {...Container} children - The Container(s) to add to the container
     * @returns {Container} - The first child that was added.
     */
    addChild<U extends Container[]>(...children: U): U[0];
    /**
     * Removes one or more children from the container.
     * @param {...Container} children - The Container(s) to remove
     * @returns {Container} The first child that was removed.
     */
    removeChild<U extends Container[]>(...children: U): U[0];
    /**
     * @param point
     * @internal
     */
    onUpdate(point?: ObservablePoint): void;
    /** @internal */
    onViewUpdate(): void;
    set layer(value: boolean);
    get layer(): boolean;
    enableLayer(): void;
    get worldTransform(): Matrix;
    /**
     * The position of the container on the x axis relative to the local coordinates of the parent.
     * An alias to position.x
     */
    get x(): number;
    set x(value: number);
    /**
     * The position of the container on the y axis relative to the local coordinates of the parent.
     * An alias to position.y
     */
    get y(): number;
    set y(value: number);
    get position(): ObservablePoint;
    set position(value: PointData);
    /**
     * The rotation of the object in radians.
     * 'rotation' and 'angle' have the same effect on a display object; rotation is in radians, angle is in degrees.
     */
    get rotation(): number;
    set rotation(value: number);
    /**
     * The angle of the object in degrees.
     * 'rotation' and 'angle' have the same effect on a display object; rotation is in radians, angle is in degrees.
     */
    get angle(): number;
    set angle(value: number);
    get pivot(): ObservablePoint;
    set pivot(value: PointData);
    get skew(): ObservablePoint;
    get scale(): ObservablePoint;
    set scale(value: PointData);
    /** Called when the skew or the rotation changes. */
    private _updateSkew;
    set alpha(value: number);
    get alpha(): number;
    set tint(value: ColorSource);
    get tint(): ColorSource;
    set blendMode(value: BLEND_MODES);
    get blendMode(): BLEND_MODES;
    get visible(): boolean;
    set visible(value: boolean);
    get renderable(): boolean;
    set renderable(value: boolean);
    get isRenderable(): boolean;
    private _updateIsSimple;
    /**
     * Removes all internal references and listeners as well as removes children from the display list.
     * Do not use a Container after calling `destroy`.
     * @param options - Options parameter. A boolean will act as if all options
     *  have been set to that value
     * @param {boolean} [options.children=false] - if set to true, all the children will have their destroy
     *  method called as well. 'options' will be passed on to those calls.
     * @param {boolean} [options.texture=false] - Only used for children with textures e.g. Sprites. If options.children
     * is set to true it should destroy the texture of the child sprite
     * @param {boolean} [options.textureSource=false] - Only used for children with textures e.g. Sprites.
     * If options.children is set to true it should destroy the texture source of the child sprite
     * @param {boolean} [options.context=false] - Only used for children with graphicsContexts e.g. Graphics.
     * If options.children is set to true it should destroy the context of the child graphics
     */
    destroy(options?: DestroyOptions): void;
}
export {};
