Arquivos do block
Para cada ID emtheme.json → blocks:
Registro no tema
- O ID precisa estar em
theme.json→blocks[]. block.jsxexporta o componente como default export.- Convém nomear
{PascalCase}Block— ex.:heading→HeadingBlock.
schema.json
Blocks não precisam de
category.
Props do componente
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[].typeprecisa 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 importeblocks.jsonnosection.jsxe não declare propriedade estática no componente.
Instância na página
block_orderdefine 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 comblocks/{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 buildanexablockManifestno componente do bloco. - Fase 1: o contêiner não pode listar outro contêiner.
corvex validaterejeita isso. - No JSX do contêiner,
{children}dentro deBlockCanvas(@corvex/runtime). Sem.mapde filhos. - Isto não é grupo de layout (
layoutGroups): aquele organiza seções globais.
Instância aninhada
block_order (ou array vazio) é folha. Cookbook: Colunas agrupadas.
Edição inline no canvas (opcional)
Para campostext / 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 /
typedepois 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", … ]

