import type { CSSProperties, CSSValue, Property, PropertyValueDefinition, PropertyValueMap, StyleFunction, Theme, ThemeProperties, Value } from './types';
export declare class ArbitraryProperty<T extends Value> implements Property<T> {
    property: string;
    toCSS: (value: T) => CSSValue;
    constructor(property: string, toCSS?: (value: T) => CSSValue);
    get cssProperties(): string[];
    toCSSValue(value: T): PropertyValueDefinition<Value>;
    toCSSProperties(customProperty: string | null, value: PropertyValueDefinition<Value>): PropertyValueDefinition<[CSSProperties]>;
}
export declare class MappedProperty<T extends CSSValue> extends ArbitraryProperty<T> implements Property<T> {
    mapping: PropertyValueMap<T> | string[];
    constructor(property: string, mapping: PropertyValueMap<T> | string[]);
    toCSSValue(value: T): PropertyValueDefinition<Value>;
}
export type Color<C extends string> = C | `${string}/${number}`;
export declare class ColorProperty<C extends string> extends MappedProperty<C> implements Property<Color<C>> {
    toCSSValue(value: Color<C>): PropertyValueDefinition<Value>;
}
export type LengthPercentageUnit = '%' | 'vw' | 'svw' | 'dvw' | 'vh' | 'svh' | 'dvh' | 'vmin' | 'svmin' | 'dvmin' | 'vmax' | 'svmax' | 'dvmax' | 'cqw' | 'cqh' | 'cqmin' | 'cqmax';
export type LengthPercentage = `${number}${LengthPercentageUnit}`;
export declare class PercentageProperty<T extends CSSValue> extends MappedProperty<T> implements Property<T | LengthPercentage> {
    constructor(property: string, mapping: PropertyValueMap<T> | string[]);
    toCSSValue(value: T | LengthPercentage): PropertyValueDefinition<Value>;
}
export declare class SizingProperty<T extends CSSValue> extends PercentageProperty<T> implements Property<T | number | LengthPercentage> {
    numberToCSS: (value: number) => string;
    constructor(property: string, mapping: PropertyValueMap<T> | string[], numberToCSS: (value: number) => string);
    toCSSValue(value: T | LengthPercentage | number): PropertyValueDefinition<Value>;
}
export declare class ExpandedProperty<T extends Value> implements Property<T> {
    cssProperties: string[];
    mapping: Property<T> | null;
    expand: (v: T | CSSValue) => CSSProperties;
    constructor(properties: string[], expand: (v: T | CSSValue) => CSSProperties, mapping?: Property<T> | PropertyValueMap<CSSValue>);
    toCSSValue(value: T): PropertyValueDefinition<Value>;
    toCSSProperties(customProperty: string | null, value: PropertyValueDefinition<T>): PropertyValueDefinition<[CSSProperties]>;
}
export declare function parseArbitraryValue(value: Value): string | undefined;
interface MacroContext {
    addAsset(asset: {
        type: string;
        content: string;
    }): void;
}
export declare function createTheme<T extends Theme>(theme: T): StyleFunction<ThemeProperties<T>, 'default' | Extract<keyof T['conditions'], string>>;
/**
 * Injects a raw CSS string into the style system. The CSS is wrapped in a generated
 * class name and placed within the specified `@layer`. Returns the generated class name.
 * This is an escape hatch for advanced cases (e.g. pseudo selectors or features not yet
 * available in the style macro API), and should be used sparingly.
 * Must be imported with `{type: 'macro'}`.
 *
 * @param content - The CSS declarations to inject.
 * @param layer - The CSS `@layer` to place the styles in. Defaults to `'_.a'`.
 * @returns The generated class name that applies the styles.
 *
 * @example
 * ```tsx
 * import {css} from '@react-spectrum/s2/style' with {type: 'macro'};
 *
 * const styles = css(`
 *   backdrop-filter: blur(8px);
 * `);
 * ```
 */
export declare function css(this: MacroContext | void, content: string, layer?: string): string;
export declare function keyframes(this: MacroContext | void, css: string): string;
export {};
