Quero seleção de cor e tamanho na página de produto. Como implementar com o contrato Corvex?Referência:
seu tema (adaptado do cookbook) + sections/variant-selector-demo/
Índice: Cookbooks
Objetivo
product field, UUID, handle ou products.get() dentro do snippet.
Contratos utilizados
- Product Contract —
options,variants - Product Variant —
selectedOptions,availableForSale,price,image - Cart Contract —
addItem(product, qty, variant)(integração no demo) - Snippet Contract
@corvex/runtime—SectionChrome,useCorvexCart(demo section only)
Shape público relevante
Product (variantes)
ProductVariant
Não usar:
stock, inventory, trackInventory nem o objeto de preço cru da API. A disponibilidade pública é availableForSale. O preço público é price.formatted.
Arquivos
Implementação
product MUST ser Product completo (via usePage('product').product, data.product, ou loader da section parent).
Como funciona o matching
Formato real: arrayvariant.selectedOptions:
selectedOptions coincidem com a seleção completa.
Uma opção
Exemplo fixtureFIXTURE_SIZE_ONLY:
M → variant.id === 'var-m'.
Múltiplas opções
FixtureFIXTURE_COLOR_SIZE:
Preto + M → variante existe mas availableForSale === false.
Branco + M → variante disponível com preço/imagem próprios.
Availability
Somentevariant.availableForSale (contrato público).
Disponibilidade considera combinação parcial — selecionar
Preto não desabilita M globalmente se Branco/M ainda é possível.
Integração com preço / imagem
Responsabilidade do parent, não do selector:VariantInfo no section mostra esse padrão.
Integração com Add to Cart
- sem
selectedVariantválida → não chamaraddItem !selectedVariant.availableForSale→ botão desabilitado
error de useCorvexCart e confira productVariantId na linha. Detalhe: Ações do carrinho.
Comportamento no Editor
- Snippet não importa APIs de editor.
- Demo section usa fixtures embutidas — funciona em
/previewe editor sem resolver produto real. SectionChromeapenas na section demo (PUBLIC_EDITOR_INTEGRATION).
Edge cases
Estado inicial
Sem regra de plataforma. Este exemplo usagetExampleDefaultSelection:
primeira variante com availableForSale, senão primeira da lista.
Marcado como estratégia do exemplo em matchVariant.js.
Accessibility
fieldset+legendpor opçãorole="group"nos valores- botões com
aria-pressed disabledreal para combinações impossíveis:focus-visiblenos botões
Checklist
-
productjá resolvido antes do snippet - matching via
selectedOptions[]público - availability via
availableForSale - parent atualiza preço/imagem
-
addItem(product, 1, variant)com guards -
corvex validate .
Veja também
- Product Card — UI de produto sem variantes
- Featured Product — resolução de produto (contrato separado)

