EmDash admite 14 tipos de campo para definir esquemas de contenido. Cada tipo se asigna a un tipo de columna SQLite y proporciona la UI de administración adecuada.
Resumen
| Type | SQLite Column | Description |
|---|---|---|
string | TEXT | Texto corto en una línea |
text | TEXT | Texto multilínea |
number | REAL | Número decimal |
integer | INTEGER | Número entero |
boolean | INTEGER | Verdadero/falso |
datetime | TEXT | Fecha y hora |
select | TEXT | Una opción entre varias |
multiSelect | JSON | Varias opciones |
portableText | JSON | Contenido de texto enriquecido |
image | TEXT | Referencia a imagen |
file | TEXT | Referencia a archivo |
reference | TEXT | Referencia a otra entrada |
json | JSON | Datos JSON arbitrarios |
slug | TEXT | Identificador seguro para URL |
Tipos de texto
string
Texto corto de una sola línea. Para títulos, nombres y valores breves.
{
slug: "title",
label: "Title",
type: "string",
required: true,
validation: {
minLength: 1,
maxLength: 200,
},
}
Opciones de validación:
minLength— Número mínimo de caracteresmaxLength— Número máximo de caracterespattern— Patrón regex a cumplir
Opciones de widget:
- Ninguna específica
text
Texto plano multilínea. Para descripciones, extractos y texto plano más largo.
{
slug: "excerpt",
label: "Excerpt",
type: "text",
options: {
rows: 3,
},
}
Opciones de validación:
minLength— Número mínimo de caracteresmaxLength— Número máximo de caracteres
Opciones de widget:
rows— Filas del textarea (predeterminado: 3)
slug
Identificador seguro para URL. Se genera automáticamente desde otro campo o se introduce manualmente.
{
slug: "slug",
label: "URL Slug",
type: "slug",
required: true,
unique: true,
}
Los slugs se normalizan automáticamente: minúsculas, espacios sustituidos por guiones, caracteres especiales eliminados.
Tipos numéricos
number
Número decimal. Para precios, valoraciones y medidas.
{
slug: "price",
label: "Price",
type: "number",
required: true,
validation: {
min: 0,
max: 999999.99,
},
}
Opciones de validación:
min— Valor mínimomax— Valor máximo
Almacenado como SQLite REAL (coma flotante de 64 bits).
integer
Número entero. Para cantidades, recuentos y valores de orden.
{
slug: "quantity",
label: "Quantity",
type: "integer",
defaultValue: 1,
validation: {
min: 0,
max: 1000,
},
}
Opciones de validación:
min— Valor mínimomax— Valor máximo
Almacenado como SQLite INTEGER.
boolean
Verdadero o falso. Para interruptores y flags.
{
slug: "featured",
label: "Featured",
type: "boolean",
defaultValue: false,
}
Almacenado como SQLite INTEGER (0 o 1).
Fecha y hora
datetime
Fecha y hora. Almacenado en formato ISO 8601.
{
slug: "publishedAt",
label: "Published At",
type: "datetime",
}
Opciones de validación:
min— Fecha mínima (cadena ISO)max— Fecha máxima (cadena ISO)
Formato de almacenamiento: 2025-01-24T12:00:00.000Z
Tipos de selección
select
Selección única entre opciones predefinidas.
{
slug: "status",
label: "Status",
type: "select",
required: true,
defaultValue: "draft",
validation: {
options: ["draft", "published", "archived"],
},
}
Opciones de validación:
options— Array de valores permitidos (obligatorio)
Almacenado como TEXT con el valor seleccionado.
multiSelect
Selección múltiple entre opciones predefinidas.
{
slug: "tags",
label: "Tags",
type: "multiSelect",
validation: {
options: ["news", "tutorial", "review", "opinion"],
},
}
Opciones de validación:
options— Array de valores permitidos (obligatorio)
Almacenado como array JSON: ["news", "tutorial"]
Contenido enriquecido
portableText
Texto enriquecido con formato Portable Text. Admite encabezados, listas, enlaces, imágenes y bloques personalizados.
{
slug: "content",
label: "Content",
type: "portableText",
required: true,
}
Almacenado como array JSON de bloques Portable Text:
[
{
"_type": "block",
"style": "normal",
"children": [{ "_type": "span", "text": "Hello world" }]
}
]
Los plugins pueden añadir tipos de bloque personalizados (embeds, widgets, etc.) al editor. Aparecen en el menú de comandos con barra y se renderizan automáticamente en el sitio. Consulte Creating Plugins — Portable Text Block Types.
Tipos de medios
image
Referencia a una imagen subida. Incluye metadatos como dimensiones y texto alternativo.
{
slug: "featuredImage",
label: "Featured Image",
type: "image",
options: {
showPreview: true,
},
}
Opciones de widget:
showPreview— Mostrar vista previa en el admin (predeterminado: true)
Valor almacenado:
{
"id": "01HXK5MZSN...",
"url": "https://cdn.example.com/image.jpg",
"alt": "Description",
"width": 1920,
"height": 1080
}
file
Referencia a un archivo subido (documentos, PDF, etc.).
{
slug: "document",
label: "Document",
type: "file",
}
Valor almacenado:
{
"id": "01HXK5MZSN...",
"url": "https://cdn.example.com/doc.pdf",
"filename": "report.pdf",
"mimeType": "application/pdf",
"size": 102400
}
Tipos relacionales
reference
Referencia a otra entrada de contenido.
{
slug: "author",
label: "Author",
type: "reference",
required: true,
options: {
collection: "authors",
},
}
Opciones de widget:
collection— Slug de la colección de destino (obligatorio)allowMultiple— Permitir varias referencias (predeterminado: false)
Valor almacenado (referencia única):
"01HXK5MZSN..."
Valor almacenado (referencias múltiples):
["01HXK5MZSN...", "01HXK6NATS..."]
Tipos flexibles
json
Datos JSON arbitrarios. Para estructuras anidadas complejas, integraciones de terceros o datos sin esquema fijo.
{
slug: "metadata",
label: "Metadata",
type: "json",
}
Almacenado tal cual en la columna JSON de SQLite.
Propiedades de campo
Todos los campos admiten estas propiedades comunes:
| Property | Type | Description |
|---|---|---|
slug | string | Identificador único (obligatorio) |
label | string | Nombre para mostrar (obligatorio) |
type | FieldType | Tipo de campo (obligatorio) |
required | boolean | Exigir valor (predeterminado: false) |
unique | boolean | Exigir unicidad (predeterminado: false) |
defaultValue | unknown | Valor predeterminado para entradas nuevas |
validation | object | Reglas de validación por tipo |
widget | string | Sobrescritura de widget personalizado |
options | object | Configuración del widget |
sortOrder | number | Orden de visualización en el admin |
Slugs de campo reservados
Estos slugs están reservados y no pueden usarse:
idslugstatusauthor_idcreated_atupdated_atpublished_atdeleted_atversion
Tipos de TypeScript
Importe los tipos de campo para uso programático:
import type { FieldType, Field, CreateFieldInput } from "emdash";
const fieldTypes: FieldType[] = [
"string",
"text",
"number",
"integer",
"boolean",
"datetime",
"select",
"multiSelect",
"portableText",
"image",
"file",
"reference",
"json",
"slug",
];