import { type ComponentDef } from '@defra/forms-model';
import { type ArraySchema, type BooleanSchema, type DateSchema, type NumberSchema, type ObjectSchema, type StringSchema } from 'joi';
import { type ComponentCollection } from '~/src/server/plugins/engine/components/ComponentCollection.js';
import { type Component } from '~/src/server/plugins/engine/components/helpers/components.js';
import { type ViewModel } from '~/src/server/plugins/engine/components/types.js';
import { type FormModel } from '~/src/server/plugins/engine/models/index.js';
import { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers/pages.js';
export declare class ComponentBase {
    page?: PageControllerClass;
    parent: Component | undefined;
    collection: ComponentCollection | undefined;
    type: ComponentDef['type'];
    name: ComponentDef['name'];
    title: ComponentDef['title'];
    schema?: Extract<ComponentDef, {
        schema?: object;
    }>['schema'];
    options?: Extract<ComponentDef, {
        options: object;
    }>['options'];
    isFormComponent: boolean;
    model: FormModel;
    /** joi schemas based on a component defined in the form JSON. This validates a user's answer and is generated from {@link ComponentDef} */
    formSchema: ComponentSchema;
    stateSchema: ComponentSchema;
    constructor(def: ComponentDef, props: {
        page?: PageControllerClass;
        parent?: Component;
        model: FormModel;
    });
    get viewModel(): ViewModel;
}
export type ComponentSchema = ArraySchema<string> | ArraySchema<number> | ArraySchema<boolean> | ArraySchema<object> | BooleanSchema<string> | DateSchema | NumberSchema<string> | NumberSchema | ObjectSchema | StringSchema;
