O EmDash suporta 14 tipos de campo para definir esquemas de conteúdo. Cada tipo mapeia para um tipo de coluna SQLite e fornece a UI de administração adequada.
Overview
| Type | SQLite Column | Description |
|---|---|---|
string | TEXT | Entrada de texto curta numa linha |
text | TEXT | Texto multilinha |
number | REAL | Número decimal |
integer | INTEGER | Número inteiro |
boolean | INTEGER | Verdadeiro / falso |
datetime | TEXT | Data e hora |
select | TEXT | Escolha única entre opções |
multiSelect | JSON | Múltiplas escolhas |
portableText | JSON | Conteúdo de texto rico |
image | TEXT | Referência a imagem |
file | TEXT | Referência a ficheiro |
reference | TEXT | Referência a outra entrada |
json | JSON | Dados JSON arbitrários |
slug | TEXT | Identificador seguro para URL |
Text Types
string
Texto curto numa única linha. Para títulos, nomes e valores curtos.
{
slug: "title",
label: "Title",
type: "string",
required: true,
validation: {
minLength: 1,
maxLength: 200,
},
}
Validation options:
minLength— Número mínimo de caracteresmaxLength— Número máximo de caracterespattern— Padrão regex a corresponder
Widget options:
- Nenhuma específica
text
Texto simples multilinha. Para descrições, excertos e texto simples mais longo.
{
slug: "excerpt",
label: "Excerpt",
type: "text",
options: {
rows: 3,
},
}
Validation options:
minLength— Número mínimo de caracteresmaxLength— Número máximo de caracteres
Widget options:
rows— Número de linhas no textarea (predefinição: 3)
slug
Identificador seguro para URL. Gerado automaticamente a partir de outro campo ou introduzido manualmente.
{
slug: "slug",
label: "URL Slug",
type: "slug",
required: true,
unique: true,
}
Os slugs são normalizados automaticamente: minúsculas, espaços substituídos por hífens, caracteres especiais removidos.
Number Types
number
Número decimal. Para preços, classificações e medidas.
{
slug: "price",
label: "Price",
type: "number",
required: true,
validation: {
min: 0,
max: 999999.99,
},
}
Validation options:
min— Valor mínimomax— Valor máximo
Armazenado como SQLite REAL (vírgula flutuante de 64 bits).
integer
Número inteiro. Para quantidades, contagens e valores de ordenação.
{
slug: "quantity",
label: "Quantity",
type: "integer",
defaultValue: 1,
validation: {
min: 0,
max: 1000,
},
}
Validation options:
min— Valor mínimomax— Valor máximo
Armazenado como SQLite INTEGER.
boolean
Verdadeiro ou falso. Para interruptores e flags.
{
slug: "featured",
label: "Featured",
type: "boolean",
defaultValue: false,
}
Armazenado como SQLite INTEGER (0 ou 1).
Date and Time
datetime
Data e hora. Armazenadas no formato ISO 8601.
{
slug: "publishedAt",
label: "Published At",
type: "datetime",
}
Validation options:
min— Data mínima (cadeia ISO)max— Data máxima (cadeia ISO)
Storage format: 2025-01-24T12:00:00.000Z
Selection Types
select
Escolha única entre opções predefinidas.
{
slug: "status",
label: "Status",
type: "select",
required: true,
defaultValue: "draft",
validation: {
options: ["draft", "published", "archived"],
},
}
Validation options:
options— Array de valores permitidos (obrigatório)
Armazenado como TEXT com o valor selecionado.
multiSelect
Múltiplas escolhas entre opções predefinidas.
{
slug: "tags",
label: "Tags",
type: "multiSelect",
validation: {
options: ["news", "tutorial", "review", "opinion"],
},
}
Validation options:
options— Array de valores permitidos (obrigatório)
Armazenado como array JSON: ["news", "tutorial"]
Rich Content
portableText
Texto rico no formato Portable Text. Suporta títulos, listas, ligações, imagens e blocos personalizados.
{
slug: "content",
label: "Content",
type: "portableText",
required: true,
}
Armazenado como array JSON de blocos Portable Text:
[
{
"_type": "block",
"style": "normal",
"children": [{ "_type": "span", "text": "Hello world" }]
}
]
Os plugins podem adicionar tipos de bloco personalizados (embeds, widgets, etc.) ao editor. Aparecem no menu de comandos slash e são renderizados automaticamente no site. Ver Creating Plugins — Portable Text Block Types.
Media Types
image
Referência a uma imagem carregada. Inclui metadados como dimensões e texto alternativo.
{
slug: "featuredImage",
label: "Featured Image",
type: "image",
options: {
showPreview: true,
},
}
Widget options:
showPreview— Mostrar pré-visualização da imagem no admin (predefinição: true)
Stored value:
{
"id": "01HXK5MZSN...",
"url": "https://cdn.example.com/image.jpg",
"alt": "Description",
"width": 1920,
"height": 1080
}
file
Referência a um ficheiro carregado (documentos, PDF, etc.).
{
slug: "document",
label: "Document",
type: "file",
}
Stored value:
{
"id": "01HXK5MZSN...",
"url": "https://cdn.example.com/doc.pdf",
"filename": "report.pdf",
"mimeType": "application/pdf",
"size": 102400
}
Relational Types
reference
Referência a outra entrada de conteúdo.
{
slug: "author",
label: "Author",
type: "reference",
required: true,
options: {
collection: "authors",
},
}
Widget options:
collection— Slug da coleção de destino (obrigatório)allowMultiple— Permitir várias referências (predefinição: false)
Single reference stored value:
"01HXK5MZSN..."
Multiple references stored value:
["01HXK5MZSN...", "01HXK6NATS..."]
Flexible Types
json
Dados JSON arbitrários. Para estruturas aninhadas, integrações de terceiros ou dados sem esquema fixo.
{
slug: "metadata",
label: "Metadata",
type: "json",
}
Armazenado sem alterações na coluna JSON do SQLite.
Field Properties
Todos os campos suportam estas propriedades comuns:
| Property | Type | Description |
|---|---|---|
slug | string | Identificador único (obrigatório) |
label | string | Nome de apresentação (obrigatório) |
type | FieldType | Tipo de campo (obrigatório) |
required | boolean | Valor obrigatório (predefinição: false) |
unique | boolean | Forçar unicidade (predefinição: false) |
defaultValue | unknown | Valor predefinido para novas entradas |
validation | object | Regras de validação específicas do tipo |
widget | string | Substituição de widget personalizado |
options | object | Configuração do widget |
sortOrder | number | Ordem de apresentação no admin |
Reserved Field Slugs
Estes slugs estão reservados e não podem ser usados:
idslugstatusauthor_idcreated_atupdated_atpublished_atdeleted_atversion
TypeScript Types
Importar 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",
];