/**
 * Widget Component Registry
 *
 * Maps field types to their React components.
 *
 * ## Type Assertions Rationale
 *
 * Each widget is cast to `FieldWidgetComponent` (the base type) to allow storage in a
 * homogeneous collection, even though each widget has a more specific type signature:
 *
 * - TextField: FieldWidgetComponent<string, TextFieldConfig>
 * - NumberField: FieldWidgetComponent<number, TextFieldConfig>
 * - GroupField: FieldWidgetComponent<Record<string, any>, GroupFieldConfig>
 * etc.
 *
 * This is a standard TypeScript pattern for heterogeneous registries accessed via
 * discriminated unions (field.type). The type assertions are safe because:
 *
 * 1. **Runtime Correctness**: FormRenderer looks up widgets by field.type, ensuring
 *    TextField receives TextFieldConfig, GroupField receives GroupFieldConfig, etc.
 *
 * 2. **Structural Compatibility**: All field configs extend BaseFieldConfig, so widgets
 *    can safely access common properties (id, label, description, required, etc.)
 *
 * 3. **Widget-Internal Type Safety**: Each widget's implementation is fully typed and
 *    type-checked against its specific config type.
 *
 * ## Context-Dependent Widgets (Not in Registry)
 *
 * Some widgets require application-level context and are provided as overrides:
 *
 * - MediaField: requires MediaEditorProvider context
 * - LinkField: requires LinkWidgetContext (siteId, adapters)
 * - RichTextField: requires RichTextWidgetContext (theme, onPickImage)
 * - ReferenceField: requires siteId and adapters
 *
 * These live in @riverbankcms/editor-blocks and are passed via FormRenderer.widgetOverrides.
 */
import type { FieldWidgetComponent } from '../fields/props';
export declare const WIDGET_COMPONENTS: {
    readonly text: FieldWidgetComponent;
    readonly number: FieldWidgetComponent;
    readonly select: FieldWidgetComponent;
    readonly sdkSelect: FieldWidgetComponent;
    readonly boolean: FieldWidgetComponent;
    readonly group: FieldWidgetComponent;
    readonly modal: FieldWidgetComponent;
    readonly tabGroup: FieldWidgetComponent;
    readonly presetOrCustom: FieldWidgetComponent;
    readonly repeater: FieldWidgetComponent;
    readonly url: FieldWidgetComponent;
    readonly time: FieldWidgetComponent;
    readonly date: FieldWidgetComponent;
    readonly datetime: FieldWidgetComponent;
    readonly slug: FieldWidgetComponent;
    readonly slider: FieldWidgetComponent;
};
export type WidgetType = keyof typeof WIDGET_COMPONENTS;
export declare function getWidget(type: string): FieldWidgetComponent | undefined;
