Referência de tipos de campo

Nesta página

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

TypeSQLite ColumnDescription
stringTEXTEntrada de texto curta numa linha
textTEXTTexto multilinha
numberREALNúmero decimal
integerINTEGERNúmero inteiro
booleanINTEGERVerdadeiro / falso
datetimeTEXTData e hora
selectTEXTEscolha única entre opções
multiSelectJSONMúltiplas escolhas
portableTextJSONConteúdo de texto rico
imageTEXTReferência a imagem
fileTEXTReferência a ficheiro
referenceTEXTReferência a outra entrada
jsonJSONDados JSON arbitrários
slugTEXTIdentificador 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 caracteres
  • maxLength — Número máximo de caracteres
  • pattern — 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 caracteres
  • maxLength — 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ínimo
  • max — 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ínimo
  • max — 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:

PropertyTypeDescription
slugstringIdentificador único (obrigatório)
labelstringNome de apresentação (obrigatório)
typeFieldTypeTipo de campo (obrigatório)
requiredbooleanValor obrigatório (predefinição: false)
uniquebooleanForçar unicidade (predefinição: false)
defaultValueunknownValor predefinido para novas entradas
validationobjectRegras de validação específicas do tipo
widgetstringSubstituição de widget personalizado
optionsobjectConfiguração do widget
sortOrdernumberOrdem de apresentação no admin

Reserved Field Slugs

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

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

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