{"version":3,"sources":["webpack:///./app/javascript/components/vof/helpers/contentRenderHelper.js","webpack:///./app/javascript/components/vof/helpers/searchHelpers.js","webpack:///./app/javascript/components/vof/hero/ui/SubmitButton.jsx","webpack:///./app/javascript/components/vof/hero/dropdown/DropdownMenuItem.jsx","webpack:///./app/javascript/components/vof/hero/dropdown/DropdownMenu.jsx","webpack:///./app/javascript/components/vof/hero/fields/DestinationsDateFields.jsx","webpack:///./app/javascript/components/vof/hero/tabs/packages/PackageSearchForm.jsx","webpack:///./app/javascript/components/vof/hero/tabs/packages/TabsPackageDeal.jsx","webpack:///./app/javascript/components/vof/api/server.js","webpack:///./app/javascript/components/common/ui/Button.jsx","webpack:///./app/javascript/components/common/hooks/useOutsideClick.js","webpack:///./app/javascript/components/vof/common/forms/DateFieldRange.jsx"],"names":["subHeightCalculations","subElClass","sub","document","querySelector","subHeight","clientHeight","height","Math","max","documentElement","window","innerHeight","fetchPackages","payload","server","get","params","setFullScreenElHeight","el","style","setFullScreenClasses","hotelsEl","body","classList","add","setFullScreenHeights","removeFullScreenClasses","remove","removeFullScreenHeights","setHotelsHeightActions","setTimeout","Promise","resolve","then","search","calcNightsMoment","start","end","diff","setMinDepartureDateMoment","date","nights","moment","disableScroll","element","isIOS","disableBodyScroll","enableScroll","clearAllBodyScrollLocks","enableBodyScroll","SubmitButton","handler","disabled","label","iconClasses","className","rest","clickHandler","type","DropdownMenuItem","hovered","item","menu","getActiveHoveredState","setDropdownOptionHoverState","selectDropdownOption","role","tabIndex","data-item","onMouseOver","onClick","DropdownMenu","getAllDestinations","closeOpenDropdown","dropdownRef","useRef","outsideClick","useOutsideClick","outsideRef","onEveryClick","useEffect","click","ref","map","i","key","DestinationsDateFields","arrival","setArrival","minNights","setNights","setPlaying","departure","setDeparture","useState","dateFocused","setDateFocused","DateFieldRange","startDate","endDate","focusedInput","onDatesChange","hours","minDeparture","onFocusChange","focused","minimumNights","isDayBlocked","isDateBlockedForSelection","numberOfMonths","isMobile","keepOpenOnDateSelect","initialVisibleMonth","earliestStartDate","showDefaultInputIcon","withPortal","startDatePlaceholderText","endDatePlaceholderText","PackageSearchForm","useContext","HeroContext","state","dropdown","activeDestinationTitle","activeDestinationHeading","activeDestination","destinations","dispatch","_setPlaying","playing","HERO","PLAYING","SET","displayLocationAside","setDisplayLocationAside","valid","setValid","queryObj","toggleDropdown","open","dropdownTmp","DROPDOWN","_setDropdown","length","aria-hidden","id","aria-expanded","aria-haspopup","aria-label","ARRIVAL","NIGHTS","href","destination","format","Qs","stringify","e","preventDefault","trackSeePackageDetailsClick","TabsPackageDeal","setMinNights","lowestNightsList","lowestStay","webPSupport","_setActiveDestinationHeading","heading","ACTIVE_DESTINATION","HEADING","setListBarSelection","useSetDestinationListBarPos","setBackgroundImage","useSetBackgroundImage","getDestinationData","property","verb","webp_image","image","getActiveDropdown","setActiveDestination","option","title","active","nav","value","featured","isFeatured","featuredDestinations","some","t","TITLE","NAV","url","destinationsDropdownList","animated","selected","n","$heroBg","transform","animation","clearInterval","_destinationInterval_","API_URL","location","protocol","host","axios","create","baseURL","Button","children","props","defaultProps","setOutsideClick","handleClickOutside","event","current","contains","target","handleKeydown","addEventListener","removeEventListener","startDateId","endDateId","hideKeyboardShortcutsPanel","readOnly","numberMonths","transitionDuration","noBorder"],"mappings":"4bAWMA,EAAwB,SAACC,GAC7B,IAAIC,EAAMC,SAASC,cAAcH,GAEjC,GAAGC,EAAK,CACN,IAAIG,EAAYH,EAAII,aAChBC,EAASC,KAAKC,IAChBN,SAASO,gBAAgBJ,aACzBK,OAAOC,aAAe,GAIxB,MAAM,GAAN,OADoBL,EAASF,EAC7B,QChBSQ,EAAgB,SAACC,GAC5B,OAAOC,IAAOC,IAAI,iBAAkB,CAAEC,OAAQH,KAqBnCI,EAAwB,SAACC,GACjCA,IACDA,EAAGC,MAAMb,OAAT,UAAqBC,KAAKC,IAAIN,SAASO,gBAAgBJ,aAAcK,OAAOC,aAAe,GAA3F,QAGSS,EAAuB,WAClC,IAAIC,EAAWnB,SAASC,cAAc,WAClCmB,EAAOpB,SAASC,cAAc,QAClBD,SAASC,cAAc,sBAC7BoB,UAAUC,IAAI,cACxBH,EAASE,UAAUC,IAAI,cACvBF,EAAKC,UAAUC,IAAI,cACnBC,KAGWC,EAA0B,WACrC,IAAIL,EAAWnB,SAASC,cAAc,WAClCmB,EAAOpB,SAASC,cAAc,QAClBD,SAASC,cAAc,sBAC7BoB,UAAUI,OAAO,cAC3BN,EAASE,UAAUI,OAAO,cAC1BL,EAAKC,UAAUI,OAAO,cACtBC,KAGWH,EAAuB,WAClC,IAAIJ,EAAWnB,SAASC,cAAc,WACnCkB,EACDQ,EAAuBR,GAEvBS,YAAW,WACT,IAAIT,EAAWnB,SAASC,cAAc,WACnCkB,GACDQ,EAAuBR,KAExB,MAIDQ,EAAyB,SAACX,GDhEG,IAAClB,ECiElCkB,EAAGC,MAAMb,OAAT,UAAqBC,KAAKC,IAAIN,SAASO,gBAAgBJ,aAAcK,OAAOC,aAAe,GAA3F,ODjEkCX,ECmEd,cDnE6B,IAAI+B,SAAQ,SAACC,GAC3D9B,SAASC,cAAcH,GACxBgC,EAAQjC,EAAsBC,IAE9B8B,YAAY,kBAAME,EAAQjC,EAAsBC,MAAc,SCgE9DiC,MAAM,SAAC3B,GACL,IAAI4B,EAAShC,SAASC,cAAc,oBACjC+B,GACDA,EAAOf,MAAMb,OAASA,EAEtBwB,YAAW,WACKI,EAAO/B,cAAc,YAC3BgB,MAAMb,OAASA,IACtB,MAEHwB,YAAW,WACT,IAAII,EAAShC,SAASC,cAAc,oBACjC+B,IACDA,EAAOf,MAAMb,OAASA,EACR4B,EAAO/B,cAAc,YAC3BgB,MAAMb,OAASA,KAExB,SAMEsB,EAA0B,WACrC,IAAIP,EAAWnB,SAASC,cAAc,WAClC+B,EAAShC,SAASC,cAAc,oBACpCkB,EAASF,MAAMb,OAAS,KACxB4B,EAAOf,MAAMb,OAAS,MAYX6B,EAAmB,SAACC,EAAOC,GAAR,OAAgBA,EAAIC,KAAKF,EAAO,SAWnDG,EAA4B,SAACC,EAAMC,GAAP,OAAkBC,IAAOF,GAAMhB,IAAIiB,EAAQ,SAuBvEE,EAAgB,SAACC,GACxBC,SAAOC,4BAAkB5C,SAASC,cAAcyC,IACzC1C,SAASC,cAAc,QAC7BoB,UAAUC,IAAI,eAGRuB,EAAe,SAACH,GACvBC,SAAOG,oCACPH,SAAOI,2BAAiB/C,SAASC,cAAcyC,IACxC1C,SAASC,cAAc,QAC7BoB,UAAUI,OAAO,gB,8FCvHTuB,IA/BM,SAAC,GAOf,IANLC,EAMI,EANJA,QACAC,EAKI,EALJA,SACAC,EAII,EAJJA,MACAC,EAGI,EAHJA,YAGI,IAFJC,iBAEI,MAFQ,GAER,EADDC,EACC,gEACJ,OACE,kBAAC,IAAD,KACEC,aAAiBN,EACjBI,UAAS,0CAA2CA,GACpDG,KAAgB,SAChBN,SAAiBA,GACbI,GAEJ,uBAAGD,UAAS,eAAUD,KACtB,8BAAOD,GACP,uBAAGE,UAAS,oCAAgCH,EAAkD,GAAvC,2C,qFCqB9CO,EAxCU,SAAC,GAMnB,IAGGC,EARRC,EAKI,EALJA,KACAC,EAII,EAJJA,KACAC,EAGI,EAHJA,sBACAC,EAEI,EAFJA,4BACAC,EACI,EADJA,qBAqBA,OACE,yBAAKC,KAAK,YAAYC,SAAS,IAAIZ,UAAU,4BAZ3C,yBACEa,YAAkBP,EAClBQ,YAAkB,kBAAML,EAA4BF,EAAMD,IAC1DS,QAAkB,kBAAML,EAAqBH,EAAMD,IACnDN,UAAS,oCAVPK,EAAUG,IACTF,IAASD,EAAU,UAAY,MAWhCC,EAAKR,S,SCqCAkB,EAxDM,SAAC,GAOf,IANLC,EAMI,EANJA,mBACAR,EAKI,EALJA,4BACAD,EAII,EAJJA,sBACAE,EAGI,EAHJA,qBACAH,EAEI,EAFJA,KACAW,EACI,EADJA,kBAEMC,EAAcC,mBACbC,EAAgBC,YAAgB,CAACC,WAAYJ,EAAaK,cAAc,IAAxEH,aAEPI,qBAAU,WACLJ,EAAaK,OACdR,EAAkB,iBAEpB,CAACG,IAkBH,OACE,yBAAKrB,UAAU,mDACb,yBAAKA,UAAU,+BACb,yBACEW,KAAK,OACLX,UAAU,8BACV2B,IAAKR,GArBGF,IACDW,KAAI,SAACtB,EAAMuB,GACtB,OACE,kBAAC,EAAD,CACEvB,KAASA,EACTwB,IAASD,EACTtB,KAAUA,EACVC,sBAAgCA,EAChCC,4BAAgCA,EAChCC,qBAAgCA,W,2FCiD3BqB,EAjEgB,SAAC,GAQzB,IAPLC,EAOI,EAPJA,QACAC,EAMI,EANJA,WACAC,EAKI,EALJA,UACAC,EAII,EAJJA,UACAC,EAGI,EAHJA,WACAC,EAEI,EAFJA,UACAC,EACI,EADJA,aACI,EACkCC,mBAAS,MAD3C,WACGC,EADH,KACgBC,EADhB,KA2BJ,OACE,kBAACC,EAAA,QAAD,CACEC,UAA6BX,EAC7BY,QAA6BP,EAC7BQ,aAA6BL,EAC7BM,cA7BuB,SAAC,GAA4B,IAA1BH,EAAyB,EAAzBA,UAAWC,EAAc,EAAdA,QACvC,GAAGD,EAAW,CACZ,GAAIA,EAAYxD,MAAS4D,MAAM,GAAI,OAAO,EAC1Cd,EAAWU,GAEX,IAAIK,EAAe7D,IAAOwD,GAAW1E,IAAIiE,EAAW,QACpDI,EAAaU,GACbP,EAAe,WAGdG,IACDN,EAAaM,GACbT,EAAUvD,YAAiB+D,EAAWC,IACtCH,EAAe,QAiBfQ,cAbuB,SAAAC,GACzBT,EAAeS,GACZA,GAASd,GAAW,IAYrBe,cAA6BjB,EAC7BkB,aAA6BC,IAC7BC,eAX6BC,WAAW,EAAI,EAY5CC,sBAA6B,EAC7BC,oBAA6B,kBAAMC,eACnCC,sBAA6B,EAC7BC,YAA6B,EAC7BC,yBAA4B,UAC5BC,uBAA4B,e,UC2GnBC,EApKW,SAAC,GAEpB,IADL7B,EACI,EADJA,UACI,EAUY8B,qBAAWC,KAVvB,IAEIC,MACNC,EAHE,EAGFA,SACAC,EAJE,EAIFA,uBACAC,EALE,EAKFA,yBACAC,EANE,EAMFA,kBACAC,EAPE,EAOFA,aACAvC,EARE,EAQFA,QACA9C,EATE,EASFA,OACCsF,EAVC,EAUDA,SAEGC,EAAc,SAACC,GAAD,OAClBF,EAAS,CAAErE,KAAMwE,IAAKC,QAAQC,IAAKvH,QAASoH,KAb1C,EAoBoDnC,oBAAS,GApB7D,WAoBGuC,EApBH,KAoByBC,EApBzB,OAqB8BxC,mBAAS,MArBvC,WAqBGF,EArBH,KAqBcC,EArBd,OAsBsBC,oBAAS,GAtB/B,WAsBGyC,EAtBH,KAsBUC,EAtBV,KAwBJxD,qBAAU,WACRwD,EAASjD,EAAUK,KAClB,CAACL,EAASK,IAEbZ,qBAAU,WAELO,GAAWK,GAAanD,IACLN,YAAiBoD,EAASK,GAC3BnD,GAAQoD,EAAa,SAEzC,CAACpD,IAEJ,IACQgG,EAoBFC,EAAiB,SAAC5E,GACjB4D,EAAS5D,GAAM6E,MAAMX,GAAY,GAEtC,IAAIY,EAAclB,EAClBkB,EAAY9E,GAAM6E,MAAQC,EAAY9E,GAAM6E,KA/CzB,SAACjB,GACpBK,EAAS,CAAErE,KAAMwE,IAAKW,SAAST,IAAKvH,QAAS6G,IA+C7CoB,CAAaF,GACbN,GAAwB,IAK1B,OACE,yBAAK/E,UAAU,uBACb,yBAAKA,UAAU,uBACb,2BAAOA,UAAU,eAAjB,eAEE,yBAAKA,UAAU,2BACb,2CADF,IACyB,2BAAIqE,GAA4B,oBAI7D,yBACErE,UAAS,8CACPuE,EAAaiB,OAAS,EAAI,SAAW,KAGvC,yBAAKxF,UAAU,eACb,yBACEA,UAAU,UACVe,QAAS,kBAAMoE,EAAe,iBAE5B,yBAAKnF,UAAU,oBACb,uBAAGA,UAAU,wBAAwByF,cAAY,SACjD,4BACEC,GAAG,iBACH1F,UAAU,sBACV2F,gBAAc,QACdC,gBAAc,OACdC,aAAW,YACXlF,KAAK,UAEJyD,IAGP,yBAAKpE,UAAU,mBACb,uBACEA,UAAU,kBACVyF,cAAY,SAEd,uBACEzF,UAAU,oBACVyF,cAAY,WAKhBX,GACA,+BACE,uBAAG9E,UAAU,QAAQe,QAjDN,kBAAMgE,GAAwB,KAiD7C,KACA,8DACA,mFAKR,yBACE/E,UAAS,yCAET,yBAAKA,UAAU,eACb,0CACA,6CAEF,kBAAC,EAAD,CACEgC,QAAgBA,EAChBC,WAjHY,SAACD,GAAD,OAClBwC,EAAS,CAAErE,KAAMwE,IAAKmB,QAAQjB,IAAKvH,QAAS0E,KAiHtCE,UAAgBA,EAChBC,UArHW,SAACjD,GAAD,OACjBsF,EAAS,CAAErE,KAAMwE,IAAKoB,OAAOlB,IAAKvH,QAAS4B,KAqHrCkD,WAAgBqC,EAChBpC,UAAgBA,EAChBC,aAAgBA,KAGpB,uBAAGtC,UAAU,QAAb,yCAA0D,6BAA1D,wDACA,yBAAKA,UAAU,iBACb,uBACEgG,MAzGAd,EAAW,CACfe,YAAa3B,GAEZtC,IACDkD,EAASlD,QAAqB,MAAXA,EAAkBA,EAAQkE,OAAO,cAAgBlE,EAEjE9C,IACDgG,EAAShG,OAASA,IAIhB,aAAN,OAAoBiH,IAAGC,UAAUlB,KA+F3BnE,QAAS,SAACsF,GAAD,OA5FmB,SAACA,GAC/BrB,GACFqB,EAAEC,iBA0FkBC,CAA4BF,KAE5C,kBAAC1G,EAAA,EAAD,CACEC,QAAe,aACfC,UAAgBmF,EAChBlF,MAAc,kBACd+F,aAAc,kBACd9F,YAAc,8B,mkBCIXyG,UA3JS,SAAC,GAMlB,IALLtE,EAKI,EALJA,UACAuE,EAII,EAJJA,aACAC,EAGI,EAHJA,iBACAC,EAEI,EAFJA,WACAC,EACI,EADJA,YACI,EACwB5C,qBAAWC,KAA/BC,EADJ,EACIA,MAAOM,EADX,EACWA,SAKTqC,EAA+B,SAACC,GAAD,OACnCtC,EAAS,CAAErE,KAAMwE,IAAKoC,mBAAmBC,QAAS1J,QAASwJ,KAGvDvB,EAAe,SAACpB,GAAD,OACnBK,EAAS,CAAErE,KAAMwE,IAAKW,SAAST,IAAKvH,QAAS6G,KAMvC8C,EAAwBC,cAAxBD,oBACAE,EAAuBC,cAAvBD,mBAeFE,EAAqB,SAACpB,EAAaqB,GACvC,OAAQA,GACN,IAAK,OACH,OAAOpD,EAAMK,aAAa0B,GAAasB,KACzC,IAAK,QACH,OAAIX,EACK1C,EAAMK,aAAa0B,GAAauB,WAGhCtD,EAAMK,aAAa0B,GAAawB,QASzCC,EAAoB,kBAAMxD,EAAMC,SAAS8B,YAAYb,KAAO,cAAgB,MAyD5EuC,EAAuB,SAACC,GAC5B,IA3GkCC,EAENC,EAIIC,EAaNC,EAAOC,EAwF7BC,EAAahE,EAAMiE,qBAAqBC,MAAK,SAAAC,GAAC,OAAIA,GAAKT,EAAOI,SA3GhCH,EA4GPD,EAAO9H,MA3GlC0E,EAAS,CAAErE,KAAMwE,IAAKoC,mBAAmBuB,MAAOhL,QAASuK,IAC7BC,EA2GPF,EAAOI,MA1G5BxD,EAAS,CAAErE,KAAMwE,IAAKoC,mBAAmBlC,IAAKvH,QAASwK,IAGvBC,EAwGPH,EAAOI,MAvGhCxD,EAAS,CAAErE,KAAMwE,IAAKoC,mBAAmBwB,IAAKjL,QAASyK,IAY7BC,EA4FPJ,EAAOI,MA5FOC,EA4FAC,EA3F7BF,GAEAnB,EADCoB,EAECZ,EAAmBW,EAAO,QAGC,kBAuF9BE,IACDjB,EAAoBW,EAAOI,OAC3Bb,EAAmB,CAACqB,IAAKnB,EAAmBO,EAAOI,MAAO,SAAUtD,QAASR,EAAMQ,YAIvF,OACE,oCACE,kBAAC,EAAD,CACExC,UAAaA,IA3EYgC,EAAMC,SAAS8B,YAAYb,MA+EpD,kBAAC,EAAD,CACE7E,KAAiCmH,IACjClH,sBAvEsB,WAC5B,IAAMsH,EAASJ,IACf,OAAOI,EAAS5D,EAAMC,SAAS2D,GAAQzH,QAAU,MAsE3CY,mBA1E4B,kBAAMiD,EAAMuE,0BA2ExChI,4BA9B4B,SAACF,EAAMqH,GACzC,IAAMvC,EAAW,KAAOnB,EAAMC,UAC9BkB,EAAY9E,GAAMF,QAAUuH,EAC5BrC,EAAaF,IA4BP3E,qBA/DqB,SAACH,EAAMqH,EAAQc,GAC1C,IA3DmBhE,EAEDxF,EAyDZmG,EAAW,KAAOnB,EAAMC,UAG9B,GAFAkB,EAAY9E,GAAM6E,MAAO,EAErBC,EAAY9E,GAAMoI,WAAaf,EAAOI,QACxC3C,EAAY9E,GAAMoI,SAAWf,EAAOI,MACpC3C,EAAY9E,GAAMF,QAAW,KAEhB,gBAATE,GAAwB,CAG1B,GAFAoH,EAAqBC,GAElBlB,EAAkB,CACnB,IAAIkC,EAAIlC,EAAiBkB,EAAOI,OAAStB,EAAiBkB,EAAOI,OAASrB,EApE9DzH,EAqED0J,EApEjBpE,EAAS,CAAErE,KAAMwE,IAAKoB,OAAOlB,IAAKvH,QAAS4B,IAqErCuH,EAAamC,GAGf,IAAKF,EAAU,CACb,IAAIG,EAAUlM,SAASC,cAAc,YACrCiM,EAAQjL,MAAMkL,UAAY,WAC1BD,EAAQjL,MAAMmL,UAAY,OAGxB7E,EAAMQ,UAAYgE,IACpBM,cAAc7L,OAAO8L,uBAlFRvE,GAmFD,EAlFlBF,EAAS,CAAErE,KAAMwE,IAAKC,QAAQC,IAAKvH,QAASoH,KAsF5Ca,EAAaF,IAmCPnE,kBAtEmB,SAACX,GAC1B,IAAM8E,EAAW,KAAOnB,EAAMC,UAC9BkB,EAAY9E,GAAM6E,MAAO,EACzBG,EAAaF,S,iCCnFjB,qBAEM6D,EAAO,UAAM/L,OAAOgM,SAASC,SAAtB,aAAmCjM,OAAOgM,SAASE,MAEjDC,QAAMC,OAAO,CAC1BC,QAASN,K,oFCFLO,EAAS,SAAC,GAAD,IAAGzJ,EAAH,EAAGA,UAAW0J,EAAd,EAAcA,SAAUxJ,EAAxB,EAAwBA,aAAcC,EAAtC,EAAsCA,KAAMQ,EAA5C,EAA4CA,KAASgJ,EAArD,oEACb,gCACE3J,UAAS,iBAAYA,GACrBe,QAASb,EACTC,KAAMA,EACNQ,KAAMA,GAAQ,UACVgJ,GACHD,IAILD,EAAOG,aAAe,CACpBzJ,KAAM,SACNQ,KAAM,UAWO8I,O,4DCpBA,aAACE,GAAW,IAAD,EACDpH,mBAASoH,GAAS,iBAAkBA,GAApDnI,EADiB,cAEgBe,qBAASf,GAAe,CAACE,OAAO,IAFhD,WAEjBL,EAFiB,KAEHwI,EAFG,KAGlBtI,EAAaoI,GAAS,eAAgBA,EAAQA,EAAMpI,WAAaH,iBAAO,MAE9E,SAAS0I,EAAmBC,GACtBxI,GAAcA,EAAWyI,UAAYzI,EAAWyI,QAAQC,SAASF,EAAMG,QACzEL,GAAgBrI,GAAe,CAACE,OAAO,IAC/BH,GAAcA,EAAWyI,SAAWzI,EAAWyI,QAAQC,SAASF,EAAMG,SAC9EL,IAAgBrI,GAAe,CAACE,OAAO,IAI3C,SAASyI,EAAcJ,GACH,WAAdA,EAAMjI,KACR+H,GAAgBrI,GAAe,CAACE,OAAO,IAe3C,OAXAD,qBAAU,WAIR,OAFA9E,SAASyN,iBAAiB,YAAaN,GACvCnN,SAASyN,iBAAiB,UAAWD,GAC9B,WAELxN,SAAS0N,oBAAoB,YAAaP,GAC1CnN,SAAS0N,oBAAoB,UAAWF,MAE1C,IAEK,CAAC9I,eAAcE,aAAYsI,qB,wJC7B9BnH,G,OAAiB,SAAC,GAiBlB,EAhBJ1C,UAgBK,IAfL2C,EAeI,EAfJA,UACA2H,EAcI,EAdJA,YACA1H,EAaI,EAbJA,QACA2H,EAYI,EAZJA,UACAzH,EAWI,EAXJA,cACAD,EAUI,EAVJA,aACAI,EASI,EATJA,cACAE,EAQI,EARJA,cACAU,EAOI,EAPJA,yBACAC,EAMI,EANJA,uBACAR,EAKI,EALJA,eACAE,EAII,EAJJA,qBACAgH,EAGI,EAHJA,2BACAC,EAEI,EAFJA,SACGd,EACC,wQAIEe,EAAepH,IAFYC,WAAW,EAAI,GAIhD,OACE,kBAAC,IAAD,KACEZ,UAAWA,EACX2H,YAAaA,EACb1H,QAASA,EACT2H,UAAWA,EACXzH,cAAeA,EACfD,aAAcA,EACdI,cAAeA,EACfE,cAAeA,EACfU,yBAA0BA,EAC1BC,uBAAwBA,EACxBN,qBAAsBA,EACtBF,eAAgBoH,EAChBF,2BAA4BA,EAC5BC,SAAUA,EACVE,mBAAoB,EACpBC,UAAQ,GACJjB,MAKVjH,EAAekH,aAAe,CAC5BjH,UAAW,KACX2H,YAAa,UACb1H,QAAS,KACT2H,UAAW,YACX1H,aAAc,YACdM,cAAe,EACfU,yBAA0B,cAC1BC,uBAAwB,cACxBN,sBAAsB,EACtBgH,4BAA4B,EAC5BC,UAAU,GAkBG/H,a","file":"js/60-51a7ea5a815ea6bb6729.chunk.js","sourcesContent":["\n// A promise to return full height minus passed node height\n// subElClass: (string) class or id of element\nexport const getContentHeightSub = (subElClass) => new Promise((resolve) => {\n if(document.querySelector(subElClass)) {\n resolve(subHeightCalculations(subElClass))\n } else {\n setTimeout( () => resolve(subHeightCalculations(subElClass)), 1000)\n }\n})\n\nconst subHeightCalculations = (subElClass) => {\n let sub = document.querySelector(subElClass)\n\n if(sub) {\n let subHeight = sub.clientHeight\n let height = Math.max(\n document.documentElement.clientHeight,\n window.innerHeight || 0\n )\n\n let contentHeight = height - subHeight\n return `${contentHeight}px`\n }\n}","import { enableBodyScroll, disableBodyScroll, clearAllBodyScrollLocks } from 'body-scroll-lock'\nimport { isIOS } from 'react-device-detect'\nimport server from '../api/server'\nimport moment from 'moment'\nimport { getContentHeightSub } from './contentRenderHelper'\n\nexport const fetchPackages = (payload) => {\n return server.get('/packages.json', { params: payload })\n}\n\n// If within 40% of top\nexport const isInViewport = (elem) => {\n var bounding = elem.getBoundingClientRect()\n // Only if 40% from top of viewport\n let twenty = Math.ceil( (window.innerHeight || document.documentElement.clientHeight) * 0.4)\n\n return (\n (\n bounding.bottom >= 0 &&\n bounding.bottom <= (window.innerHeight || document.documentElement.clientHeight)\n ) || (\n bounding.top >= 0 &&\n bounding.top <= twenty\n )\n )\n}\n\n\nexport const setFullScreenElHeight = (el) => {\n if(el)\n el.style.height = `${Math.max(document.documentElement.clientHeight, window.innerHeight || 0)}px`\n}\n\nexport const setFullScreenClasses = () => {\n let hotelsEl = document.querySelector(\".hotels\")\n let body = document.querySelector(\"body\")\n let wrapperEl = document.querySelector(\".ecommerce-wrapper\")\n wrapperEl.classList.add(\"fullscreen\")\n hotelsEl.classList.add(\"fullscreen\")\n body.classList.add(\"fullscreen\")\n setFullScreenHeights()\n}\n\nexport const removeFullScreenClasses = () => {\n let hotelsEl = document.querySelector(\".hotels\")\n let body = document.querySelector(\"body\")\n let wrapperEl = document.querySelector(\".ecommerce-wrapper\")\n wrapperEl.classList.remove(\"fullscreen\")\n hotelsEl.classList.remove(\"fullscreen\")\n body.classList.remove(\"fullscreen\")\n removeFullScreenHeights()\n}\n\nexport const setFullScreenHeights = () => {\n let hotelsEl = document.querySelector(\".hotels\")\n if(hotelsEl) {\n setHotelsHeightActions(hotelsEl)\n } else {\n setTimeout(() => {\n let hotelsEl = document.querySelector(\".hotels\")\n if(hotelsEl) {\n setHotelsHeightActions(hotelsEl)\n }\n }, 300)\n }\n}\n\nconst setHotelsHeightActions = (el) => {\n el.style.height = `${Math.max(document.documentElement.clientHeight, window.innerHeight || 0)}px`\n\n getContentHeightSub('.search-bar').\n then( (height) => {\n let search = document.querySelector(\".viewport.search\")\n if(search) {\n search.style.height = height\n // To let hotels load\n setTimeout(() => {\n let content = search.querySelector(\".content\")\n content.style.height = height\n }, 2000)\n } else {\n setTimeout(() => {\n let search = document.querySelector(\".viewport.search\")\n if(search) {\n search.style.height = height\n let content = search.querySelector(\".content\")\n content.style.height = height\n }\n }, 1000)\n }\n })\n\n}\n\nexport const removeFullScreenHeights = () => {\n let hotelsEl = document.querySelector(\".hotels\")\n let search = document.querySelector(\".viewport.search\")\n hotelsEl.style.height = null\n search.style.height = null\n}\n\nexport const calcNights = (start, end) => {\n let date1_ms = start.getTime()\n let date2_ms = end.getTime()\n let difference_ms = date2_ms - date1_ms\n let nights = Math.round(difference_ms / (1000 * 60 * 60 * 24))\n return nights\n}\n\n// Expects a Moment object for each date\nexport const calcNightsMoment = (start, end) => end.diff(start, 'days')\n\n// Calc min departure date by min package nights\nexport const setMinDepartureDate = (date, nights) => {\n let minDeparture = new Date(date)\n minDeparture.setDate(minDeparture.getDate() + parseInt(nights))\n return minDeparture\n}\n\n// Calc min departure date by min package nights\n// Expects Momemt object\nexport const setMinDepartureDateMoment = (date, nights) => moment(date).add(nights, \"days\")\n\n// Set Hotels Fullscreen\nexport const setupHotelFullscreen = () => {\n let hotelEl = document.querySelector(\".hotels\")\n // let searchEl = document.querySelector(\".viewport.search\")\n if(hotelEl) {\n // let body = document.querySelector(\"body\")\n // body.classList.add(\"fullscreen\")\n // clearAllBodyScrollLocks()\n setFullScreenClasses()\n if(!isIOS) {\n disableBodyScroll(hotelEl)\n }\n // setFullScreenElHeight(hotelEl)\n // let subHeight = getContentHeightSub(\".search-bar\")\n // let search = document.querySelector(\".viewport.search\")\n // search.style.height = subHeight\n // disableBodyScroll(hotelEl, { allowTouchMove: el => el.classList.contains(\"scrollable\") })\n // disableBodyScroll(searchEl)\n }\n}\n\nexport const disableScroll = (element) => {\n if(!isIOS) disableBodyScroll(document.querySelector(element))\n let body = document.querySelector(\"body\")\n body.classList.add(\"fullscreen\")\n}\n\nexport const enableScroll = (element) => {\n if(!isIOS) clearAllBodyScrollLocks()\n if(!isIOS) enableBodyScroll(document.querySelector(element))\n let body = document.querySelector(\"body\")\n body.classList.remove(\"fullscreen\")\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport Button from '../../../common/ui/Button'\n\nconst SubmitButton = ({\n handler,\n disabled,\n label,\n iconClasses,\n className = '',\n ...rest\n}) => {\n return (\n \n \n {label}\n \n \n )\n}\n\nSubmitButton.propTypes = {\n handler: PropTypes.func.isRequired,\n disabled: PropTypes.bool.isRequired,\n label: PropTypes.string.isRequired,\n iconClasses: PropTypes.string,\n className: PropTypes.string\n}\n\nexport default SubmitButton","import React from \"react\"\nimport PropTypes from \"prop-types\"\n\nconst DropdownMenuItem = ({\n item,\n menu,\n getActiveHoveredState,\n setDropdownOptionHoverState,\n selectDropdownOption,\n}) => {\n\n const isHovered = () => {\n const hovered = getActiveHoveredState()\n return item === hovered ? \"hovered\" : ''\n }\n\n const outputMenuItem = () => {\n return (\n setDropdownOptionHoverState(menu, item) }\n onClick = { () => selectDropdownOption(menu, item) }\n className = { `drop-down-item selection ${isHovered()}` }\n >\n { item.label }\n \n )\n }\n\n return (\n
\n { outputMenuItem() }\n
\n )\n}\n\nDropdownMenuItem.propTypes = {\n item: PropTypes.object,\n menu: PropTypes.string,\n getActiveHoveredState: PropTypes.func,\n setDropdownOptionHoverState: PropTypes.func,\n selectDropdownOption: PropTypes.func,\n}\nexport default DropdownMenuItem\n","import React, { useEffect, useRef } from \"react\"\nimport PropTypes from \"prop-types\"\nimport DropdownMenuItem from \"./DropdownMenuItem\"\nimport useOutsideClick from '../../../common/hooks/useOutsideClick'\n\nconst DropdownMenu = ({\n getAllDestinations,\n setDropdownOptionHoverState,\n getActiveHoveredState,\n selectDropdownOption,\n menu,\n closeOpenDropdown\n}) => {\n const dropdownRef = useRef()\n const {outsideClick} = useOutsideClick({outsideRef: dropdownRef, onEveryClick: true})\n\n useEffect(() => {\n if(outsideClick.click) {\n closeOpenDropdown(\"destination\")\n }\n },[outsideClick])\n\n const outputDropdownItems = () => {\n const items = getAllDestinations()\n return items.map((item, i) => {\n return (\n \n )\n })\n }\n\n return (\n
\n
\n \n { outputDropdownItems() }\n
\n
\n \n )\n}\n\nDropdownMenu.propTypes = {\n getAllDestinations: PropTypes.func.isRequired,\n setDropdownOptionHoverState: PropTypes.func,\n getActiveHoveredState: PropTypes.func,\n selectDropdownOption: PropTypes.func,\n menu: PropTypes.string,\n closeOpenDropdown: PropTypes.func.isRequired\n}\n\nexport default DropdownMenu\n","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport moment from 'moment'\nimport momentPropTypes from 'react-moment-proptypes'\n\nimport DateFieldRange from \"../../common/forms/DateFieldRange\"\nimport { isMobile } from 'react-device-detect'\nimport {\n calcNightsMoment\n} from '../../helpers/searchHelpers'\n\nimport {\n earliestStartDate,\n isDateBlockedForSelection\n} from '../../helpers/general'\n\nconst DestinationsDateFields = ({\n arrival,\n setArrival,\n minNights,\n setNights,\n setPlaying,\n departure,\n setDeparture\n}) => {\n const [dateFocused, setDateFocused] = useState(null)\n\n const _dateChangeHandler = ({ startDate, endDate }) => {\n if(startDate) {\n if (startDate < moment().hours(0)) return false\n setArrival(startDate)\n\n let minDeparture = moment(startDate).add(minNights, 'days')\n setDeparture(minDeparture)\n setDateFocused(\"endDate\")\n }\n\n if(endDate) {\n setDeparture(endDate)\n setNights(calcNightsMoment(startDate, endDate))\n setDateFocused(null)\n }\n }\n\n const _onDateFocusChange = focused => {\n setDateFocused(focused)\n if(focused) setPlaying(false)\n }\n\n const _getNumberOfMonths = () => isMobile ? 1 : 2\n\n return (\n earliestStartDate()}\n showDefaultInputIcon = {false}\n withPortal = {true}\n startDatePlaceholderText = \"Arrival\"\n endDatePlaceholderText = \"Departure\"\n />\n )\n}\n\nDestinationsDateFields.propTypes = {\n arrival: momentPropTypes.momentObj,\n setArrival: PropTypes.func.isRequired,\n minNights: PropTypes.number.isRequired,\n setNights: PropTypes.func.isRequired,\n setPlaying: PropTypes.func.isRequired,\n departure: momentPropTypes.momentObj,\n setDeparture: PropTypes.func.isRequired\n}\n\nexport default DestinationsDateFields\n","import React, { useEffect, useContext, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport Qs from 'qs'\n\nimport { HERO, HeroContext } from '../../../contexts/HeroContext'\nimport DestinationsDateFields from '../../fields/DestinationsDateFields'\nimport { calcNightsMoment } from '../../../helpers/searchHelpers'\nimport SubmitButton from '../../ui/SubmitButton'\n\nconst PackageSearchForm = ({\n minNights\n}) => {\n\n const { state: {\n dropdown,\n activeDestinationTitle,\n activeDestinationHeading,\n activeDestination,\n destinations,\n arrival,\n nights\n }, dispatch } = useContext(HeroContext)\n\n const _setPlaying = (playing) =>\n dispatch({ type: HERO.PLAYING.SET, payload: playing })\n const _setDropdown = (dropdown) =>\n dispatch({ type: HERO.DROPDOWN.SET, payload: dropdown })\n const _setNights = (nights) =>\n dispatch({ type: HERO.NIGHTS.SET, payload: nights })\n const _setArrival = (arrival) =>\n dispatch({ type: HERO.ARRIVAL.SET, payload: arrival })\n const [displayLocationAside, setDisplayLocationAside] = useState(false)\n const [departure, setDeparture] = useState(null)\n const [valid, setValid] = useState(false)\n\n useEffect(() => {\n setValid(arrival & departure)\n }, [arrival, departure])\n\n useEffect(() => {\n // if departure set && < minNights, unset\n if(arrival && departure && nights) {\n let currentNights = calcNightsMoment(arrival, departure)\n if(currentNights < nights) setDeparture(null)\n }\n }, [nights])\n\n const getQueryString = () => {\n const queryObj = {\n destination: activeDestination\n }\n if(arrival) {\n queryObj.arrival = arrival != null ? arrival.format('YYYY-MM-DD') : arrival\n\n if(nights) {\n queryObj.nights = nights\n }\n }\n\n return `/packages?${Qs.stringify(queryObj)}`\n }\n\n const trackSeePackageDetailsClick = (e) => {\n if(!valid) {\n e.preventDefault()\n }\n }\n\n const toggleDropdown = (menu) => {\n if (!dropdown[menu].open) _setPlaying(false)\n\n let dropdownTmp = dropdown\n dropdownTmp[menu].open = !dropdownTmp[menu].open\n _setDropdown(dropdownTmp)\n setDisplayLocationAside(false)\n }\n\n const closeLocationAside = () => setDisplayLocationAside(false)\n\n return (\n
\n
\n \n {\n
\n I want to {activeDestinationHeading || \"take a trip to\"}\n
\n }\n
\n 1 ? 'active' : ''\n }`}\n >\n
\n toggleDropdown('destination')}\n >\n
\n \n \n {activeDestinationTitle}\n \n
\n
\n \n \n
\n
\n {\n displayLocationAside &&\n \n }\n
\n \n \n
\n \n \n
\n \n \n

We take the hassle out of vacationing.
Enjoy the savings and convenience of a Package Deal.

\n
\n trackSeePackageDetailsClick(e)}\n >\n {}}\n disabled = {!valid}\n label = \"Search Packages\"\n aria-label = \"Search Packages\"\n iconClasses = \"fas fa-umbrella-beach\"\n />\n \n
\n \n )\n}\n\nPackageSearchForm.propTypes = {\n minNights: PropTypes.number.isRequired\n}\n\nexport default PackageSearchForm\n","import React, { useContext } from 'react'\nimport PropTypes from 'prop-types'\n\nimport { HERO, HeroContext } from '../../../contexts/HeroContext'\n\nimport DropdownMenu from '../../dropdown/DropdownMenu'\nimport PackageSearchForm from './PackageSearchForm'\nimport useSetDestinationListBarPos from '../../hooks/useSetDestinationListBarPos'\nimport useSetBackgroundImage from '../../hooks/useSetBackgroundImage'\n\nconst TabsPackageDeal = ({\n minNights,\n setMinNights,\n lowestNightsList,\n lowestStay,\n webPSupport,\n}) => {\n const { state, dispatch } = useContext(HeroContext)\n const _setActiveDestinationTitle = (title) =>\n dispatch({ type: HERO.ACTIVE_DESTINATION.TITLE, payload: title })\n const _setActiveDesination = (active) =>\n dispatch({ type: HERO.ACTIVE_DESTINATION.SET, payload: active })\n const _setActiveDestinationHeading = (heading) =>\n dispatch({ type: HERO.ACTIVE_DESTINATION.HEADING, payload: heading })\n const _setActiveDestinationNav = (nav) =>\n dispatch({ type: HERO.ACTIVE_DESTINATION.NAV, payload: nav })\n const _setDropdown = (dropdown) =>\n dispatch({ type: HERO.DROPDOWN.SET, payload: dropdown })\n const _setPlaying = (playing) =>\n dispatch({ type: HERO.PLAYING.SET, payload: playing })\n const _setNights = (nights) =>\n dispatch({ type: HERO.NIGHTS.SET, payload: nights })\n\n const { setListBarSelection } = useSetDestinationListBarPos()\n const { setBackgroundImage } = useSetBackgroundImage()\n\n\n const setDropdownContent = (value, featured) => {\n if (value) {\n if(featured) {\n _setActiveDestinationHeading(\n getDestinationData(value, 'verb')\n )\n } else {\n _setActiveDestinationHeading(\"take a trip to\")\n }\n }\n }\n\n const getDestinationData = (destination, property) => {\n switch (property) {\n case 'verb':\n return state.destinations[destination].verb\n case 'image':\n if (webPSupport) {\n return state.destinations[destination].webp_image\n }\n else {\n return state.destinations[destination].image\n }\n default:\n break\n }\n }\n\n const getDropdownState = () => state.dropdown.destination.open\n\n const getActiveDropdown = () => state.dropdown.destination.open ? 'destination' : null\n\n const getActiveFeaturedDestinations = () => {\n if (state.dropdown.destination.open) return state.featuredDestinations\n }\n\n const getDestinationsDropdownList = () => state.destinationsDropdownList\n\n const getActiveHoveredState = () => {\n const active = getActiveDropdown()\n return active ? state.dropdown[active].hovered : null\n }\n\n const _closeOpenDropdown = (menu) => {\n const dropdownTmp = {...state.dropdown}\n dropdownTmp[menu].open = false\n _setDropdown(dropdownTmp)\n }\n\n const selectDropdownOption = (menu, option, animated) => {\n const dropdownTmp = {...state.dropdown}\n dropdownTmp[menu].open = false\n\n if (dropdownTmp[menu].selected !== option.value) {\n dropdownTmp[menu].selected = option.value\n dropdownTmp[menu].hovered = null\n\n if (menu === 'destination') {\n setActiveDestination(option)\n\n if(lowestNightsList) {\n let n = lowestNightsList[option.value] ? lowestNightsList[option.value] : lowestStay\n _setNights(n)\n setMinNights(n)\n }\n\n if (!animated) {\n let $heroBg = document.querySelector('.hero-bg')\n $heroBg.style.transform = 'scale(1)'\n $heroBg.style.animation = 'none'\n }\n\n if (state.playing && !animated) {\n clearInterval(window._destinationInterval_)\n _setPlaying(false)\n }\n }\n }\n _setDropdown(dropdownTmp)\n }\n\n const setDropdownOptionHoverState = (menu, option) => {\n const dropdownTmp = {...state.dropdown}\n dropdownTmp[menu].hovered = option\n _setDropdown(dropdownTmp)\n }\n\n const setActiveDestination = (option) => {\n let isFeatured = state.featuredDestinations.some(t => t == option.value)\n _setActiveDestinationTitle(option.label)\n _setActiveDesination(option.value)\n _setActiveDestinationNav(option.value)\n setDropdownContent(option.value, isFeatured)\n // if featured destination\n if(isFeatured) {\n setListBarSelection(option.value)\n setBackgroundImage({url: getDestinationData(option.value, 'image'), playing: state.playing})\n }\n }\n\n return (\n <>\n \n {\n getDropdownState() &&\n \n }\n \n )\n}\n\nTabsPackageDeal.propTypes = {\n minNights: PropTypes.number.isRequired,\n setMinNights: PropTypes.func.isRequired,\n lowestNightsList: PropTypes.object.isRequired,\n lowestStay: PropTypes.number.isRequired,\n webPSupport: PropTypes.bool.isRequired,\n}\n\nexport default TabsPackageDeal\n","import axios from 'axios'\n\nconst API_URL = `${window.location.protocol}//${window.location.host}`\n\nexport default axios.create({\n baseURL: API_URL,\n})\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nconst Button = ({ className, children, clickHandler, type, role, ...props }) => (\n \n {children}\n \n)\n\nButton.defaultProps = {\n type: \"button\",\n role: \"button\"\n}\n\nButton.propTypes = {\n className: PropTypes.string,\n children: PropTypes.node.isRequired,\n clickHandler: PropTypes.func.isRequired,\n type: PropTypes.string,\n role: PropTypes.string\n}\n\nexport default Button\n","import { useEffect, useRef, useState } from \"react\"\n\n// if onEveryClick is true, returns an object not boolean\n// an object changes the truthly statement which allows\n// an useEffect to be called everytime the set func\n// is called, not just when value has changed\n// setting value to true 3 times, useEffect is called each\nexport default (props) => {\n const [onEveryClick] = useState(props && \"onEveryClick\" in props)\n const [outsideClick, setOutsideClick] = useState(onEveryClick ? {click: false} : false)\n const outsideRef = props && \"outsideRef\" in props ? props.outsideRef : useRef(null)\n\n function handleClickOutside(event) {\n if (outsideRef && outsideRef.current && !outsideRef.current.contains(event.target)) {\n setOutsideClick(onEveryClick ? {click: true} : true)\n } else if(outsideRef && outsideRef.current && outsideRef.current.contains(event.target)) {\n setOutsideClick(onEveryClick ? {click: false} : false)\n }\n }\n\n function handleKeydown(event) {\n if (event.key === \"Escape\") {\n setOutsideClick(onEveryClick ? {click: true} : true)\n }\n }\n\n useEffect(() => {\n // Bind the event listeners\n document.addEventListener(\"mousedown\", handleClickOutside)\n document.addEventListener(\"keydown\", handleKeydown)\n return () => {\n // Unbind the event listeners on clean up\n document.removeEventListener(\"mousedown\", handleClickOutside)\n document.removeEventListener(\"keydown\", handleKeydown)\n }\n },[])\n\n return {outsideClick, outsideRef, setOutsideClick}\n}\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\nimport 'react-dates/initialize'\nimport momentPropTypes from 'react-moment-proptypes'\nimport DateRangePicker from 'react-dates/lib/components/DateRangePicker'\nimport { isMobile } from 'react-device-detect'\nimport 'react-dates/lib/css/_datepicker.css'\n\nconst DateFieldRange = ({\n className,\n startDate,\n startDateId,\n endDate,\n endDateId,\n onDatesChange,\n focusedInput,\n onFocusChange,\n minimumNights,\n startDatePlaceholderText,\n endDatePlaceholderText,\n numberOfMonths,\n keepOpenOnDateSelect,\n hideKeyboardShortcutsPanel,\n readOnly,\n ...props\n}) => {\n\n const _getNumberOfMonths = () => isMobile ? 1 : 2\n\n const numberMonths = numberOfMonths || _getNumberOfMonths()\n\n return (\n \n )\n}\n\nDateFieldRange.defaultProps = {\n startDate: null,\n startDateId: 'arrival',\n endDate: null,\n endDateId: 'departure',\n focusedInput: 'startDate',\n minimumNights: 1,\n startDatePlaceholderText: \"Select Date\",\n endDatePlaceholderText: \"Select Date\",\n keepOpenOnDateSelect: false,\n hideKeyboardShortcutsPanel: true,\n readOnly: true\n}\n\nDateFieldRange.propTypes = {\n className: PropTypes.string,\n startDate: momentPropTypes.momentObj,\n startDateId: PropTypes.string,\n endDate: momentPropTypes.momentObj,\n endDateId: PropTypes.string,\n onDatesChange: PropTypes.func.isRequired,\n focusedInput: PropTypes.string,\n onFocusChange: PropTypes.func,\n minimumNights: PropTypes.number,\n startDatePlaceholderText: PropTypes.string,\n endDatePlaceholderText: PropTypes.string,\n keepOpenOnDateSelect: PropTypes.bool\n}\n\nexport default DateFieldRange\n"],"sourceRoot":""}