type PropBase<Type = any> = {
    title?: string;
    description?: string;
    default?: Type;
};
export declare enum PropTypeNames {
    'string' = "string",
    'boolean' = "boolean",
    'number' = "number",
    'object' = "object",
    'options' = "options",
    'function' = "function",
    'customTypeScript' = "customTypeScript",
    'array' = "array",
    'arrayOfObjects' = "arrayOfObjects",
    'arrayOfStrings' = "arrayOfStrings",
    'arrayOfNumbers' = "arrayOfNumbers",
    'unknown' = "unknown"
}
export type PropTypeNamesList = keyof typeof PropTypeNames;
export type StringProp = {
    type: 'string';
} & PropBase<string>;
export type BooleanProp = {
    type: 'boolean';
} & PropBase<boolean>;
export type NumberProp = {
    type: 'number';
} & PropBase<number>;
export type OptionsProp = {
    type: 'string' | 'number';
    enum: Array<string | number>;
    enumNames?: string[];
} & PropBase<string | number>;
export type CustomTypeScriptProp = {
    /**
     * TypeScript type
     * @example (name: string) => void
     */
    tsType: string;
    type?: never;
    default?: string;
} & PropBase<string>;
export type FunctionProp = {
    typeof: 'function';
    /**
     * TypeScript type
     * @example (name: string) => void
     */
    tsType: string;
    default?: string;
    type?: 'string';
} & PropBase<string>;
export type ObjectProp = {
    type: 'object';
    additionalProperties?: boolean;
    required?: string[];
    properties: {
        [prop: string]: PropertyTypes;
    };
} & PropBase;
export type ArrayProp = {
    type: 'array';
    items: PropertyTypes;
} & PropBase<unknown[]>;
export type ArrayOfStringsProp = {
    type: 'array';
    uniqueItems?: boolean;
    items: StringProp;
} & PropBase<unknown[]>;
export type ArrayOfNumbersProp = {
    type: 'array';
    uniqueItems?: boolean;
    items: NumberProp;
} & PropBase<number[]>;
export type ArrayOfObjectsProp = {
    type: 'array';
    items: ObjectProp;
} & PropBase<Array<Record<string, unknown>>>;
export type PropertyTypes = StringProp | BooleanProp | NumberProp | OptionsProp | FunctionProp | CustomTypeScriptProp | ObjectProp | ArrayOfObjectsProp | ArrayOfStringsProp | ArrayOfNumbersProp | ArrayProp;
export declare const isStringProp: (prop: PropertyTypes) => prop is StringProp;
export declare const isNumberProp: (prop: PropertyTypes) => prop is NumberProp;
export declare const isBooleanProp: (prop: PropertyTypes) => prop is BooleanProp;
export declare const isOptionsProp: (prop: PropertyTypes) => prop is OptionsProp;
export declare const isFunctionProp: (prop: PropertyTypes) => prop is FunctionProp;
export declare const isCustomTypeScriptProp: (prop: PropertyTypes) => prop is CustomTypeScriptProp;
export declare const isArrayOfObjectsProp: (prop: PropertyTypes) => prop is ArrayOfObjectsProp;
export declare const isObjectProp: (prop: PropertyTypes) => prop is ObjectProp;
export declare const isArrayOfStringsProp: (prop: PropertyTypes) => prop is ArrayOfStringsProp;
export declare const isArrayOfNumbersProp: (prop: PropertyTypes) => prop is ArrayOfNumbersProp;
export interface PropTypeDataBase {
    type: any;
    id: string;
    isRequired?: boolean;
    data: any;
}
export interface StringPropTypeData extends PropTypeDataBase {
    type: typeof PropTypeNames.string;
    data: StringProp;
}
export interface BooleanPropTypeData extends PropTypeDataBase {
    type: typeof PropTypeNames.boolean;
    data: BooleanProp;
}
export interface NumberPropTypeData extends PropTypeDataBase {
    type: typeof PropTypeNames.number;
    data: NumberProp;
}
export interface OptionsPropTypeData extends PropTypeDataBase {
    type: typeof PropTypeNames.options;
    data: OptionsProp;
}
export interface FunctionPropTypeData extends PropTypeDataBase {
    type: typeof PropTypeNames.function;
    data: FunctionProp;
}
export interface CustomTypeScriptPropTypeData extends PropTypeDataBase {
    type: typeof PropTypeNames.customTypeScript;
    data: CustomTypeScriptProp;
}
export interface ObjectPropTypeData extends PropTypeDataBase {
    type: typeof PropTypeNames.object;
    data: ObjectProp;
}
export interface ArrayOfObjectsPropTypeData extends PropTypeDataBase {
    type: typeof PropTypeNames.arrayOfObjects;
    data: ArrayOfObjectsProp;
}
export interface ArrayOfStringsPropTypeData extends PropTypeDataBase {
    type: typeof PropTypeNames.arrayOfStrings;
    data: ArrayOfStringsProp;
}
export interface ArrayOfNumbersPropTypeData extends PropTypeDataBase {
    type: typeof PropTypeNames.arrayOfNumbers;
    data: ArrayOfNumbersProp;
}
export interface ArrayPropTypeData extends PropTypeDataBase {
    type: typeof PropTypeNames.array;
    data: ArrayProp;
}
export type PropTypeData = StringPropTypeData | BooleanPropTypeData | NumberPropTypeData | OptionsPropTypeData | FunctionPropTypeData | CustomTypeScriptPropTypeData | ObjectPropTypeData | ArrayOfObjectsPropTypeData | ArrayOfStringsPropTypeData | ArrayOfNumbersPropTypeData;
export type JsonSchemaObject<PropNames extends string = string> = {
    $schema?: string;
    title?: string;
    description?: string;
    type: 'object';
    required?: PropNames[];
    properties: Record<PropNames, PropertyTypes>;
    examples?: Record<string, unknown>[];
};
export {};
//# sourceMappingURL=json-schema.d.ts.map