Modais

5 modais ativos no app — anatomy, tokens reais e diferenças entre variantes.

CityPickerModal

Bottom sheet de busca de cidades e aeroportos para o formulário de voo. Slide-up em 220ms, arrastar > 80px fecha. Background #000, tem drag handle.

descriptioncomponents/CityPickerModal.js
searchDigite cidade ou aeroporto...
location_on
São PauloBrasil (SAO)
chevron_right
location_on
Rio de JaneiroBrasil (GIG)
chevron_right
location_on
CuritibaBrasil (CWB)
chevron_right

Bottom sheet · #000 bg · drag handle

Tokens principais
PropriedadeValor
sheet.bg#000000 (colors.background)
sheet.borderTopRadiusradius.lg (16px)
sheet.maxHeight90%
sheet.paddingHspacing.md (16px)
sheet.paddingBottom56px (spacing.xl + 24)
handle40×4px, rgba(255,255,255,0.3)
searchWrap.bgwhite10 (rgba(255,255,255,0.10))
searchWrap.borderRadiusradius.sm (8px)
searchWrap.minHeight48px
cityName.fontSize16px, Medium
cityDetail.fontSize13px, white60
cityRow.borderBottom1px rgba(255,255,255,0.08)
animation.opentranslateY 48→0, 220ms
swipe.closedy > 80 ou vy > 1.0

ViatorDestinationPickerModal

Bottom sheet de destinos para passeios Viator. Background mais escuro #0A0D11, search pill (borderRadius 100), altura fixa 85%, sem drag handle, border dinâmica (white60 → #4494FC). Seções "Recentes" e "Destinos populares". Debounce 320ms.

descriptioncomponents/ViatorDestinationPickerModal.js
close
Destino de passeios
searchBuscar destino...
Recentes
history
Paris
França
close
Destinos populares
location_on
Roma
Itália
chevron_right
location_on
Tóquio
Japão
chevron_right

Bottom sheet · #0A0D11 bg · pill search · sem handle

Tokens principais
PropriedadeValorNota
sheet.bg#0A0D11Diferente do CityPickerModal (#000)
sheet.height85%Fixo — não maxHeight
drag handlenenhumDiferente do CityPickerModal
closeBtn36×36, borderRadius 18bg white10
searchWrap.height54px (inputHeight)
searchWrap.borderRadius100 (pill)Diferente do CityPickerModal (8px)
searchWrap.bgtransparentDiferente do CityPickerModal (white10)
searchWrap.borderwhite60 → #4494FC (dinâmico)
iconWrap40×40, borderRadius 8, white10Ausente no CityPickerModal
cityName.fontFamilySemiboldMedium no CityPickerModal
cityDetail.fontSize14px13px no CityPickerModal
recentesAsyncStorage, max 6embarko:viator-recent-destinations:v1
debounce320ms

AirlinePickerModal

Modal full-screen — não é bottom sheet. animationType="slide"cobre a tela toda. Busca local em ALL_AIRLINES, sem API, sem debounce. Logos via images.kiwi.com. autoFocus: true.

descriptioncomponents/AirlinePickerModal.js
close
searchBuscar companhia aérea...
LA
LATAM AirlinesLA
G3
Gol Linhas AéreasG3
AD
Azul Linhas AéreasAD

Full-screen · animationType "slide" · #000 bg

Tokens principais
PropriedadeValorNota
animationType"slide"Full-screen, não bottom sheet
overlay.bg#000 (colors.background)
overlay.paddingTopinsets.topSafeAreaInsets
closeBtn40×40, borderRadius 20Maior que ViatorPicker (36×36)
searchWrap.height54px (inputHeight)
searchWrap.borderRadiusradius.sm (8px)
searchWrap.bgwhite10
searchWrap.border1px rgba(255,255,255,0.10)
logoWrap40×40, borderRadius 20 (círculo)
logo.urlimages.kiwi.com/airlines/64/{CODE}.png
rowName.fontSize16px, Medium
rowCode.fontSize14px, white60
buscafiltro local em ALL_AIRLINESSem API, sem debounce

SaveToFavoritesModal

Bottom sheet com dois modos: list (grid de listas existentes) e create (criar nova lista). Animação spring (damping 50, stiffness 350). Após salvar, toast azul com "Salvo em {cidade}".

descriptioncomponents/SaveToFavoritesModal.tsx
close
Salvar nos favoritos
place
Paris
3 itens
folder
Tokyo
1 item
Criar lista de favoritos

Mode: list

close
Criar lista
Nome
Cancelar
Criar

Mode: create

bookmarkSalvo em ParisAlterar

Toast (3.5s auto-dismiss)

Tokens principais
PropriedadeValorNota
sheet.bg#111318Mais claro que o app
sheet.maxHeight92%
closeBtn36×36, borderRadius 18bg white10
animation.openspring, damping 50, stiffness 350
folderImage.borderRadius16px
folderName.fontSize20px, Semibold
nameInput.height52px
nameInput.border1px rgba(255,255,255,0.6)
createBtn.bg#4494FC
createBtn.disabledopacity 0.45Quando input vazio
toast.bg#4494FC
toast.autoDismiss3500ms

DateRangeModal

Seletor de datas de ida e volta com calendário, quick chips (Hoje / Amanhã) e footer com Limpar + Concluído. Background #000, height 90%.

descriptioncomponents/DateRangeModal.js
Selecionar datas
Hoje
Amanhã
calendário · 410px · seleção #4494FC
Limpar
Concluído

Bottom sheet · #000 bg · height 90%

Tokens principais
PropriedadeValorNota
sheet.bg#000 (colors.background)Igual ao CityPickerModal
sheet.height90%
header.height52px
header.borderBottom1px rgba(255,255,255,0.08)
quickChip.height44px
quickChip.radius12px
calendar.height410pxreact-native-calendars
doneBtn.height50px
doneBtn.borderRadius999 (pill)
doneBtn.bg#4494FC
clearTextwhite60, textDecorationLine underline
Comparação — CityPickerModal vs ViatorDestinationPickerModal
PropriedadeCityPickerModalViatorDestinationPickerModal
sheet.bg#000000#0A0D11
sheet.heightmaxHeight 90%height 85% (fixo)
drag handlesimnão
closeBtnnão tem36×36, borderRadius 18
searchWrap.radiusradius.sm (8px)100 (pill)
searchWrap.bgwhite10transparent
searchWrap.bordernenhumawhite60 → #4494FC
cityName.fontFamilyMediumSemibold
cityRow.gapspacing.sm (8px)12px
iconWrapnão tem40×40, borderRadius 8
Recentesnão temAsyncStorage, max 6
Popularesnão temlista fixa