import { FormProps, IChangeEvent } from '@rjsf/core'; import { RJSFSchema, UiSchema } from '@rjsf/utils'; export type WebhookEventType = 'focus' | 'blur' | 'change' | 'submit' | 'stepChange' | 'validationError'; /** Submit-time field state, expressed as RFC 6901 pointers relative to the answers. */ export interface SubmissionMeta { hiddenFields: string[]; disabledFields: string[]; } export interface FormEventHandlers { beforeSubmit?: (data: any) => Promise | any; afterSubmit?: (data: any) => Promise | void; beforeValidation?: (data: any) => Promise | any; afterValidation?: (data: any, errors: any) => Promise | void; } export interface FormFieldEvent { eventType: 'focus' | 'blur' | 'change'; fieldId: string; fieldValue: any; schema?: any; formData?: any; timestamp: number; fieldPath?: string[]; } export type JsonValue = string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue; }; export interface WebhookConfig { url: string; method?: 'POST' | 'PUT' | 'PATCH'; headers?: Record; events?: WebhookEventType[]; debounceMs?: number; retries?: number; timeout?: number; /** Static extra root properties. Reserved event properties are ignored. */ body?: Record; /** Static URL query pairs, appended in order without replacing existing keys. */ query?: Array<{ key: string; value: string; }>; /** Literal top-level answer keys; this does not redact fieldValue or errors. */ formDataFields?: string[]; } export interface FieldEventHandlers { onFieldFocus?: (event: FormFieldEvent) => Promise | void; onFieldBlur?: (event: FormFieldEvent) => Promise | void; onFieldChange?: (event: FormFieldEvent) => Promise | void; } export interface ExtendedFormProps extends Omit, FormEventHandlers, FieldEventHandlers { onSubmit?: (data: IChangeEvent & { meta?: SubmissionMeta; }, event: Parameters>[1]) => void; schema: RJSFSchema; uiSchema?: UiSchema; webhooks?: WebhookConfig[]; eventHub?: any; onWebhookStart?: (webhook: WebhookConfig, event: any) => void; onWebhookComplete?: (webhook: WebhookConfig, event: any, response: any) => void; onWebhookError?: (webhook: WebhookConfig, event: any, error: Error) => void; enableDynamicBinding?: boolean; } export interface CustomWidgetProps { label?: string; required?: boolean; disabled?: boolean; readonly?: boolean; autofocus?: boolean; placeholder?: string; help?: string; rawErrors?: string[]; }