Quero banners/slides na seção nova. Quando o lojista adicionar os próprios blocks, esses defaults não podem “competir” com o conteúdo real.Há três camadas. Não misture. Não invente um quarto mecanismo no JSX.
O que cada camada faz
Não existe “array de banners fantasma no JSX que some no primeiro block adicionado”. Isso gera blocks fantasma: não dá para selecionar, arrastar nem persistir.
Presets: section-presets. Não use preset para substituir
templates/*.json na instalação.
Regra para LLM e tema
- Looks da home / PDP / coleção na instalação →
templates/{type}.jsoncomblocks+block_orderpreenchidos. Cada item é um block de verdade (type= pasta emblocks/). - Looks do header/footer →
groups/*.jsondo mesmo jeito. - Campo de um block novo (lojista clica “Adicionar slide”) →
defaultnoblocks/{id}/schema.json. O build copia esses defaults para o componente quando ele ainda não tem props próprias. Não declare propriedade estática no componente. Imagem:defaultsó se for asset do tema (URL ou path estável); senão deixe vazio e use fallback visual. - Seção sem nenhum block (paleta “Adicionar seção”, ou lojista apagou todos) → empty state da UI (“Adicione um slide”), não 2–3
<img>hardcoded. - Nunca faça:
Slideshow / lista / cards — padrão canônico
Theme Defaults (o que o lojista vê antes de mexer):{children}:
default do schema. Os slides do template continuam até ele excluir. Isso é o comportamento certo: personalizar ≠ descartar o layout inicial inteiro.
Se o produto quiser “ao adicionar o primeiro slide, sumir os de fábrica”, a ação é excluir os blocks do template no Editor — não um if no tema.
Empty state (zero blocks)
UseuseSectionBlockCount() === 0 só para mensagem / altura mínima / esconder dots do carrossel. Não invente slides.
Settings da section vs blocks
- Autoplay, altura, intervalo →
defaultno schema da section. - Cada banner, depoimento, item de FAQ → block no template (Theme Defaults) +
defaultnos campos do block. - Não coloque
slides: [{ image, title }, …]num setting da section se o Editor já gerencia blocks.
corvex sync
corvex sync --keep-content não reescreve o draft da loja com os JSON locais. Mudar templates/index.json depois da loja já ter conteúdo não reaparece na página até o lojista resetar o template ou você sincronizar sem preservar conteúdo.
Theme Defaults valem na primeira hidratação daquele template (instalação / draft vazio).
Checklist
- Looks iniciais em
templates/*.json(blocks+block_order), não no JSX - Cada
typede block existe emtheme.json→blocks[]e no bundle -
defaultsó em campos do schema. Sem propriedade estática no componente - Fallback visual só quando um setting está vazio
- Zero blocks → empty state, não lista hardcoded
- Presets só no modal Adicionar; slides da home vêm de
templates/*.json - Canvas sempre
{children}— Runtime API

