Botões

Todos os botões padronizados do app — 6 variantes com tokens, estados e código real.

PrimaryButton
Cancelar / Ghost
Modal CTA
Inline Card (Confira)
Fechar (modal)
Voltar (header)
Botões
Disabled

PrimaryButton

CTA principal. Buscar voos, confirmar viagem, avançar. Pill azul, texto preto.

Component/PrimaryButtonVariants: Default, Disabled — components/PrimaryButton.js
Buscar voos
Default
Buscar voos
Disabled
PropriedadeValorDescrição
heightbuttonHeight (54px)Token compartilhado com inputs
borderRadius100pxPill perfeito
backgroundColorcolors.embarko_blue#4494FC
colorcolors.black (#000)Texto preto sobre azul
fontSize16pxSemibold
pressedOpacity0.9Estado pressed
disabledOpacity0.4Estado disabled
tsx
copy
import { PrimaryButton } from "@/components/PrimaryButton";

<PrimaryButton
  title="Buscar voos"
  onPress={() => handleSearch()}
/>

// StyleSheet interno:
// button: { height: buttonHeight, borderRadius: 100, backgroundColor: colors.embarko_blue }
// pressed: { opacity: 0.9 }
// text: { fontSize: 16, fontFamily: Semibold, color: '#000000' }

Cancelar / Ghost

Ação secundária ou de cancelamento em modais. Sem fundo — apenas texto.

Component/CancelButtonUsado nos footers de modal — inline com o Modal CTA
Cancelar
Default
PropriedadeValorDescrição
height48pxMesma altura do Modal CTA
backgroundtransparentSem fundo
colorcolors.white#FFFFFF
fontSize16pxSemibold
pressedOpacity0.7Estado pressed
tsx
copy
<Pressable
  style={({ pressed }) => [styles.cancelBtn, pressed && { opacity: 0.7 }]}
  onPress={onClose}
>
  <Text style={styles.cancelBtnText}>Cancelar</Text>
</Pressable>

// cancelBtn: { height: 48, justifyContent: 'center' }
// cancelBtnText: { fontSize: 16, fontFamily: Semibold, color: colors.white }

Botão de confirmação dentro de modais. Menor que o PrimaryButton — border radius quadrado.

Component/ModalCTAVariants: Default, Disabled — SaveToFavoritesModal, GerenciarListaModal
Salvar
Default
Salvar
Disabled
Criar lista
Criar
PropriedadeValorDescrição
height48px
borderRadiusradius.sm (8px)Quadrado, não pill
backgroundColorcolors.embarko_blue#4494FC
paddingHorizontal24px
colorcolors.black (#000)Texto preto sobre azul
fontSize16pxSemibold
disabledOpacity0.45Quando input vazio ou inválido
tsx
copy
<Pressable
  style={[
    styles.saveBtn,
    !isValid && styles.saveBtnDisabled,
    ({ pressed }) => pressed && { opacity: 0.85 },
  ]}
  onPress={onSave}
  disabled={!isValid}
>
  <Text style={styles.saveBtnText}>Salvar</Text>
</Pressable>

// saveBtn: { backgroundColor: colors.embarko_blue, height: 48, paddingHorizontal: 24, borderRadius: 8 }
// saveBtnDisabled: { opacity: 0.45 }
// saveBtnText: { fontSize: 16, fontFamily: Semibold, color: '#000000' }

Inline Card — Confira

Botão compacto dentro do ShowCard. Menor, border radius médio, sem ícone.

Component/ShowCard/CtaButtonAparece no rodapé do ShowHighlightCard
Confira
Default
PropriedadeValorDescrição
borderRadiusradius.md (12px)
paddingHorizontal14px
paddingVertical8px
backgroundColorcolors.embarko_blue
colorcolors.black (#000)
fontSize14pxMenor que os outros botões
tsx
copy
// ShowHighlightCard.js — styles.ctaButton / ctaText
ctaButton: {
  alignSelf: 'flex-end',
  backgroundColor: colors.embarko_blue,
  borderRadius: radius.md,      // 12
  paddingHorizontal: 14,
  paddingVertical: 8,
},
ctaText: {
  color: '#000000',
  fontSize: 14,
  fontFamily: Semibold,
}

Fechar (modal header)

Botão de ícone circular para fechar modais. Sempre no header do sheet, lado direito.

Component/CloseButtonPadrão SaveToFavoritesModal — Material Icons close, size 20
close
Default
PropriedadeValorDescrição
width / height36px
borderRadius18pxCircular
backgroundColorcolors.white10rgba(255,255,255,0.10)
iconSize20pxMaterial Icons close
pressedOpacity0.7
tsx
copy
// Padrão: closeBtn ao lado do título do sheet
<View style={styles.sheetHeader}>
  <View style={{ width: 36, height: 36 }} /> {/* espaçador */}
  <Text style={styles.sheetTitle}>Título</Text>
  <Pressable
    style={({ pressed }) => [styles.closeBtn, pressed && { opacity: 0.7 }]}
    onPress={onClose}
  >
    <MaterialIcons name="close" size={20} color={colors.white} />
  </Pressable>
</View>

// closeBtn: { width: 36, height: 36, borderRadius: 18, backgroundColor: colors.white10 }

Voltar (header de tela)

Botão de ícone no header de telas completas. Ligeiramente maior que o close.

Component/BackButtonPadrão Tela Completa — Material Icons arrow_back, size 22
arrow_back
Default
PropriedadeValorDescrição
width / height40px
borderRadius100pxCircular
backgroundColorcolors.white10rgba(255,255,255,0.10)
iconSize22pxMaterial Icons arrow_back
pressedOpacity0.7
tsx
copy
// Padrão: toda tela com header fixo
<Pressable
  onPress={() => router.back()}
  hitSlop={12}
  style={({ pressed }) => [styles.backBtn, pressed && { opacity: 0.7 }]}
>
  <MaterialIcons name="arrow-back" size={22} color={colors.white} />
</Pressable>

// backBtn: { width: 40, height: 40, borderRadius: 100, backgroundColor: colors.white10 }