Pular para o conteúdo

Referência de Tipos de Campo

O EmDash suporta 14 tipos de campos para definir esquemas de conteúdo. Cada tipo mapeia para um tipo de coluna SQLite e fornece uma interface administrativa apropriada.

TipoColuna SQLiteDescrição
stringTEXTEntrada de texto curto
textTEXTTexto de múltiplas linhas
numberREALNúmero decimal
integerINTEGERNúmero inteiro
booleanINTEGERVerdadeiro/falso
datetimeTEXTData e hora
selectTEXTEscolha única a partir de opções
multiSelectJSONMúltiplas escolhas
portableTextJSONConteúdo de texto rico
imageTEXTReferência de imagem
fileTEXTReferência de arquivo
referenceTEXTReferência a outra entrada
jsonJSONDados JSON arbitrários
slugTEXTIdentificador seguro para URL

Texto curto, de uma 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 caracteres
  • maxLength — Contagem máxima de caracteres
  • pattern — Padrão regex para correspondência

Opções de widget:

  • Nenhuma específica

Texto simples de múltiplas linhas. Use para descrições, excertos e textos simples mais longos.

{
slug: "excerpt",
label: "Excerpt",
type: "text",
options: {
rows: 3,
},
}

Opções de validação:

  • minLength — Contagem mínima de caracteres
  • maxLength — Contagem máxima de caracteres

Opções de widget:

  • rows — Número de linhas na área de texto (padrão: 3)

Identificador seguro para URL. Gerado automaticamente a partir de outro campo ou inserido manualmente.

{
slug: "slug",
label: "URL Slug",
type: "slug",
required: true,
unique: true,
}

Os slugs são automaticamente sanitizados: convertidos para minúsculas, espaços substituídos por hífens, caracteres especiais removidos.

Número decimal. Use para preços, classificaçõ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ínimo
  • max — Valor máximo

Armazenado como SQLite REAL (ponto flutuante de 64 bits).

Número inteiro. Use para quantidades, contagens e valores de ordem.

{
slug: "quantity",
label: "Quantity",
type: "integer",
defaultValue: 1,
validation: {
min: 0,
max: 1000,
},
}

Opções de validação:

  • min — Valor mínimo
  • max — Valor máximo

Armazenado como SQLite INTEGER.

Verdadeiro ou falso. Use para alternâncias e sinalizadores.

{
slug: "featured",
label: "Featured",
type: "boolean",
defaultValue: false,
}

Armazenado como SQLite INTEGER (0 ou 1).

Valor de data e hora. Armazenado no 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

Seleção única a partir 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.

Múltiplas seleções a partir 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 de texto rico usando o formato Portable Text. Suporta títulos, listas, links, 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" }]
}
]

Plugins podem adicionar tipos de bloco personalizados (embeds, widgets, etc.) ao editor. Eles aparecem no menu de comando de barra e são automaticamente renderizados no site. Veja Criando Plugins — Tipos de Bloco Portable Text.

Referência a uma imagem enviada. Inclui metadados como dimensões e texto alternativo.

{
slug: "featuredImage",
label: "Featured Image",
type: "image",
options: {
showPreview: true,
},
}

Opções de widget:

  • showPreview — Mostrar pré-visualização da imagem no admin (padrão: true)

Valor armazenado:

{
"id": "01HXK5MZSN...",
"url": "https://cdn.example.com/image.jpg",
"alt": "Description",
"width": 1920,
"height": 1080
}

Referência a um arquivo enviado (documentos, PDFs, etc.).

{
slug: "document",
label: "Document",
type: "file",
}

Valor armazenado:

{
"id": "01HXK5MZSN...",
"url": "https://cdn.example.com/doc.pdf",
"filename": "report.pdf",
"mimeType": "application/pdf",
"size": 102400
}

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)

Valor armazenado para referência única:

"01HXK5MZSN..."

Valor armazenado para múltiplas referências:

["01HXK5MZSN...", "01HXK6NATS..."]

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.

Todos os campos suportam estas propriedades comuns:

PropriedadeTipoDescrição
slugstringIdentificador único (obrigatório)
labelstringNome de exibição (obrigatório)
typeFieldTypeTipo de campo (obrigatório)
requiredbooleanExigir um valor (padrão: false)
uniquebooleanImpor unicidade (padrão: false)
defaultValueunknownValor padrão para novas entradas
validationobjectRegras de validação específicas do tipo
widgetstringSubstituição de widget personalizado
optionsobjectConfiguração do widget
sortOrdernumberOrdem de exibição no admin

Estes slugs são reservados e não podem ser usados:

  • id
  • slug
  • status
  • author_id
  • created_at
  • updated_at
  • published_at
  • deleted_at
  • version

Importe os 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",
];