import type { CmsModelField, CmsModelFieldPredefinedValues, CmsModelFieldValidation } from "../../../types/index.js"; import { BaseFieldBuilder, type DataFieldBuildResult } from "./BaseFieldBuilder.js"; export interface FieldBuilderConfig extends Omit { _storageId?: string; _fieldId?: string; description?: string | null; note?: string | null; } /** * Augmentable renderer registry. Each entry maps a renderer name to its applicable field type(s) and settings. */ export interface IFieldRendererRegistry { switch: { fieldType: "boolean"; settings: undefined; }; checkboxes: { fieldType: "text" | "number"; settings: undefined; }; dateTimeInput: { fieldType: "datetime"; settings: undefined; }; dateTimeInputs: { fieldType: "datetime"; settings?: { multiValue?: { addValueButtonLabel?: string; }; }; }; dynamicZone: { fieldType: "dynamicZone"; settings?: { open?: boolean; }; }; hidden: { fieldType: string; settings: undefined; }; lexicalEditor: { fieldType: "rich-text"; settings: undefined; }; lexicalEditors: { fieldType: "rich-text"; settings?: { multiValue?: { addValueButtonLabel?: string; }; }; }; textarea: { fieldType: "long-text"; settings: undefined; }; textareas: { fieldType: "long-text"; settings: { multiValue?: { addValueButtonLabel?: string; }; }; }; numberInput: { fieldType: "number"; settings: undefined; }; numberInputs: { fieldType: "number"; settings?: { multiValue?: { addValueButtonLabel?: string; }; }; }; objectAccordionSingle: { fieldType: "object"; settings?: { open?: boolean; }; }; objectAccordionMultiple: { fieldType: "object"; settings?: { open?: boolean; multiValue?: { addValueButtonLabel?: string; }; }; }; passthrough: { fieldType: string; settings: undefined; }; radioButtons: { fieldType: "text" | "number"; settings: undefined; }; refDialogSingle: { fieldType: "ref"; settings: undefined; }; refDialogMultiple: { fieldType: "ref"; settings?: { newItemPosition?: "first" | "last"; }; }; refAutocompleteSingle: { fieldType: "ref"; settings: undefined; }; refAutocompleteMultiple: { fieldType: "ref"; settings: undefined; }; refCheckboxes: { fieldType: "ref"; settings: undefined; }; refRadioButtons: { fieldType: "ref"; settings: undefined; }; dropdown: { fieldType: "text" | "number"; settings: undefined; }; tags: { fieldType: "text"; settings: undefined; }; textInput: { fieldType: "text"; settings: undefined; }; textInputs: { fieldType: "text"; settings?: { multiValue?: { addValueButtonLabel?: string; }; }; }; file: { fieldType: "file"; settings?: { imagesOnly?: boolean; }; }; files: { fieldType: "file"; settings?: { imagesOnly?: boolean; }; }; uiSeparator: { fieldType: "ui"; settings: undefined; }; uiAlert: { fieldType: "ui"; settings: { type: "info" | "success" | "warning" | "danger"; }; }; uiTabs: { fieldType: "ui"; settings: undefined; }; } /** * Extracts renderer names valid for the given field type. * When TType is a broad `string`, all renderer names are returned. */ export type FieldRendererName = string extends TType ? keyof IFieldRendererRegistry & string : { [K in keyof IFieldRendererRegistry]: TType extends IFieldRendererRegistry[K]["fieldType"] ? K : never; }[keyof IFieldRendererRegistry] & string; export type FieldRendererSettings = TName extends keyof IFieldRendererRegistry ? IFieldRendererRegistry[TName]["settings"] : Record | undefined; /** * DataFieldBuilder class for data fields that produce CmsModelField instances. * Provides storageId, list, validation, renderer, and other data-field methods. */ export declare class DataFieldBuilder extends BaseFieldBuilder { protected config: FieldBuilderConfig; constructor(type: TType, label?: string); placeholder(text: string): this; storageId(id: string): this; defaultValue(value: any): this; list(): this; tags(tags: string[]): this; /** * List validators - these methods are available after calling list() */ listMinLength(value: number, message?: string): this; listMaxLength(value: number, message?: string): this; /** * Add a validation rule to this field. * This method is protected and should only be used by field-specific validator methods. * @internal */ protected validation(validation: CmsModelFieldValidation): this; /** * Add a list validation rule to this field (for list fields). * This method is protected and should only be used by field-specific validator methods. * @internal */ protected listValidation(validation: CmsModelFieldValidation): this; predefinedValues(values: CmsModelFieldPredefinedValues["values"]): this; renderer>(name: TName, ...args: undefined extends FieldRendererSettings ? [settings?: FieldRendererSettings] : FieldRendererSettings extends undefined ? [] : [settings: FieldRendererSettings]): this; settings(settings: Record): this; /** * Build the final CmsModelField * @internal */ build(): DataFieldBuildResult; private getFieldType; }