import { types } from "typestyle";
import { NestedCSSPropertiesExtends } from "@omnia/fx/models";
type CSSClassNames<T extends string> = {
    [P in T]?: string | any;
};
type CSSClasses<K extends keyof any> = CustomRecord<K, types.NestedCSSProperties>;
type CSSClassesExtends<K extends string> = CustomRecord<K, NestedCSSPropertiesExtends>;
type CustomRecord<K extends keyof any, T> = {
    [P in K]?: T | ((...args: any[]) => T);
};
export declare module StyleFlow {
    export function define<TCSSClasses extends CSSClasses<any> = any>(targetCSSClasses: TCSSClasses, classes?: TCSSClasses, prefixClassName?: string): TCSSClasses;
    export function override<T extends CSSClassesExtends<string>>(target: T): InternalStyleFlow.StyleOverride<T>;
    export function use<Names extends string = any>(targetCSSClasses: CSSClassesExtends<Names>, ...mergeCSSClasses: Array<CSSClassesExtends<Names>>): CSSClassNames<Names>;
    /**
     * Takes CSSProperties and registers it to a global selector (body, html, etc.)
     */
    export function stylesheet(selector: string, ...objects: types.NestedCSSProperties[]): void;
    module InternalStyleFlow {
        function define<Names extends string = any, TCSSClasses extends CSSClasses<Names> = any>(target: TCSSClasses, classes?: TCSSClasses, prefixClassName?: string): TCSSClasses;
        function override<T>(target: T): StyleOverride<T>;
        function use<Names extends string = any>(target: CSSClassesExtends<Names>, ...mergeCSSClasses: Array<CSSClassesExtends<Names>>): CSSClassNames<Names>;
        function stylesheet(selector: string, ...objects: types.NestedCSSProperties[]): void;
        class StyleOverride<T> {
            private target;
            constructor(target: T);
            define<K extends keyof T>(classes: T, 
            /**
             * This influence the order of the nodes, be nice, use ordering with gap -100, 0, 100, 200
               So other extensions etc can inject between
             */
            weight?: number): void;
        }
    }
    export {};
}
export {};
