import type { IConstruct, IMixin } from 'constructs';
import { MixinApplicator } from './applicator';
import type { IConstructSelector } from './selectors';
/**
 * Main entry point for applying mixins.
 */
export declare class Mixins {
    /**
     * Creates a MixinApplicator for the given scope.
     */
    static of(scope: IConstruct, selector?: IConstructSelector): MixinApplicator;
}
/**
 * Abstract base class for mixins that provides default implementations.
 */
export declare abstract class Mixin implements IMixin {
    /**
     * Checks if `x` is a Mixin.
     *
     * @param x Any object
     * @returns true if `x` is an object created from a class which extends `Mixin`.
     */
    static isMixin(x: any): x is Mixin;
    constructor();
    supports(_construct: IConstruct): boolean;
    abstract applyTo(construct: IConstruct): void;
}
