/**
 * Copyright (c) 2018-2025 mol* contributors, licensed under MIT, See LICENSE file for more info.
 *
 * @author Alexander Rose <alexander.rose@weirdbyte.de>
 */
import { SizeType, LocationSize } from '../mol-geo/geometry/size-data.js';
import { ParamDefinition as PD } from '../mol-util/param-definition.js';
import { ThemeDataContext, ThemeRegistry, ThemeProvider } from '../mol-theme/theme.js';
export { SizeTheme };
interface SizeTheme<P extends PD.Params> {
    readonly factory: SizeTheme.Factory<P>;
    readonly granularity: SizeType;
    readonly size: LocationSize;
    readonly props: Readonly<PD.Values<P>>;
    readonly contextHash?: number;
    readonly description?: string;
}
declare namespace SizeTheme {
    export type Props = {
        [k: string]: any;
    };
    export type Factory<P extends PD.Params> = (ctx: ThemeDataContext, props: PD.Values<P>) => SizeTheme<P>;
    export const EmptyFactory: () => SizeTheme<{}>;
    export const Empty: SizeTheme<{}>;
    export function areEqual(themeA: SizeTheme<any>, themeB: SizeTheme<any>): boolean;
    export interface Provider<P extends PD.Params = any, Id extends string = string> extends ThemeProvider<SizeTheme<P>, P, Id> {
    }
    export const EmptyProvider: Provider<{}>;
    export type Registry = ThemeRegistry<SizeTheme<any>>;
    export function createRegistry(): ThemeRegistry<SizeTheme<{}>>;
    export const BuiltIn: {
        physical: Provider<{
            scale: PD.Numeric;
        }, "physical">;
        'shape-group': Provider<{}, "shape-group">;
        uncertainty: Provider<{
            bfactorFactor: PD.Numeric;
            rmsfFactor: PD.Numeric;
            baseSize: PD.Numeric;
        }, "uncertainty">;
        uniform: Provider<{
            value: PD.Numeric;
        }, "uniform">;
        'volume-value': Provider<{
            scale: PD.Numeric;
        }, "volume-value">;
    };
    type _BuiltIn = typeof BuiltIn;
    export type BuiltIn = keyof _BuiltIn;
    export type ParamValues<C extends SizeTheme.Provider<any>> = C extends SizeTheme.Provider<infer P> ? PD.Values<P> : never;
    export type BuiltInParams<T extends BuiltIn> = Partial<ParamValues<_BuiltIn[T]>>;
    export {};
}
