O EmDash suporta 16 tipos de campo para definir esquemas de conteúdo. Cada tipo é mapeado para um tipo de coluna SQLite e fornece uma interface administrativa apropriada.
Visão Geral
A tabela a seguir lista cada tipo de campo e sua coluna SQLite:
| Tipo | Coluna SQLite | Descrição |
|---|---|---|
string | TEXT | Entrada de texto curto |
text | TEXT | Texto de várias linhas |
url | TEXT | Valor de URL |
number | REAL | Número decimal |
integer | INTEGER | Número inteiro |
boolean | INTEGER | Verdadeiro/falso |
datetime | TEXT | Data e hora |
select | TEXT | Escolha única de opções |
multiSelect | JSON | Escolhas múltiplas |
portableText | JSON | Conteúdo de texto rico |
image | TEXT | Referência de imagem |
file | TEXT | Referência de arquivo |
reference | TEXT | Referência a outra entrada |
json | JSON | Dados JSON arbitrários |
slug | TEXT | Identificador seguro para URL |
repeater | JSON | Grupo de campos repetitivos |
Tipos de Texto
string
Texto curto de uma única linha. Use para títulos, nomes e valores curtos.
{
slug: "title",
label: "Title",
type: "string",
required: true,
validation: {
minLength: 1,
maxLength: 200,
},
}
Opções de validação:
minLength— Contagem mínima de caracteresmaxLength— Contagem máxima de caracterespattern— Padrão regex para corresponder
Opções de widget:
- Nenhuma específica
text
Texto simples de várias linhas. Use para descrições, trechos e texto simples mais longo.
{
slug: "excerpt",
label: "Excerpt",
type: "text",
options: {
rows: 3,
},
}
Opções de validação:
minLength— Contagem mínima de caracteresmaxLength— Contagem máxima de caracteres
Opções de widget:
rows— Número de linhas no textarea (padrão: 3)
slug
Identificador seguro para URL. Gerado automaticamente de outro campo ou inserido manualmente.
{
slug: "slug",
label: "URL Slug",
type: "slug",
required: true,
unique: true,
}
Os slugs são automaticamente sanitizados: em minúsculas, espaços substituídos por hífens, caracteres especiais removidos.
Tipos Numéricos
number
Número decimal. Use para preços, avaliações e medições.
{
slug: "price",
label: "Price",
type: "number",
required: true,
validation: {
min: 0,
max: 999999.99,
},
}
Opções de validação:
min— Valor mínimomax— Valor máximo
Armazenado como SQLite REAL (ponto flutuante de 64 bits).
integer
Número inteiro. Use para quantidades, contagens e valores de pedido.
{
slug: "quantity",
label: "Quantity",
type: "integer",
defaultValue: 1,
validation: {
min: 0,
max: 1000,
},
}
Opções de validação:
min— Valor mínimomax— Valor máximo
Armazenado como SQLite INTEGER.
boolean
Verdadeiro ou falso. Use para alternadores e sinalizadores.
{
slug: "featured",
label: "Featured",
type: "boolean",
defaultValue: false,
}
Armazenado como SQLite INTEGER (0 ou 1).
Data e Hora
datetime
Valor de data e hora. Armazenado em formato ISO 8601.
{
slug: "publishedAt",
label: "Published At",
type: "datetime",
}
Opções de validação:
min— Data mínima (string ISO)max— Data máxima (string ISO)
Formato de armazenamento: 2025-01-24T12:00:00.000Z
Tipos de Seleção
select
Seleção única de opções predefinidas.
{
slug: "status",
label: "Status",
type: "select",
required: true,
defaultValue: "draft",
validation: {
options: ["draft", "published", "archived"],
},
}
Opções de validação:
options— Array de valores permitidos (obrigatório)
Armazenado como TEXT contendo o valor selecionado.
multiSelect
Seleções múltiplas de opções predefinidas.
{
slug: "tags",
label: "Tags",
type: "multiSelect",
validation: {
options: ["news", "tutorial", "review", "opinion"],
},
}
Opções de validação:
options— Array de valores permitidos (obrigatório)
Armazenado como array JSON: ["news", "tutorial"]
Conteúdo Rico
portableText
Conteúdo de texto rico usando formato Portable Text. Suporta títulos, listas, links, imagens e blocos personalizados.
{
slug: "content",
label: "Content",
type: "portableText",
required: true,
}
O valor é armazenado como um array JSON de blocos Portable Text, por exemplo:
[
{
"_type": "block",
"style": "normal",
"children": [{ "_type": "span", "text": "Hello world" }]
}
]
Os plugins podem adicionar tipos de blocos personalizados (incorporações, widgets, etc.) ao editor. Estes aparecem no menu de comando slash e são automaticamente renderizados no site. Veja componentes de renderização Portable Text.
Tipos de Mídia
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,
},
}
Opções de widget:
showPreview— Mostrar visualização de imagem no admin (padrão: true)
O valor é armazenado como um objeto com a referência da mídia e seus metadados:
{
"id": "01HXK5MZSN...",
"url": "https://cdn.example.com/image.jpg",
"alt": "Description",
"width": 1920,
"height": 1080
}
file
Referência a um arquivo carregado, como um documento ou PDF.
{
slug: "document",
label: "Document",
type: "file",
}
O valor é armazenado como um objeto com a referência do arquivo e seus metadados:
{
"id": "01HXK5MZSN...",
"url": "https://cdn.example.com/doc.pdf",
"filename": "report.pdf",
"mimeType": "application/pdf",
"size": 102400
}
Tipos Relacionais
reference
Referência a outra entrada de conteúdo.
{
slug: "author",
label: "Author",
type: "reference",
required: true,
options: {
collection: "authors",
},
}
Opções de widget:
collection— Slug da coleção de destino (obrigatório)allowMultiple— Permitir múltiplas referências (padrão: false)
Uma referência única é armazenada como o ID da entrada de destino:
"01HXK5MZSN..."
Múltiplas referências são armazenadas como um array de IDs de entrada:
["01HXK5MZSN...", "01HXK6NATS..."]
Tipos Flexíveis
json
Dados JSON arbitrários. Use para estruturas aninhadas complexas, integrações de terceiros ou dados sem um esquema fixo.
{
slug: "metadata",
label: "Metadata",
type: "json",
}
Armazenado como está na coluna JSON do SQLite.
Propriedades do Campo
Todos os campos suportam estas propriedades comuns:
| Propriedade | Tipo | Descrição |
|---|---|---|
slug | string | Identificador único (obrigatório) |
label | string | Nome de exibição (obrigatório) |
type | FieldType | Tipo de campo (obrigatório) |
required | boolean | Exigir um valor (padrão: false) |
unique | boolean | Impor unicidade (padrão: false) |
defaultValue | unknown | Valor padrão 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 exibição no admin |
Slugs de campo reservados
Estes slugs são reservados e não podem ser usados:
idslugstatusauthor_idprimary_byline_idcreated_atupdated_atpublished_atscheduled_atdeleted_atversionlive_revision_iddraft_revision_idtermsbylinesbyline
Tipos TypeScript
Importe as definições de tipo de campo para uso programático:
import type { FieldType, Field, CreateFieldInput } from "emdash";
const fieldTypes: FieldType[] = [
"string",
"text",
"url",
"number",
"integer",
"boolean",
"datetime",
"select",
"multiSelect",
"portableText",
"image",
"file",
"reference",
"json",
"slug",
"repeater",
];