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 { id?: string; page?: PageControllerClass; parent: Component | undefined; collection: ComponentCollection | undefined; type: ComponentDef['type']; name: ComponentDef['name']; title: ComponentDef['title']; schema?: Extract['schema']; options?: Extract['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 | ArraySchema | ArraySchema | ArraySchema | BooleanSchema | BooleanSchema | DateSchema | NumberSchema | NumberSchema | ObjectSchema | StringSchema;