import { GdsElement } from '../../gds-element';
type Constructor<T = GdsElement> = new (...args: any[]) => T;
/**
 * MixinsBuilder allows for a more declarative way to compose mixins.
 *
 * Example:
 * ```ts
 * class MyElement extends mix(GdsElement).with(marginProps).and(paddingProps).final() {
 * ...
 * }
 * ```
 *
 * Currently we don't use it because the Custom Elements Manifest analyzer has trouble
 * decoding the resulting classes.
 */
declare class MixinBuilder<TAccumulated extends Constructor> {
    private baseClass;
    constructor(baseClass: TAccumulated);
    with<TMixin extends Constructor>(mixin: (Base: TAccumulated) => TMixin): MixinBuilder<TMixin>;
    and<TMixin extends Constructor>(mixin: (Base: TAccumulated) => TMixin): MixinBuilder<TMixin>;
    final(): TAccumulated;
}
export declare function mix<TBase extends Constructor>(BaseClass: TBase): MixinBuilder<TBase>;
export {};
