Referência de Tipos de Campo

Nesta página

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:

TipoColuna SQLiteDescrição
stringTEXTEntrada de texto curto
textTEXTTexto de várias linhas
urlTEXTValor de URL
numberREALNúmero decimal
integerINTEGERNúmero inteiro
booleanINTEGERVerdadeiro/falso
datetimeTEXTData e hora
selectTEXTEscolha única de opções
multiSelectJSONEscolhas múltiplas
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
repeaterJSONGrupo 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 caracteres
  • maxLength — Contagem máxima de caracteres
  • pattern — 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 caracteres
  • maxLength — 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ínimo
  • max — 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ínimo
  • max — 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:

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

Slugs de campo reservados

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

  • id
  • slug
  • status
  • author_id
  • primary_byline_id
  • created_at
  • updated_at
  • published_at
  • scheduled_at
  • deleted_at
  • version
  • live_revision_id
  • draft_revision_id
  • terms
  • bylines
  • byline

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