Skip to main content

Block Contract

Um block é um subcomponente editável dentro de uma section — por exemplo um título, parágrafo ou item de FAQ.

Arquivos do block

Para cada ID em theme.json → blocks:

Registro no tema

  1. O ID precisa estar em theme.json → blocks[].
  2. block.jsx exporta o componente como default export.
  3. Convém nomear {PascalCase}Block — ex.: heading → HeadingBlock.

schema.json

Blocks não precisam de category.

Props do componente

Não use props na raiz (text, level direto) — tudo fica em settings.*. Valores iniciais de campo: default em cada setting do schema.json, como nas sections. Looks iniciais da lista (vários slides na home): templates/*.json com blocks + block_order, não um array no JSX. theme-defaults.

Section que aceita blocks

Manifest (sections/{id}/blocks.json)

  • blocks[].type precisa corresponder a um block registrado no tema.
  • max_blocks é opcional — limite de instâncias na section.
  • corvex build (≥ 2.3.4) anexa este arquivo no bundle. Não importe blocks.json no section.jsx e não declare propriedade estática no componente.

Instância na página

  • block_order define a ordem de renderização.
  • O lojista reordena blocks no painel Itens do editor (arrastar ≡). Na vitrine, itere block_order — ver Runtime API.

Bloco contêiner (grupo)

Um bloco com blocks/{id}/blocks.json aceita filhos diretos (um nível extra). O tipo vive no tema (blocks/group/ ou equivalente) — a plataforma não impõe um group no host.
  • Mesmo formato do manifest da seção. corvex build anexa blockManifest no componente do bloco.
  • Fase 1: o contêiner não pode listar outro contêiner. corvex validate rejeita isso.
  • No JSX do contêiner, {children} dentro de BlockCanvas (@corvex/runtime). Sem .map de filhos.
  • Isto não é grupo de layout (layoutGroups): aquele organiza seções globais.

Instância aninhada

Bloco sem block_order (ou array vazio) é folha. Cookbook: Colunas agrupadas.

Edição inline no canvas (opcional)

Para campos text / textarea, use BlockInlineText de @corvex/runtime — duplo clique no builder com Inspecionar ativo:
fieldKey = id do field no schema.json do block. Detalhes: Runtime API — edição inline.

O que evitar

  • Usar o mesmo ID como section e block sem registrar ambos explicitamente.
  • Contêiner dentro de contêiner (mais de um nível extra) — fora da fase 1.
  • Tipos de campo fora da lista estável (Schema overview).
  • Mudar o id da pasta / type depois que há páginas. name é rótulo e pode mudar. Detalhe: Section Contract — identidade.

Exemplo mínimo válido

blocks/heading/schema.json:
blocks/heading/block.jsx:
theme.json → "blocks": [ "heading", … ]

Veja também