--- /* --------------------------------------------------------------------------- * FieldRenderer — dispatches on field.kind to the right input component * and wraps it with label + helper + error. * * Branches must stay exhaustive; the `never` fallback flags any unhandled * Field kind at compile time. * ------------------------------------------------------------------------- */ import TextField from './fields/TextField.astro'; import TextareaField from './fields/TextareaField.astro'; import MarkdownField from './fields/MarkdownField.astro'; import SelectField from './fields/SelectField.astro'; import SelectAsyncField from './fields/SelectAsyncField.astro'; import MultiSelectAsyncField from './fields/MultiSelectAsyncField.astro'; import MultiTextField from './fields/MultiTextField.astro'; import DateField from './fields/DateField.astro'; import DatetimeField from './fields/DatetimeField.astro'; import NumberField from './fields/NumberField.astro'; import ReadonlyField from './fields/ReadonlyField.astro'; import ImageUploadField from './fields/ImageUploadField.astro'; import type { Field } from '../resource-types'; interface Props { field: Field; value: unknown; error?: string; item: Record | null; } const { field, value, error, item } = Astro.props; ---
{field.kind === 'text' && } {field.kind === 'textarea' && } {field.kind === 'markdown' && } {field.kind === 'select' && } {field.kind === 'select-async' && } {field.kind === 'multi-select-async' && } {field.kind === 'multi-text' && } {field.kind === 'date' && } {field.kind === 'datetime' && } {field.kind === 'number' && } {field.kind === 'readonly' && } {field.kind === 'image-upload' && } {field.helperText && (

{field.helperText}

)} {error && ( )}