Skip to main content

Slider

Quero um carrossel com slides editáveis. Qual é a implementação recomendada?
Referência: seu tema (adaptado do cookbook) + blocks/slider-slide/ Índice: Cookbooks

Contratos utilizados


Integração com o Editor (não é API de vitrine genérica)

useBuilderBlockEditLayout() sempre retorna false. Não ramifique carrossel vs. pilha. Use a mesma árvore no inspect, /preview e vitrine: SectionBlockCanvas + {children} direto. Proibido: Children.toArray(children).map((child) => <div hidden>… — esse wrapper não é o pai dos slides; eles ficam todos visíveis e as setas caem no meio. Para carrossel com lib npm (Flickity, Embla, Swiper), veja Bibliotecas de terceiros. Este cookbook usa apenas React + CSS.

Objetivo

Autoplay e intervalo configuráveis na section; cada slide é um block. Defaults: os slides iniciais da home vivem em templates/index.json (blocks + block_order). default no schema do block vale para cada slide novo. Sem imagem no setting, o block pode usar um gradiente. Não pinte banners no section.jsx quando children está vazio — theme-defaults.

Arquivos


Estado local por instância

  • Duas sliders na mesma página = dois index independentes (sem querySelector global).
  • Não desligue o carrossel no inspecionar.

Transform do track (runtime)

Classe de slide no block (BlockChrome + .cx-block), não num wrapper em volta de cada child.

Slide block (settings)

Fields stable: image, text, textarea, url.

Comportamento no Editor

Leia também: Blocks e Slider cookbook.

Cuidados

  • useSectionBlockCount() — não Children.count(children).
  • useEffect com cleanup no timer de autoplay.
  • CSS: .cookbook-slider__track .cx-block { flex: 0 0 100%; }

Checklist

  • blocks.json com slider-slide — sem import './blocks.json' e sem propriedade estática no componente
  • Nome no inspector só em schema.json → name
  • {children} direto no SectionBlockCanvas (sem map/hidden por child)
  • useSectionBlockCount + BlockChrome em cada slide
  • Estado React local (sem DOM global)
  • Empty state só com zero blocks (sem banners hardcoded)
  • Slides iniciais no templates/index.json, não no JSX
  • corvex validate passa
Código completo: seu tema (adaptado do cookbook).