import { DefaultColorContract } from '../consts/default-color-contract.const';
import type { SemanticColorContract } from '../interfaces/semantic-color-contract.interface';
import type { SemanticColorNames } from '../interfaces/semantic-color-names.interface';
import type { ICSSDeclaration } from '../interfaces/css-declaration.interface';
declare class _Color<K extends string, V extends string> implements ICSSDeclaration<K, V, `${K}: ${V}${';' | ''}`, `var(${K}, ${V})`> {
    readonly Key: K;
    readonly Value: V;
    toJSON(): {
        Key: K;
        Value: V;
    };
    toString(): V;
    ToCSSDeclaration(): `${K}: ${V}`;
    ToCSSDeclaration(options: {
        Semicolon: true;
    }): `${K}: ${V};`;
    ToCSSDeclaration(options?: {
        Semicolon?: boolean;
    }): `${K}: ${V}${';' | ''}`;
    ToCSSVariable(): `var(${K}, ${V})`;
    constructor(Key: K, Value: V);
}
type MergeContracts<Base extends Record<SemanticColorNames, SemanticColorContract>, Override extends Partial<Record<SemanticColorNames, SemanticColorContract>>> = {
    [K in keyof Base]: K extends keyof Override ? Override[K] extends SemanticColorContract ? Override[K] : Base[K] : Base[K];
};
type ToColorContract<T extends Record<SemanticColorNames, SemanticColorContract>> = {
    [K in keyof T]: T[K] extends {
        readonly Key: infer K2 extends string;
        readonly Value: infer V2 extends string;
    } ? _Color<K2, V2> : never;
};
/**
 * @example
 * Usage:
 * ```ts
 * const YourAppColor = Color.From({
 *     // Optionally, you can override the default color contract by providing a partial contract object to the `From` method.
 *     Primary: { Key: `--hum-hum`, Value: `abcdefgHumHumHum` },
 * })
 *
 * console.log(YourAppColor.Primary.Value) // abcdefgHumHumHum
 * console.log(YourAppColor.Primary.Key) // --hum-hum
 * console.log(YourAppColor.Primary.ToCSSDeclaration()) // --hum-hum: abcdefgHumHumHum
 * console.log(YourAppColor.Primary.ToCSSVariable()) // var(--hum-hum, abcdefgHumHumHum)
 * ```
 */
