export type Prop<K extends string, TExternal, TInternal> = {
    [P in K]: TInternal;
} & {
    [P in K as `__input_${P}`]?: TExternal;
} & {
    readonly __propInternal__?: TInternal;
};
export type SimpleProp<K extends string, T> = Prop<K, T, T>;
export type InternalPropValue<P extends Prop<string, unknown, unknown>> = NonNullable<P['__propInternal__']>;
export type ExtractPropKey<P extends Prop<string, unknown, unknown>> = Exclude<keyof P, keyof {
    __propInternal__: unknown;
} | `__input_${string}`> extends infer K extends string ? K : never;
export type PropDefinition<TInternal, P extends Prop<string, unknown, unknown> = Prop<string, unknown, TInternal>> = {
    readonly __phantomProp__?: P;
    readonly propName: string;
    getDefaultValue(): TInternal;
    normalize: (value: unknown) => TInternal | never;
    validate: (value: TInternal) => boolean;
    apply: (value: unknown, callback: (normalized: TInternal) => void) => void;
};
export declare function createPropDefinition<P extends Prop<string, unknown, unknown>, K extends ExtractPropKey<P> = ExtractPropKey<P>>(propName: K, defaultValue: InternalPropValue<P>, normalize: (value: unknown) => InternalPropValue<P> | never, validate?: (value: InternalPropValue<P>) => boolean): PropDefinition<InternalPropValue<P>, P>;
export type DependentPropDefinition<TInternal, TDeps, P extends Prop<string, unknown, unknown> = Prop<string, unknown, TInternal>> = {
    readonly __phantomProp__?: P;
    readonly propName: string;
    getDefaultValue(): TInternal;
    normalize: (value: unknown, deps: TDeps) => TInternal | never;
    validate: (value: TInternal, deps: TDeps) => boolean;
    apply: (value: unknown, callback: (normalized: TInternal) => void, deps: TDeps) => void;
};
export declare function createDependentPropDefinition<P extends Prop<string, unknown, unknown>, TDeps = unknown>(propName: ExtractPropKey<P>, defaultValue: InternalPropValue<P>, normalize: (value: unknown, deps: TDeps) => InternalPropValue<P> | never, validate?: (value: InternalPropValue<P>, deps: TDeps) => boolean): DependentPropDefinition<InternalPropValue<P>, TDeps, P>;