export declare class Color<CONTRACT extends Record<SemanticColorNames, _Color<string, string>>> {
    /**
     * {
     *     OnPrimary: _Color({ Key: `--md-sys-color-on-primary`, Value: `light-dark(#ffffff, #00391a)` }),
     *     ...
     * }
     */
    private readonly contract;
    private constructor();
    static From<const C extends Partial<Record<SemanticColorNames, SemanticColorContract>>>(contract?: C): Color<ToColorContract<MergeContracts<typeof DefaultColorContract, C>>>;
    get PrimaryKeyColor(): CONTRACT['PrimaryKeyColor'];
    get SecondaryKeyColor(): CONTRACT['SecondaryKeyColor'];
    get TertiaryKeyColor(): CONTRACT['TertiaryKeyColor'];
    get ErrorKeyColor(): CONTRACT['ErrorKeyColor'];
    get NeutralKeyColor(): CONTRACT['NeutralKeyColor'];
    get NeutralVariantKeyColor(): CONTRACT['NeutralVariantKeyColor'];
    get Background(): CONTRACT['Background'];
    get Error(): CONTRACT['Error'];
    get ErrorContainer(): CONTRACT['ErrorContainer'];
    get ErrorDim(): CONTRACT['ErrorDim'];
    get InverseOnSurface(): CONTRACT['InverseOnSurface'];
    get InversePrimary(): CONTRACT['InversePrimary'];
    get InverseSurface(): CONTRACT['InverseSurface'];
    get OnBackground(): CONTRACT['OnBackground'];
    get OnError(): CONTRACT['OnError'];
    get OnErrorContainer(): CONTRACT['OnErrorContainer'];
    get OnPrimary(): CONTRACT['OnPrimary'];
    get OnPrimaryContainer(): CONTRACT['OnPrimaryContainer'];
    get OnPrimaryFixed(): CONTRACT['OnPrimaryFixed'];
    get OnPrimaryFixedVariant(): CONTRACT['OnPrimaryFixedVariant'];
    get OnSecondary(): CONTRACT['OnSecondary'];
    get OnSecondaryContainer(): CONTRACT['OnSecondaryContainer'];
    get OnSecondaryFixed(): CONTRACT['OnSecondaryFixed'];
    get OnSecondaryFixedVariant(): CONTRACT['OnSecondaryFixedVariant'];
    get OnSurface(): CONTRACT['OnSurface'];
    get OnSurfaceVariant(): CONTRACT['OnSurfaceVariant'];
    get OnTertiary(): CONTRACT['OnTertiary'];
    get OnTertiaryContainer(): CONTRACT['OnTertiaryContainer'];
    get OnTertiaryFixed(): CONTRACT['OnTertiaryFixed'];
    get OnTertiaryFixedVariant(): CONTRACT['OnTertiaryFixedVariant'];
    get Outline(): CONTRACT['Outline'];
    get OutlineVariant(): CONTRACT['OutlineVariant'];
    get Primary(): CONTRACT['Primary'];
    get PrimaryContainer(): CONTRACT['PrimaryContainer'];
    get PrimaryDim(): CONTRACT['PrimaryDim'];
    get PrimaryFixed(): CONTRACT['PrimaryFixed'];
    get PrimaryFixedDim(): CONTRACT['PrimaryFixedDim'];
    get Scrim(): CONTRACT['Scrim'];
    get Secondary(): CONTRACT['Secondary'];
    get SecondaryContainer(): CONTRACT['SecondaryContainer'];
    get SecondaryDim(): CONTRACT['SecondaryDim'];
    get SecondaryFixed(): CONTRACT['SecondaryFixed'];
    get SecondaryFixedDim(): CONTRACT['SecondaryFixedDim'];
    get Shadow(): CONTRACT['Shadow'];
    get Surface(): CONTRACT['Surface'];
    get SurfaceBright(): CONTRACT['SurfaceBright'];
    get SurfaceContainer(): CONTRACT['SurfaceContainer'];
    get SurfaceContainerHigh(): CONTRACT['SurfaceContainerHigh'];
    get SurfaceContainerHighest(): CONTRACT['SurfaceContainerHighest'];
    get SurfaceContainerLow(): CONTRACT['SurfaceContainerLow'];
    get SurfaceContainerLowest(): CONTRACT['SurfaceContainerLowest'];
    get SurfaceDim(): CONTRACT['SurfaceDim'];
    get SurfaceTint(): CONTRACT['SurfaceTint'];
    get SurfaceVariant(): CONTRACT['SurfaceVariant'];
    get Tertiary(): CONTRACT['Tertiary'];
    get TertiaryContainer(): CONTRACT['TertiaryContainer'];
    get TertiaryDim(): CONTRACT['TertiaryDim'];
    get TertiaryFixed(): CONTRACT['TertiaryFixed'];
    get TertiaryFixedDim(): CONTRACT['TertiaryFixedDim'];
    get AllEnums(): {
        readonly PrimaryKeyColor: CONTRACT["PrimaryKeyColor"];
        readonly SecondaryKeyColor: CONTRACT["SecondaryKeyColor"];
        readonly TertiaryKeyColor: CONTRACT["TertiaryKeyColor"];
        readonly ErrorKeyColor: CONTRACT["ErrorKeyColor"];
        readonly NeutralKeyColor: CONTRACT["NeutralKeyColor"];
        readonly NeutralVariantKeyColor: CONTRACT["NeutralVariantKeyColor"];
        readonly Background: CONTRACT["Background"];
        readonly Error: CONTRACT["Error"];
        readonly ErrorContainer: CONTRACT["ErrorContainer"];
        readonly ErrorDim: CONTRACT["ErrorDim"];
        readonly InverseOnSurface: CONTRACT["InverseOnSurface"];
        readonly InversePrimary: CONTRACT["InversePrimary"];
        readonly InverseSurface: CONTRACT["InverseSurface"];
        readonly OnBackground: CONTRACT["OnBackground"];
        readonly OnError: CONTRACT["OnError"];
        readonly OnErrorContainer: CONTRACT["OnErrorContainer"];
        readonly OnPrimary: CONTRACT["OnPrimary"];
        readonly OnPrimaryContainer: CONTRACT["OnPrimaryContainer"];
        readonly OnPrimaryFixed: CONTRACT["OnPrimaryFixed"];
        readonly OnPrimaryFixedVariant: CONTRACT["OnPrimaryFixedVariant"];
        readonly OnSecondary: CONTRACT["OnSecondary"];
        readonly OnSecondaryContainer: CONTRACT["OnSecondaryContainer"];
        readonly OnSecondaryFixed: CONTRACT["OnSecondaryFixed"];
        readonly OnSecondaryFixedVariant: CONTRACT["OnSecondaryFixedVariant"];
        readonly OnSurface: CONTRACT["OnSurface"];
        readonly OnSurfaceVariant: CONTRACT["OnSurfaceVariant"];
        readonly OnTertiary: CONTRACT["OnTertiary"];
        readonly OnTertiaryContainer: CONTRACT["OnTertiaryContainer"];
        readonly OnTertiaryFixed: CONTRACT["OnTertiaryFixed"];
        readonly OnTertiaryFixedVariant: CONTRACT["OnTertiaryFixedVariant"];
        readonly Outline: CONTRACT["Outline"];
        readonly OutlineVariant: CONTRACT["OutlineVariant"];
        readonly Primary: CONTRACT["Primary"];
        readonly PrimaryContainer: CONTRACT["PrimaryContainer"];
        readonly PrimaryDim: CONTRACT["PrimaryDim"];
        readonly PrimaryFixed: CONTRACT["PrimaryFixed"];
        readonly PrimaryFixedDim: CONTRACT["PrimaryFixedDim"];
        readonly Scrim: CONTRACT["Scrim"];
        readonly Secondary: CONTRACT["Secondary"];
        readonly SecondaryContainer: CONTRACT["SecondaryContainer"];
        readonly SecondaryDim: CONTRACT["SecondaryDim"];
        readonly SecondaryFixed: CONTRACT["SecondaryFixed"];
        readonly SecondaryFixedDim: CONTRACT["SecondaryFixedDim"];
        readonly Shadow: CONTRACT["Shadow"];
        readonly Surface: CONTRACT["Surface"];
        readonly SurfaceBright: CONTRACT["SurfaceBright"];
        readonly SurfaceContainer: CONTRACT["SurfaceContainer"];
        readonly SurfaceContainerHigh: CONTRACT["SurfaceContainerHigh"];
        readonly SurfaceContainerHighest: CONTRACT["SurfaceContainerHighest"];
        readonly SurfaceContainerLow: CONTRACT["SurfaceContainerLow"];
        readonly SurfaceContainerLowest: CONTRACT["SurfaceContainerLowest"];
        readonly SurfaceDim: CONTRACT["SurfaceDim"];
        readonly SurfaceTint: CONTRACT["SurfaceTint"];
        readonly SurfaceVariant: CONTRACT["SurfaceVariant"];
        readonly Tertiary: CONTRACT["Tertiary"];
        readonly TertiaryContainer: CONTRACT["TertiaryContainer"];
        readonly TertiaryDim: CONTRACT["TertiaryDim"];
        readonly TertiaryFixed: CONTRACT["TertiaryFixed"];
        readonly TertiaryFixedDim: CONTRACT["TertiaryFixedDim"];
    };
}
export {};
