1import{a as vi}from"./chunk-7DUFZ3AI.js";import"./chunk-BYXBJQAS.js";import{d as hi,e as fi}from"./chunk-JVFONO6S.js";import{a as ai,d as oi,e as li,f as si,g as di,i as mi,j as pi,k as ui,l as _i,m as gi}from"./chunk-MLBOT26K.js";import{B as Xe,C as Je,D as Yt,E as Xt,F as Jt,G as ei,I as ii,L as ri,M as et,r as Zt,x as Ut,z as Ht}from"./chunk-ZY7QVEA5.js";import"./chunk-EIIFJILV.js";import{a as It}from"./chunk-ETG5RL5T.js";import"./chunk-XSXJRD4O.js";import"./chunk-AIJUMLVH.js";import{c as Vt,d as je,e as Qe,f as We,g as Ge}from"./chunk-ZQPZDUZE.js";import{d as Nt}from"./chunk-GCGXUHFZ.js";import{a as ni,b as Ue}from"./chunk-Z5BPXOER.js";import"./chunk-B7QQ7JOL.js";import"./chunk-JY6LIJXC.js";import"./chunk-IZIHKHB5.js";import"./chunk-NM5RTJHI.js";import{A as Se,B as Ze,C as Wt,E as Gt,G as Kt,c as Lt,e as qt,g as jt,w as W,x as Ke,y as le}from"./chunk-B3JEMF2F.js";import{a as Ft,b as Ot,c as Dt,h as Bt}from"./chunk-YDUKEJ2E.js";import{c as ci}from"./chunk-IDBPAATK.js";import"./chunk-H7I2BVQL.js";import"./chunk-QZLF6LOR.js";import"./chunk-K23WVWR5.js";import{a as Le,b as ye}from"./chunk-CRQVDRBT.js";import"./chunk-TBWTWHT5.js";import{Ya as Qt}from"./chunk-S5M7JLWQ.js";import"./chunk-DOS6AADU.js";import"./chunk-5THP4IEB.js";import{o as ti}from"./chunk-IPLKZXBP.js";import"./chunk-44WYLTKA.js";import{a as At,i as Rt,j as ze,l as $t,o as zt}from"./chunk-CBWDEWJH.js";import{a as Y,b as Tt,c as xe,e as X}from"./chunk-2HRT4W4C.js";import{B as wt,C as $e,D as yt,c as Be,h as Ae,k as xt,m as Re,o as Ve,w as Ne}from"./chunk-UHWZMUHE.js";import"./chunk-7Q6JRYJQ.js";import"./chunk-LQKB6TC5.js";import"./chunk-KCP42I4G.js";import{b as qe,c as ke}from"./chunk-PRKGKCPD.js";import"./chunk-44C3MIX2.js";import"./chunk-LZ63CRYS.js";import{b as U,c as H}from"./chunk-3NPCDHG6.js";import{C as kt,I as St,fa as Pt,ia as Mt}from"./chunk-SYJPV5Z2.js";import{f as Et,h as we}from"./chunk-C4EYQ3F4.js";import"./chunk-4KX6OYIC.js";import"./chunk-ZHF75BUX.js";import{b as ft,d as vt,e as bt,k as Ct}from"./chunk-UJIRJMKN.js";import"./chunk-3RV4SRI7.js";import{Ac as Z,Bc as ie,Cc as Ie,Cd as _t,Dc as ae,Dd as gt,Ed as ht,Fb as x,Fd as de,Ga as g,Gb as E,Ha as h,Hb as p,Ia as lt,Ib as dt,Ic as M,Ja as st,Jb as T,Jc as ve,Kc as z,Lc as mt,Mc as N,Ob as f,Pa as fe,Pb as He,Qb as K,Rb as I,Sb as F,Tb as r,Ub as o,Vb as _,Wb as j,Wc as be,Xb as Q,Zb as P,a as R,ac as v,b as L,cc as c,f as he,fa as re,ib as ct,jb as me,jc as pe,ka as at,kc as ue,lc as _e,m as Oe,mc as Ye,nc as s,oc as w,pa as ot,pc as k,pd as ce,qb as l,qc as A,rb as V,rc as De,rd as pt,tc as J,uc as ee,va as G,vc as te,xd as ut,zd as Ce}from"./chunk-CKCTXGH7.js";var Ai=(a,d)=>({"bg-card shadow":a,"bg-transparent":d});function Ri(a,d){if(a&1){let e=P();r(0,"button",41),v("click",function(){let i=g(e).$implicit,n=c();return h(n.toggleFilter(i))}),s(1),o()}if(a&2){let e=d.$implicit;p("ngClass",ae(2,Ai,e.selected,!e.selected)),l(),k(" ",e.name," ")}}var bi=(()=>{class a{constructor(){this.view={destinations:[{name:"Zanzibar"},{name:"Mauritius"},{name:"Cape Town"},{name:"Victoria Falls",selected:!0}]}}toggleFilter(e){this.view.destinations.forEach(t=>t.selected=!1),e.selected=!0}static{this.\u0275fac=function(t){return new(t||a)}}static{this.\u0275cmp=G({type:a,selectors:[["best-deals"]],standalone:!0,features:[Z],decls:169,vars:24,consts:[[1,"relative","flex","flex-col","flex-auto","min-w-0","overflow-hidden"],[1,"relative","pt-8","pb-12","sm:pt-10","sm:pb-12","px-6","sm:px-16","overflow-hidden"],[1,"flex","flex-col","items-center"],[1,"text-xl","font-semibold"],[1,"mt-1","text-3xl","sm:text-3xl","font-extrabold","tracking-tight","leading-tight","text-center"],[1,"mt-3","sm:text-2xl","text-center","tracking-tight","text-secondary"],[1,""],[1,"flex","items-center","mt-8","sm:mt-16","p-0.5","rounded-full","overflow-hidden","bg-gray-200","dark:bg-gray-700"],["mat-flat-button","","disableRipple","",1,"px-6",3,"ngClass"],[1,"flex","justify-center","mt-10","sm:mt-20"],[1,"w-full","max-w-sm","md:max-w-7xl"],[1,"grid","grid-cols-1","md:grid-cols-2","lg:grid-cols-3","gap-y-6","lg:gap-y-0","md:gap-x-6","lg:gap-x-0"],[1,"flex-col","items-center","max-w-sm","md:max-w-none","lg:my-16","lg:rounded-none","lg:rounded-l-2xl"],[1,"w-full","rounded-t-2xl","bg-cover","bg-no-repeat","bg-center","bg-origin-border"],["src","https://api.travelfind.me/v1/images/supplier/7dc51a6b-562c-4fb3-8e50-d41ef8620ec9","alt",""],[1,"py-4","px-3"],["svgIcon","mat_solid:directions_car",1,"mx-2",3,"matTooltip"],["svgIcon","mat_outline:king_bed",1,"mx-2",3,"matTooltip"],[1,"sm:py-2","sm:px-8"],[1,"flex-col","items-center","justify-start"],[1,"text-3xl","font-bold","tracking-tight","text-left","h-15"],["svgIcon","heroicons_solid:star",1,"text-yellow-500"],[1,"mt-2","text-lg","font-medium","tracking-tight","text-left","text-secondary"],[1,"w-8","h-1","my-3","rounded","bg-accent"],[1,"flex","items-baseline","whitespace-nowrap"],[1,"mr-2","text-2xl"],[1,"text-3xl","font-semibold","leading-tight","tracking-tight"],["mat-flat-button","",1,"fuse-mat-button-large","mt-5","w-full","bg-green-500",3,"color"],[1,"mt-3","-mx-3"],["mat-button","",1,"text-primary"],[1,"mr-1"],["fuseCardExpansion",""],[1,"mt-4","space-y-2"],[1,"flex"],[1,"icon-size-5","text-green-600",3,"svgIcon"],[1,"ml-2","leading-5"],[1,"flex-col","items-center","max-w-sm","md:max-w-none","lg:shadow-2xl","lg:rounded-l-2xl","lg:rounded-r-2xl"],["src","https://api.travelfind.me/v1/images/supplier/6525ce90-30a9-4393-a22c-2a0f6ff43d4f","alt",""],["svgIcon","airplanemode_active",1,"mx-2",3,"matTooltip"],[1,"flex-col","items-center","max-w-sm","md:max-w-none","lg:my-16","lg:rounded-none","lg:rounded-r-2xl"],["src","https://api.travelfind.me/v1/images/supplier/c3331cc8-5945-4280-bc01-ca18a78e50d5","alt",""],["mat-flat-button","","disableRipple","",1,"px-6",3,"click","ngClass"]],template:function(t,i){t&1&&(r(0,"div",0)(1,"div",1)(2,"div",2)(3,"h2",3),s(4,"BEST DEALS"),o(),r(5,"div",4),s(6," Unbeatable Prices! "),o(),r(7,"div",5)(8,"div",6),s(9,"Search, build and share your own packages."),o()(),r(10,"div",7),I(11,Ri,2,5,"button",8,K),o()(),r(13,"div",9)(14,"div",10)(15,"div",11)(16,"fuse-card",12)(17,"div",13)(18,"div"),_(19,"img",14),r(20,"div",15),_(21,"mat-icon",16)(22,"mat-icon",17),o()(),r(23,"div",18)(24,"div",19)(25,"div",20),s(26,"Le Palmiste Resort & Spa"),o(),_(27,"mat-icon",21)(28,"mat-icon",21)(29,"mat-icon",21),r(30,"div",22),s(31,"Perfect getaway for the family"),o(),_(32,"div",23),o(),r(33,"div",24)(34,"div",25),s(35,"from"),o(),r(36,"div",26),j(37),s(38,"R13,329.72"),Q(),o()(),r(39,"button",27),s(40,"Select"),o(),r(41,"div",28)(42,"button",29)(43,"span",30),s(44,"What's included?"),o()()(),j(45,31),r(46,"div",32)(47,"div",33),_(48,"mat-icon",34),r(49,"div",35),s(50,"Standard Room (Golf, Game & River View)"),o()(),r(51,"div",33),_(52,"mat-icon",34),r(53,"div",35),s(54,"Transfers"),o()(),r(55,"div",33),_(56,"mat-icon",34),r(57,"div",35),s(58,"Bed and Breakfast"),o()()(),Q(),o()()(),r(59,"fuse-card",36)(60,"div",13)(61,"div"),_(62,"img",37),r(63,"div",15),_(64,"mat-icon",38)(65,"mat-icon",16)(66,"mat-icon",17),o()(),r(67,"div",18)(68,"div",19)(69,"div",20),s(70,"Sun Siyam Olhuveli"),o(),_(71,"mat-icon",21)(72,"mat-icon",21)(73,"mat-icon",21)(74,"mat-icon",21)(75,"mat-icon",21),r(76,"div",22),s(77,"Perfect getaway for the family"),o(),_(78,"div",23),o(),r(79,"div",24)(80,"div",25),s(81,"from"),o(),r(82,"div",26),j(83),s(84,"R50,290.79"),Q(),o()(),r(85,"button",27),s(86,"Select"),o(),r(87,"div",28)(88,"button",29)(89,"span",30),s(90,"What's included?"),o()()(),j(91,31),r(92,"div",32)(93,"div",33),_(94,"mat-icon",34),r(95,"div",35),s(96,"Flights"),o()(),r(97,"div",33),_(98,"mat-icon",34),r(99,"div",35),s(100,"Transfers"),o()(),r(101,"div",33),_(102,"mat-icon",34),r(103,"div",35),s(104,"Accommodation"),o()(),r(105,"div",33),_(106,"mat-icon",34),r(107,"div",35),s(108,"Double Tented Suite"),o()(),r(109,"div",33),_(110,"mat-icon",34),r(111,"div",35),s(112,"Golf"),o()(),r(113,"div",33),_(114,"mat-icon",34),r(115,"div",35),s(116,"Horse Riding"),o()(),r(117,"div",33),_(118,"mat-icon",34),r(119,"div",35),s(120,"All inclusive"),o()()(),Q(),o()()(),r(121,"fuse-card",39)(122,"div",13)(123,"div"),_(124,"img",40),r(125,"div",15),_(126,"mat-icon",38)(127,"mat-icon",16),o()(),r(128,"div",18)(129,"div",19)(130,"div",20),s(131,"Reef & Beach Resort"),o(),_(132,"mat-icon",21)(133,"mat-icon",21)(134,"mat-icon",21)(135,"mat-icon",21),r(136,"div",22),s(137,"Perfect getaway for the family"),o(),_(138,"div",23),o(),r(139,"div",24)(140,"div",25),s(141,"from"),o(),r(142,"div",26),j(143),s(144,"R14,501.42"),Q(),o()(),r(145,"button",27),s(146,"Select"),o(),r(147,"div",28)(148,"button",29)(149,"span",30),s(150,"What's included?"),o()()(),j(151,31),r(152,"div",32)(153,"div",33),_(154,"mat-icon",34),r(155,"div",35),s(156,"Flights"),o()(),r(157,"div",33),_(158,"mat-icon",34),r(159,"div",35),s(160,"Transfers"),o()(),r(161,"div",33),_(162,"mat-icon",34),r(163,"div",35),s(164,"Double Tented Suite"),o()(),r(165,"div",33),_(166,"mat-icon",34),r(167,"div",35),s(168,"All Inclusive"),o()()(),Q(),o()()()()()()()()),t&2&&(l(11),F(i.view.destinations),l(10),p("matTooltip","Transfers"),l(),p("matTooltip","Accommodation"),l(1
17),p("color","primary"),l(9),p("svgIcon","heroicons_solid:check"),l(4),p("svgIcon","heroicons_solid:check"),l(4),p("svgIcon","heroicons_solid:check"),l(8),p("matTooltip","Flights"),l(),p("matTooltip","Transfers"),l(),p("matTooltip","Accommodation"),l(19),p("color","primary"),l(9),p("svgIcon","heroicons_solid:check"),l(4),p("svgIcon","heroicons_solid:check"),l(4),p("svgIcon","heroicons_solid:check"),l(4),p("svgIcon","heroicons_solid:check"),l(4),p("svgIcon","heroicons_solid:check"),l(4),p("svgIcon","heroicons_solid:check"),l(4),p("svgIcon","heroicons_solid:check"),l(8),p("matTooltip","Flights"),l(),p("matTooltip","Transfers"),l(18),p("color","primary"),l(9),p("svgIcon","heroicons_solid:check"),l(4),p("svgIcon","heroicons_solid:check"),l(4),p("svgIcon","heroicons_solid:check"),l(4),p("svgIcon","heroicons_solid:check"))},dependencies:[X,Y,ce,ke,H,U,ye,Le],encapsulation:2,changeDetection:0})}}return a})();var Vi=(a,d)=>({"bg-card shadow":a,"bg-transparent":d});function Ni(a,d){if(a&1){let e=P();r(0,"button",41),v("click",function(){let i=g(e).$implicit,n=c();return h(n.toggleFilter(i))}),s(1),o()}if(a&2){let e=d.$implicit;p("ngClass",ae(2,Vi,e.selected,!e.selected)),l(),k(" ",e.name," ")}}var Ci=(()=>{class a{constructor(){this.view={destinations:[{name:"Zanzibar",selected:!0},{name:"Mauritius"},{name:"Cape Town"},{name:"Victoria Falls"}]}}toggleFilter(e){this.view.destinations.forEach(t=>t.selected=!1),e.selected=!0}static{this.\u0275fac=function(t){return new(t||a)}}static{this.\u0275cmp=G({type:a,selectors:[["promotional-offers"]],standalone:!0,features:[Z],decls:149,vars:19,consts:[[1,"relative","flex","flex-col","flex-auto","min-w-0","overflow-hidden"],[1,"relative","pt-8","pb-12","sm:pt-10","sm:pb-12","px-6","sm:px-16","overflow-hidden"],[1,"flex","flex-col","items-center"],[1,"text-xl","font-semibold"],[1,"mt-1","text-3xl","sm:text-3xl","font-extrabold","tracking-tight","leading-tight","text-center"],[1,"mt-3","sm:text-2xl","text-center","tracking-tight","text-secondary"],[1,""],[1,"flex","items-center","mt-8","sm:mt-16","p-0.5","rounded-full","overflow-hidden","bg-gray-200","dark:bg-gray-700"],["mat-flat-button","","disableRipple","",1,"px-6",3,"ngClass"],[1,"flex","justify-center","mt-10","sm:mt-20"],[1,"w-full","max-w-sm","md:max-w-7xl"],[1,"grid","grid-cols-1","md:grid-cols-2","lg:grid-cols-3","gap-y-6","lg:gap-y-0","md:gap-x-6","lg:gap-x-0"],[1,"flex-col","items-center","max-w-sm","md:max-w-none","lg:my-16","lg:rounded-none","lg:rounded-l-2xl"],[1,"w-full","rounded-t-2xl","bg-cover","bg-no-repeat","bg-center","bg-origin-border"],["src","https://api.travelfind.me/v1/images/supplier/a6070509-3632-49ea-a5e6-4b0b2c12ddca","alt",""],[1,"py-4","px-3"],["svgIcon","mat_solid:directions_car",1,"mx-2",3,"matTooltip"],["svgIcon","mat_outline:king_bed",1,"mx-2",3,"matTooltip"],[1,"sm:py-2","sm:px-8"],[1,"flex-col","items-center","justify-start"],[1,"text-3xl","font-bold","tracking-tight","text-left","h-15"],["svgIcon","heroicons_solid:star",1,"text-yellow-500"],[1,"mt-2","text-lg","font-medium","tracking-tight","text-left","text-secondary"],[1,"w-8","h-1","my-3","rounded","bg-accent"],[1,"flex","items-baseline","whitespace-nowrap"],[1,"mr-2","text-2xl"],[1,"text-3xl","font-semibold","leading-tight","tracking-tight"],["mat-flat-button","",1,"fuse-mat-button-large","mt-5","w-full","bg-green-500",3,"color"],[1,"mt-3","-mx-3"],["mat-button","",1,"text-primary"],[1,"mr-1"],["fuseCardExpansion",""],[1,"mt-4","space-y-2"],[1,"flex"],[1,"icon-size-5","text-green-600",3,"svgIcon"],[1,"ml-2","leading-5"],[1,"flex-col","items-center","max-w-sm","md:max-w-none","lg:shadow-2xl","lg:rounded-l-2xl","lg:rounded-r-2xl"],["src","https://api.travelfind.me/v1/images/supplier/43db72f5-5ca9-4a17-b79d-24c3e3bf6a04","alt",""],["svgIcon","airplanemode_active",1,"mx-2",3,"matTooltip"],[1,"flex-col","items-center","max-w-sm","md:max-w-none","lg:my-16","lg:rounded-none","lg:rounded-r-2xl"],["src","https://api.travelfind.me/v1/images/supplier/428d523a-83a8-4a08-8b44-36ca679a665b","alt",""],["mat-flat-button","","disableRipple","",1,"px-6",3,"click","ngClass"]],template:function(t,i){t&1&&(r(0,"div",0)(1,"div",1)(2,"div",2)(3,"h2",3),s(4,"PROMOTIONAL OFFERS"),o(),r(5,"div",4),s(6," Unlock big Savings! "),o(),r(7,"div",5)(8,"div",6),s(9,"Search, build and share your own packages."),o()(),r(10,"div",7),I(11,Ni,2,5,"button",8,K),o()(),r(13,"div",9)(14,"div",10)(15,"div",11)(16,"fuse-card",12)(17,"div",13)(18,"div"),_(19,"img",14),r(20,"div",15),_(21,"mat-icon",16)(22,"mat-icon",17),o()(),r(23,"div",18)(24,"div",19)(25,"div",20),s(26,"Lokuthula Lodges"),o(),_(27,"mat-icon",21)(28,"mat-icon",21)(29,"mat-icon",21),r(30,"div",22),s(31,"Perfect getaway for the family"),o(),_(32,"div",23),o(),r(33,"div",24)(34,"div",25),s(35,"from"),o(),r(36,"div",26),j(37),s(38,"R7,889.76"),Q(),o()(),r(39,"button",27),s(40,"Select"),o(),r(41,"div",28)(42,"button",29)(43,"span",30),s(44,"What's included?"),o()()(),j(45,31),r(46,"div",32)(47,"div",33),_(48,"mat-icon",34),r(49,"div",35),s(50,"Transfers"),o()(),r(51,"div",33),_(52,"mat-icon",34),r(53,"div",35),s(54,"Standard Room (Golf, Game & River View)"),o()(),r(55,"div",33),_(56,"mat-icon",34),r(57,"div",35),s(58,"Bed and Breakfast"),o()()(),Q(),o()()(),r(59,"fuse-card",36)(60,"div",13)(61,"div"),_(62,"img",37),r(63,"div",15),_(64,"mat-icon",38)(65,"mat-icon",16)(66,"mat-icon",17),o()(),r(67,"div",18)(68,"div",19)(69,"div",20),s(70,"A'Zambezi River Lodge"),o(),_(71,"mat-icon",21)(72,"mat-icon",21)(73,"mat-icon",21)(74,"mat-icon",21)(75,"mat-icon",21),r(76,"div",22),s(77,"Perfect getaway for the family"),o(),_(78,"div",23),o(),r(79,"div",24)(80,"div",25),s(81,"from"),o(),r(82,"div",26),j(83),s(84,"R8,990.00"),Q(),o()(),r(85,"button",27),s(86,"Select"),o(),r(87,"div",28)(88,"button",29)(89,"span",30),s(90,"What's included?"),o()()(),j(91,31),r(92,"div",32)(93,"div",33),_(94,"mat-icon",34),r(95,"div",35),s(96,"Double Tented Suite"),o()(),r(97,"div",33),_(98,"mat-icon",34),r(99,"div",35),s(100,"Golf"),o()(),r(101,"div",33),_(102,"mat-icon",34),r(103,"div",35),s(104,"Horse Riding"),o()(),r(105,"div",33),_(106,"mat-icon",34),r(107,"div",35),s(108,"All inclusive"),o()()(),Q(),o()()(),r(109,"fuse-card",39)(110,"div",13)(111,"div"),_(112,"img",40),r(113,"div",15),_(114,"mat-icon",38)(115,"mat-icon",16),o()(),r(116,"div",18)(117,"div",19)(118,"div",20),s(119,"Garden Court Nelson Mandela Boulevard"),o(),_(120,"mat-icon",21)(121,"mat-icon",21)(122,"mat-icon",21)(123,"mat-icon",21),r(124,"div",22),s(125,"Perfect getaway for the family"),o(),_(126,"div",23),o(),r(127,"div",24)(128,"div",25),s(129,"from"),o(),r(130,"div",26),j(131),s(132,"R4,543.32"),Q(),o()(),r(133,"button",27),s(134,"Select"),o(),r(135,"div",28)(136,"button",29)(137,"span",30),s(138,"What's included?"),o()()(),j(139,31),r(140,"div",32)(141,"div",33),_(142,"mat-icon",34),r(143,"div",35),s(144,"Double Tented Suite"),o()(),r(145,"div",33),_(146,"mat-icon",34),r(147,"div",35),s(148,"All Inclusive"),o()()(),Q(),o()()()()()()()()),t&2&&(l(11),F(i.view.destinations),l(10),p("matTooltip","Transfers"),l(),p("matTooltip","Accommodation"),l(1
17),p("color","primary"),l(9),p("svgIcon","heroicons_solid:check"),l(4),p("svgIcon","heroicons_solid:check"),l(4),p("svgIcon","heroicons_solid:check"),l(8),p("matTooltip","Flights"),l(),p("matTooltip","Transfers"),l(),p("matTooltip","Accommodation"),l(19),p("color","primary"),l(9),p("svgIcon","heroicons_solid:check"),l(4),p("svgIcon","heroicons_solid:check"),l(4),p("svgIcon","heroicons_solid:check"),l(4),p("svgIcon","heroicons_solid:check"),l(8),p("matTooltip","Flights"),l(),p("matTooltip","Transfers"),l(18),p("color","primary"),l(9),p("svgIcon","heroicons_solid:check"),l(4),p("svgIcon","heroicons_solid:check"))},dependencies:[X,Y,ce,ke,H,U,ye,Le],encapsulation:2,changeDetection:0})}}return a})();var tt={query:"",minStars:0,pricedOnly:!0,provider:"",sort:"price"},it=80;function Fe(){return R({},tt)}function xi(a){return a?(a.query??"").trim().length>0||Number(a.minStars)>0||!!a.provider||a.pricedOnly!==tt.pricedOnly||a.sort!==tt.sort:!1}function wi(a,d){let e=new Set;for(let t of a??[]){if(t?.hide)continue;let i=`${d(t)??""}`.trim();i&&e.add(i)}return[...e].sort((t,i)=>t.localeCompare(i))}function yi(a,d,e,t){let i=`${d?.query??""}`.trim().toLowerCase(),n=Number(d?.minStars)||0,m=d?.pricedOnly!==!1,u=`${d?.provider??""}`.trim().toLowerCase(),b=d?.sort==="stars"?"stars":"price";return(a??[]).filter(C=>{if(C?.hide)return!1;let S=Number(e(C))||0;if(m&&S<=0)return!1;let O=Number(C?.grading)||0;return!(n>0&&O<n||u&&`${t(C)??""}`.trim().toLowerCase()!==u||i&&![C?.name,C?.address,C?.locationLabel,t(C)].filter(Boolean).join(" ").toLowerCase().includes(i))}).sort((C,S)=>{if(b==="stars"){let q=(Number(S?.grading)||0)-(Number(C?.grading)||0);if(q!==0)return q}let O=Number(e(C))||0,$=Number(e(S))||0;return O>0&&$<=0?-1:$>0&&O<=0?1:O-$})}var $i=15*60*1e3,Si=(()=>{class a{constructor(e){this._tfmCartService=e}validate(e){let t=[],i=e.inventoryPricedAt?.getTime();(!i||Date.now()-i>$i)&&t.push({id:`${e.id}-stale-inventory`,message:"Reprice the package against live supplier inventory before creating the quote."});for(let n of e.legs){if(!n.coveredByLegId&&n.selection.included&&(n.mode==="flight"||n.mode==="transfer")&&!n.selection.selected){let m=n.rawFromPoint?.title??n.rawFromPoint?.name??n.rawFromPoint?.data?.searchTerm??"the previous stop",u=n.rawToPoint?.title??n.rawToPoint?.name??n.rawToPoint?.data?.searchTerm??"the next stop";t.push({id:`${n.id}-missing`,legId:n.id,message:`Choose or remove the ${n.mode} from ${m} to ${u}.`})}!n.coveredByLegId&&n.selection.included&&n.selection.selected&&(n.selection.status==="loading"||n.selection.status==="error")&&t.push({id:`${n.id}-unavailable`,legId:n.id,message:n.selection.error??`Refresh the ${n.mode} selection before creating the quote.`})}for(let n of e.stops.filter(m=>m.type==="stay")){if(n.accommodation.included&&!n.accommodation.selected&&t.push({id:`${n.id}-missing-accommodation`,stopId:n.id,message:`Choose or remove accommodation at ${n.location.name}.`}),n.accommodation.included&&n.accommodation.selected&&(n.accommodation.status==="loading"||n.accommodation.status==="error")&&t.push({id:`${n.id}-accommodation-unavailable`,stopId:n.id,message:n.accommodation.error??`Refresh accommodation at ${n.location.name}.`}),n.accommodation.included&&n.accommodation.selected){let m=(n.accommodation.selected?.rooms??[]).filter(u=>u?.selected);(m.length===0||m.some(u=>!(u?.basis??[]).some(b=>b?.selected)))&&t.push({id:`${n.id}-missing-accommodation-basis`,stopId:n.id,message:`Choose a room and rate basis at ${n.location.name}.`})}n.car.included&&!n.car.selected&&t.push({id:`${n.id}-missing-car`,stopId:n.id,message:"Choose a hire car for the land portion or change how the client will get around."}),n.car.included&&n.car.selected&&(n.car.status==="loading"||n.car.status==="error")&&t.push({id:`${n.id}-car-unavailable`,stopId:n.id,message:n.car.error??`Refresh car hire at ${n.location.name}.`});for(let m of n.activities)m.selection.included&&m.selection.selected&&(m.selection.status==="loading"||m.selection.status==="error")&&t.push({id:`${m.id}-unavailable`,stopId:n.id,message:m.selection.error??`Refresh the activity at ${n.location.name}.`})}return this.entries(e).length===0&&t.push({id:`${e.id}-empty`,message:"Add at least one service before creating the quote."}),t}assemble(e){return he(this,null,function*(){let t=this.validate(e);if(t.length>0)return t;this._tfmCartService.updateSearch(e.search),this._tfmCartService.updateTrip(e.trip),this._tfmCartService.clearCart(!1);try{for(let n of this.entries(e)){let m=this.withDraftDates(n.item,n,e);yield this._tfmCartService.selectItem(m,this.cartType(n.type),!1,!1,!1,n.type==="flight")}}catch(n){throw this._tfmCartService.clearCart(!1),n}return this._tfmCartService.emitCartChange()===!1?[{id:`${e.id}-client-information`,message:"Capture client information, then confirm the package quote again."}]:[]})}entries(e){let t=[];for(let i of e.legs){if(!i.selection.included||!i.selection.selected)continue;let n=i.mode==="land"?"transfer":i.mode;t.push({type:n,item:i.selection.selected,order:i.order*10}
1)}for(let i of e.stops){let n=i.order*10+2;i.accommodation.included&&i.accommodation.selected&&t.push({type:"accommodation",item:i.accommodation.selected,order:n}),i.car.included&&i.car.selected&&t.push({type:"car",item:i.car.selected,order:n+1}),i.activities.filter(m=>m.selection.included&&m.selection.selected).forEach((m,u)=>{t.push({type:"activity",item:L(R({},m.selection.selected),{departDate:m.date??m.selection.selected?.departDate,arriveDate:m.date??m.selection.selected?.arriveDate,rph:m.roomRph??m.selection.selected?.rph}),order:n+2+u/10})})}return e.customServices.filter(i=>i.included&&i.selected).forEach((i,n)=>{t.push({type:"custom",item:i.selected,order:e.stops.length*10+n})}),t.sort((i,n)=>i.order-n.order)}cartType(e){return e==="accommodation"?"hotel":e}withDraftDates(e,t,i){if(!e||t.type==="accommodation"||t.type==="activity"||t.type==="custom")return e;let n=i.legs.find(u=>u.selection.selected===t.item);if(!n)return e;let m=L(R({},e),{departDate:e.departDate??n.departAt,arriveDate:e.arriveDate??n.arriveAt??n.departAt,departTime:e.departTime??n.departAt,arriveTime:e.arriveTime??n.arriveAt??n.departAt});return t.type==="flight"&&!e?.isRoundTrip&&(e?.originDestinationOptions?.length??0)<=1?L(R({},m),{pairedReturnFlight:null,priceTotal:Number(e?.price??0),priceTotal2:Number(e?.price??0)}):m}static{this.\u0275fac=function(t){return new(t||a)(ot(Se))}}static{this.\u0275prov=at({token:a,factory:a.\u0275fac,providedIn:"root"})}}return a})();var ji=["areaDialog"],se=(a,d)=>d.id;function Ti(a,d){return this.getMapPropertyKey(d)}var Qi=a=>({type:"flight",section:a,variant:"package-builder"}),Wi=(a,d)=>({"ai-status":a,"ai-status-error":d}),Gi=(a,d)=>[a,d],Ki=()=>({minZoom:3,maxZoom:17,mapTypeControl:!0,streetViewControl:!1,fullscreenControl:!0,gestureHandling:"greedy"}),Zi=()=>[5,15,30],Ui=()=>[0,3,4,5],Hi=()=>({strokeColor:"#d97706",strokeOpacity:.9,strokeWeight:2,fillColor:"#d97706",fillOpacity:.1,clickable:!1}),Yi=()=>({draggable:!0});function Xi(a,d){if(a&1){let e=P();r(0,"aside",7)(1,"span",10),_(2,"mat-icon",11),o(),r(3,"div")(4,"strong"),s(5,"Continue your previous session?"),o(),r(6,"p"),s(7),o()(),r(8,"button",12),v("click",function(){g(e);let i=c(2);return h(i.resumeSessionDraft())}),s(9," Resume route "),o(),r(10,"button",13),v("click",function(){g(e);let i=c(2);return h(i.discardSessionDraft())}),s(11," Start new "),o()()}if(a&2){let e=d,t=c(2);l(2),p("svgIcon","heroicons_outline:clock"),l(5),A(" ",t.view.submittedRouteSummary||e.stops.length+" route points"," \xB7 ",t.getDraftDateSummary(e)," ")}}function Ji(a,d){if(a&1){let e=P();r(0,"section",2)(1,"header",5)(2,"span",6),s(3,"Package builder"),o(),r(4,"h1"),s(5,"Start with the route"),o(),r(6,"p"),s(7," Fly between any airports, add destination stays, then adjust accommodation, transfers, cars, activities, events and custom items. "),o()(),x(8,Xi,12,3,"aside",7),M(9,"async"),r(10,"section",8)(11,"search-widget",9),v("searchClicked",function(){g(e);let i=c();return h(i.searchClicked())})("tripChange",function(i){g(e);let n=c();return h(n.tripChanged(i))})("searchChange",function(i){g(e);let n=c();return h(n.searchChanged(i))}),o()()()}if(a&2){let e,t=c();l(8),f((e=t.view.restoredDraftAvailable&&ve(9,3,t.draft$))?8:-1,e),l(3),p("cacheMode",t.view.cacheMode)("panel",Ie(5,Qi,t.view.options.type))}}function en(a,d){if(a&1){let e=P();r(0,"section",27),_(1,"mat-icon",11),r(2,"span")(3,"strong"),s(4,"Need a different neighbourhood?"),o(),r(5,"small"),s(6,"Open the larger map to move the stay, activity and event search area."),o()(),r(7,"button",29),v("click",function(){g(e);let i=c(2);return h(i.openSearchArea(i.view.activeDraftItem))}),s(8," Open map "),o()()}a&2&&(l(),p("svgIcon","heroicons_outline:map"))}function tn(a,d){a&1&&(r(0,"small",44),s(1),o()),a&2&&(l(),w(d))}function nn(a,d){a&1&&_(0,"mat-icon",11),a&2&&p("svgIcon","heroicons_mini:arrow-right")}function rn(a,d){if(a&1){let e=P();r(0,"button",42),v("click",function(){let i=g(e).$implicit,n=c(4);return h(n.selectActiveCandidate(i))}),r(1,"span",43),s(2),o(),r(3,"strong"),s(4),o(),x(5,tn,2,1,"small",44),r(6,"span",45),s(7),o(),r(8,"footer")(9,"b"),s(10),M(11,"currency"),o(),r(12,"span",46),s(13),x(14,nn,1,1,"mat-icon",11),o()()()}if(a&2){let e,t=d.$implicit,i=d.$index,n=c(4);T("package-builder__candidate--selected",n.isActiveCandidate(t)),l(2),k(" ",n.isActiveCandidate(t)?"Current itinerary choice":i===0?"Best package price":"Alternative "+(i+1)," "),l(2),w(n.getCandidateName(t)),l(),f((e=n.getCandidateContext(t))?5:-1,e),l(2),w(n.getCandidateProvider(t)),l(3),w(N(11,9,n.getCandidatePrice(t),(n._packageDraftService.snapshot==null||n._packageDraftService.snapshot.pricing==null?null:n._packageDraftService.snapshot.pricing.currencyCode)||"ZAR","symbol-narrow","1.0-0")),l(3),k(" ",n.isActiveCandidate(t)?"Currently selected":"Use in itinerary"," "),l(),f(n.isActiveCandidate(t)?-1:14)}}function an(a,d){if(a&1&&(r(0,"div",39)(1,"strong"),s(2,"Choose a replacement"),o(),r(3,"span"),s(4),o()(),r(5,"div",40),I(6,rn,15,14,"button",41,He),o()),a&2){let e=c(),t=c(2);l(4),A("",t.getActiveCandidateCount()," live option",t.getActiveCandidateCount()===1?"":"s",""),l(2),F(e)}}function on(a,d){a&1&&(r(0,"div",38),s(1," Live alternatives are still loading. Open the full inventory to retry or adju
1st filters. "),o())}function ln(a,d){a&1&&x(0,an,8,2)(1,on,2,0,"div",38),a&2&&f(d.length>0?0:1)}function sn(a,d){if(a&1){let e=P();r(0,"button",29),v("click",function(){g(e);let i=c(2);return h(i.restoreBestPrice(i.view.activeDraftItem.id))}),s(1," Restore best price "),o()}}function cn(a,d){a&1&&(r(0,"div",50),_(1,"mat-icon",11),r(2,"span"),s(3,"Connecting to live flight, stay and ground-service suppliers."),o()()),a&2&&(l(),p("svgIcon","heroicons_outline:arrow-path"))}function dn(a,d){if(a&1&&(r(0,"div",54),_(1,"mat-icon",11),r(2,"span",55),s(3),o()()),a&2){let e=d.$implicit;T("package-builder__progress-row--active",!e.isComplete&&!e.isError),l(),T("text-primary-500",e.isComplete)("text-red-500",e.isError),p("svgIcon",e.isError?"heroicons_outline:x-circle":e.isComplete?"heroicons_outline:check-circle":"heroicons_outline:arrow-path"),l(),p("ngClass",ae(9,Wi,!e.isError,e.isError)),l(),k(" ",e.typedText||e.text," ")}}function mn(a,d){if(a&1&&I(0,dn,4,12,"div",53,se),a&2){let e=c(3);F(e.view.statusses.slice(-1))}}function pn(a,d){a&1&&(r(0,"div",51)(1,"strong"),s(2,"Some suppliers are taking longer than usual."),o(),r(3,"span"),s(4,"You can keep this search running or return to the route without refreshing the page."),o()())}function un(a,d){if(a&1&&(r(0,"p",52),s(1),o()),a&2){let e=c(3);l(),w((e.view.searchError==null?null:e.view.searchError.text)||(e.view.searchError==null?null:e.view.searchError.message)||"A supplier search could not complete.")}}function _n(a,d){if(a&1){let e=P();r(0,"section",33)(1,"div",47)(2,"div",48),_(3,"mat-icon",11),o(),r(4,"div")(5,"h2"),s(6,"Building your package"),o(),r(7,"p"),s(8),o()(),r(9,"strong"),s(10),o()(),r(11,"div",49),_(12,"span"),o(),x(13,cn,4,1,"div",50)(14,mn,2,0)(15,pn,5,0,"div",51)(16,un,2,1,"p",52),r(17,"button",29),v("click",function(){g(e);let i=c(2);return h(i.goBackToSearch())}),_(18,"mat-icon",11),s(19," Change route "),o()()}if(a&2){let e=c(2);l(3),p("svgIcon","heroicons_outline:paper-airplane"),l(5),A(" ",e.view.submittedRouteSummary||"Confirming the submitted route"," \xB7 ",e.view.packageFlightsComplete?"Finishing stays and ground services":"Searching flights first"," "),l(2),A("",e.getSearchProgressPercent(),"% \xB7 ",e.getSearchElapsedLabel(),""),l(),E("aria-valuenow",e.getSearchProgressPercent()),l(),dt("transform","scaleX("+e.getSearchProgressPercent()/100+")"),l(),f(e.view.statusses.length===0?13:14),l(2),f(e.view.searchElapsedSeconds>=15&&!e.view.searchError?15:-1),l(),f(e.view.searchError?16:-1),l(2),p("svgIcon","heroicons_outline:pencil-square")}}function gn(a,d){if(a&1&&(r(0,"span"),s(1),M(2,"date"),o(),r(3,"span",74),s(4),o()),a&2){let e=c();l(),k("- ",z(2,2,e.end,"EEE, d MMM"),""),l(3),k("",e.nights," nights")}}function hn(a,d){if(a&1&&(r(0,"span",68),s(1),o()),a&2){let e=c();l(),w(e.location.code)}}function fn(a,d){if(a&1&&(r(0,"span",70),_(1,"mat-icon",11),s(2),o()),a&2){let e=d;E("data-state",e.state)("title",e.detail),l(),p("svgIcon",e.icon),l(),k(" ",e.label," ")}}function vn(a,d){if(a&1){let e=P();r(0,"button",75),v("click",function(){g(e);let i=c(),n=c(4);return h(n.moveStop(i.id,-1))}),_(1,"mat-icon",11),o()}a&2&&(l(),p("svgIcon","heroicons_outline:arrow-up"))}function bn(a,d){if(a&1){let e=P();r(0,"button",76),v("click",function(){g(e);let i=c(),n=c(4);return h(n.moveStop(i.id,1))}),_(1,"mat-icon",11),o()}a&2&&(l(),p("svgIcon","heroicons_outline:arrow-down"))}function Cn(a,d){if(a&1){let e=P();r(0,"section",77)(1,"div"),_(2,"mat-icon",11),r(3,"span")(4,"strong"),s(5,"No usable stay yet"),o(),r(6,"small"),s(7),o()()(),r(8,"div",81)(9,"button",82),v("click",function(){g(e);let i=c(2),n=c(4);return h(n.openSearchArea(i))}),_(10,"mat-icon",11),s(11," Search another area "),o(),r(12,"button",29),v("click",function(){g(e);let i=c(6);return h(i.goBackToSearch())}),s(13,"Change dates or route"),o(),r(14,"button",29),v("click",function(){g(e);let i=c(6);return h(i.repriceAll())}),s(15,"Retry suppliers"),o(),r(16,"button",83),v("click",function(){g(e);let i=c(2),n=c(4);return h(n.excludeAccommodation(i))}),s(17,"Exclude stay"),o()()()}a&2&&(l(2),p("svgIcon","heroicons_outline:exclamation-triangle"),l(5),w(d.message),l(3),p("svgIcon","heroicons_outline:map-pin"))}function xn(a,d){if(a&1&&(r(0,"b"),s(1),M(2,"currency"),o()),a&2){let e=c(5).$implicit,t=c(),i=c(2);l(),w(N(2,1,i.getGroundTransferTotal(e),t.pricing.currencyCode||"ZAR","symbol-narrow","1.0-0"))}}function wn(a,d){if(a&1&&(r(0,"b"),s(1),o()),a&2){let e=c(5).$implicit,t=c(3);l(),w(t.getGroundTransferChoiceStatus(e).label)}}function yn(a,d){if(a&1&&(r(0,"b"),s(1),M(2,"currency"),o()),a&2){let e=c(4),t=c(2),i=c(2);l(),w(N(2,1,i.getPackageItemPrice(e.car.selected),t.pricing.currencyCode||"ZAR","symbol-narrow","1.0-0"))}}function kn(a,d){if(a&1&&(r(0,"b"),s(1),o()),a&2){let e=c(4),t=c(4);l(),w(t.getCarServiceStatus(e).label)}}function Sn(a,d){if(a&1){let e=P();r(0,"div",85)(1,"button",86),v("click",function(){g(e);let i=c(7);return h(i.setGroundMode("transfer"))}),_(2,"mat-icon",11),r(3,"span"),s(4,"Airport transfers"),o(),x(5,xn,3,6,"b")(6,wn,2,1,"b"),o(),r(7,"button",86),v("click",function(){g(e);let i=c(7);return h(i.setGroundMode("car"))}),_(8,"mat-icon",11),r(9,"span"),s(10,"Car hire"),o(),x(11,yn,3,6,"b")(12,kn,2,1,"b"),o(),r(13,"button",86),v("click",function(){g(e);let i=c(7);return h(i.setGroundMode("none"))}),_(14,"mat-icon",11),r(15,"span"),s(16,"Own arrangements"),o(),r(17,"b"),s(18,"No supplier search"),o()()()}if(a&2){let e=c(3),t=c().$implicit,i=c(),n=c(2);l(),T("is-active",i.groundMode==="transfer"),E("aria-checked",i.groundMode==="transfer"),l(),p("svgIcon","heroicons_outline:arrows-right-left"),l(3),f(n.hasGroundTransferOptions(t)?5:6),l(2),T("is-active",i.groundMode==="car"),E("aria-checked",i.groundMode==="car"),l(),p("svgIcon","heroicons_outline:truck"),l(3),f(e.car.selected?11:12),l(2),T("is-active",i.groundMode==="none"),E("aria-checked",i.groundMode==="none"),l(),p("svgIcon","heroicons_outline:user")}}function Pn(a,d){if(a&1&&s(0),a&2){let e=c(3).$implicit;A(" \xB7 ",e.selection.candidates.length," live option",e.selection.candidates.length===1?"":"s"," ")}}function Mn(a,d){if(a&1&&(r(0,"small",90),s(1),o()),a&2){let e=c(3).$implicit;l(),w(e.selection.error)}}function Tn(a,d){if(a&1&&(r(0,"span"),s(1),M(2,"currency"),o()),a&2){let e=c(3).$implicit,t=c(6),i=c(2);l(),w(N(2,1,i.getLegPrice(e),t.pricing.currencyCode||"ZAR","symbol-narrow","1.0-0"))}}function En(a,d){if(a&1){let e=P();r(0,"div",87)(1,"div")(2,"span"),s(3),o(),r(4,"strong"),s(5),o(),r(6,"span",88),_(7,"mat-icon",11),r(8,"span")(9,"b"),s(10),o(),r(11,"small"),s(12),o()()(),r(13,"small",89),s(14),x(15,Pn,1,2),o(),x(16,Mn,2,1,"small",90),o(),r(17,"div",91),x(18,Tn,3,6,"span"),r(19,"button",18),v("click",function(){g(e);let i=c(2).$implicit,n=c(8);return h(n.openDraftItem(i,"leg"))}),s(20),o()()()}if(a&2){let e=d,t=c(2).$implicit;E("data-service-state",e.state),l(3),k(" Transfer service \xB7 ",(t.rawFromPoint==null?null:t.rawFromPoint.type)==="airport"?"Arrival":"Departure"," "),l(2),w((t.selection.selected==null?null:t.selection.selected.name)||"No transfer chosen yet"),l(),E("data-state",e.state),l(),p("svgIcon",e.icon),l(3),w(e.label),l(2),w(e.detail),l(2),A(" ",(t.rawFromPoint==null?null:t.rawFromPoint.title)||(t.rawFromPoint==null?null:t.rawFromPoint.name)," \u2192 ",(t.rawToPoint==null?null:t.rawToPoint.title)||(t.rawToPoint==null?null:t.rawToPoint.name)," "),l(),f(t.selection.candidates.length>0?15:-1),l(),f(t.selection.error&&e.state!=="error"?16:-1),l(2),f(t.selection.selected?18:-1),l(),p("disabled",e.state==="queued"||e.state==="searching"),l(),k(" ",t.selection.selected?"Replace":"Choose"," ")}}function In(a,d){if(a&1&&x(0,En,21,14,"div",87),a&2){let e,t=c().$implicit,i=c(8);f((e=i.getTransferServiceStatus(t))?0:-1,e)}}function Fn(a,d){if(a&1&&x(0,In,1,1),a&2){let e=d.$implicit;f(e?0:-1)}}function On(a,d){if(a&1&&I(0,Fn,1,1,null,null,He),a&2){let e=c(4).$implicit;F(ae(0,Gi,e.arrivalTransfer,e.departureTransfer))}}function Dn(a,d){if(a&1&&s(0),a&2){let e=c(5);A(" \xB7 ",e.car.candidates.length," live option",e.car.candidates.length===1?"":"s"," ")}}function Bn(a,d){if(a&1&&(r(0,"span"),s(1),M(2,"currency"),o()),a&2){let e=c(5),t=c(2),i=c(2);l(),w(N(2,1,i.getPackageItemPrice(e.car.selected),t.pricing.currencyCode||"ZAR","symbol-narrow","1.0-0"))}}function An(a,d){if(a&1){let e=P();r(0,"div",87)(1,"div")(2,"span"),s(3,"Car-hire service \xB7 Whole trip"),o(),r(4,"strong"),s(5),o(),r(6,"span",88),_(7,"mat-icon",11),r(8,"span")(9,"b"),s(10),o(),r(11,"small"),s(12),o()()(),r(13,"small",89),s(14," Collect at the arrival airport \xB7 return at the final departure airport "),x(15,Dn,1,2),o()(),r(16,"div",91),x(17,Bn,3,6,"span"),r(18,"button",18),v("click",function(){g(e);let i=c(4),n=c(4);return h(n.openCarOptions(i))}),s(19),o()()()}if(a&2){let e=d,t=c(4);E("data-service-state",e.state),l(5),w((t.car.selected==null?null:t.car.selected.name)||"No car chosen yet"),l(),E("data-state",e.state),l(),p("svgIcon",e.icon),l(3),w(e.label),l(2),w(e.detail),l(3),f(t.car.candidates.length>0?15:-1),l(2),f(t.car.selected?17:-1),l(),p("disabled",e.state==="queued"||e.state==="searching"),l(),k(" ",t.car.selected?"Change car":"Choose a car"," ")}}function Rn(a,d){if(a&1&&x(0,An,20,10,"div",87),a&2){let e,t=c(3),i=c(4);f((e=i.getCarServiceStatus(t))?0:-1,e)}}function Vn(a,d){if(a&1&&(r(0,"section",78)(1,"div",84)(2,"span",6),s(3,"Getting around"),o(),r(4,"small"),s(5),o()(),x(6,Sn,19,14,"div",85)(7,On,2,3)(8,Rn,1,1),o()),a&2){let e=c(3).$implicit,t=c();l(5),k(" ",e.holdsCar?"Pick one - a hire car replaces the airport transfers":"Transfers serving this stay"," "),l(),f(e.holdsCar?6:-1),l(),f(t.groundMode==="transfer"?7:t.groundMode==="car"&&e.holdsCar?8:-1)}}function Nn(a,d){if(a&1&&s(0),a&2){let e=c(4),t=c(4);k(" \xB7 ",t.getCandidateContext(e.accommodation.selected)," ")}}function $n(a,d){a&1&&(r(0,"small"),s(1,"Excluded from quote"),o())}function zn(a,d){if(a&1&&(r(0,"small"),s(1),M(2,"currency"),o()),a&2){let e=d,t=c(6);
1T("is-saving",e<0),l(),A(" ",e>0?"+":"","",N(2,4,e,t.pricing.currencyCode||"ZAR","symbol-narrow","1.0-0")," from recommendation ")}}function Ln(a,d){if(a&1){let e=P();r(0,"div",87)(1,"div")(2,"span"),s(3),o(),r(4,"strong"),s(5),o(),r(6,"span",88),_(7,"mat-icon",11),r(8,"span")(9,"b"),s(10),o(),r(11,"small"),s(12),o()()(),r(13,"small",89),s(14),x(15,Nn,1,1),s(16),o(),x(17,$n,2,0,"small")(18,zn,3,9,"small",95),o(),r(19,"div",91)(20,"span"),s(21),M(22,"currency"),o(),r(23,"button",18),v("click",function(){g(e);let i=c(3),n=c(4);return h(n.openDraftItem(i,"stop"))}),s(24," View options "),o(),r(25,"button",83),v("click",function(){g(e);let i=c(3),n=c(4);return h(n.toggleDraftItem(i.id))}),s(26),o()()()}if(a&2){let e,t=c(),i=c(2),n=c(2),m=c(2);T("is-excluded",!i.accommodation.included),E("data-service-state",t.state),l(3),k("Accommodation service \xB7 ",i.accommodation.included?"Selected":"Excluded",""),l(2),w(i.accommodation.selected.name),l(),E("data-state",t.state),l(),p("svgIcon",t.icon),l(3),w(t.label),l(2),w(t.detail),l(2),De(" ",i.nights," night",i.nights===1?"":"s"," \xB7 ",m.getCandidateProvider(i.accommodation.selected)," "),l(),f(m.getCandidateContext(i.accommodation.selected)?15:-1),l(),A(" \xB7 ",i.accommodation.candidates.length," option",i.accommodation.candidates.length===1?"":"s"," "),l(),f(i.accommodation.included?-1:17),l(),f((e=m.getSelectionDelta(i.accommodation,"accommodation"))?18:-1,e),l(3),k(" ",i.accommodation.included?N(22,20,m.getAccommodationPrice(i.accommodation.selected),n.pricing.currencyCode||"ZAR","symbol-narrow","1.0-0"):"R0"," "),l(2),p("disabled",t.state==="queued"||t.state==="searching"),l(3),k(" ",i.accommodation.included?"Remove":"Include"," ")}}function qn(a,d){if(a&1){let e=P();r(0,"div",93)(1,"div")(2,"span"),s(3,"Accommodation service"),o(),r(4,"strong"),s(5,"No stay selected"),o(),r(6,"span",88),_(7,"mat-icon",11),r(8,"span")(9,"b"),s(10),o(),r(11,"small"),s(12),o()()()(),r(13,"button",19),v("click",function(){g(e);let i=c(3),n=c(4);return h(n.openDraftItem(i,"stop"))}),_(14,"mat-icon",11),s(15," Choose accommodation "),o(),r(16,"button",83),v("click",function(){g(e);let i=c(3),n=c(4);return h(n.toggleDraftItem(i.id))}),s(17,"Exclude stay"),o()()}if(a&2){let e=c();E("data-service-state",e.state),l(6),E("data-state",e.state),l(),p("svgIcon",e.icon),l(3),w(e.label),l(2),w(e.detail),l(),p("disabled",e.state==="queued"||e.state==="searching"),l(),p("svgIcon","heroicons_outline:building-office-2")}}function jn(a,d){if(a&1){let e=P();r(0,"div",94)(1,"div")(2,"span"),s(3,"Accommodation"),o(),r(4,"strong"),s(5,"Not included"),o(),r(6,"span",88),_(7,"mat-icon",11),r(8,"span")(9,"b"),s(10),o(),r(11,"small"),s(12),o()()()(),r(13,"button",29),v("click",function(){g(e);let i=c(3),n=c(4);return h(n.toggleDraftItem(i.id))}),s(14,"Include stay"),o()()}if(a&2){let e=c();E("data-service-state",e.state),l(6),E("data-state",e.state),l(),p("svgIcon",e.icon),l(3),w(e.label),l(2),w(e.detail)}}function Qn(a,d){if(a&1&&x(0,Ln,27,25,"div",92)(1,qn,18,7,"div",93)(2,jn,15,5,"div",94),a&2){let e=c(2);f(e.accommodation.selected?0:e.accommodation.included?1:2)}}function Wn(a,d){if(a&1){let e=P();r(0,"div",87)(1,"div")(2,"span"),s(3),o(),r(4,"strong"),s(5),o(),r(6,"span",88),_(7,"mat-icon",11),r(8,"span")(9,"b"),s(10),o(),r(11,"small"),s(12),o()()(),r(13,"small",89),s(14),M(15,"date"),o()(),r(16,"div",91)(17,"span"),s(18),M(19,"currency"),o(),r(20,"button",29),v("click",function(){g(e);let i=c().$implicit,n=c(2),m=c(4);return h(m.changeActivity(n,i.id))}),s(21,"Change"),o(),r(22,"button",83),v("click",function(){g(e);let i=c().$implicit,n=c(6);return h(n.toggleDraftItem(i.id))}),s(23),o()()()}if(a&2){let e=d,t=c().$implicit,i=c(2),n=c(2),m=c(2);T("is-excluded",!t.selection.included),E("data-service-state",e.state),l(3),k("Activity or event \xB7 ",t.selection.included?"Selected":"Excluded",""),l(2),w(t.selection.selected==null?null:t.selection.selected.name),l(),E("data-state",e.state),l(),p("svgIcon",e.icon),l(3),w(e.label),l(2),w(e.detail),l(2),De(" ",i.location.name," \xB7 ",z(15,14,t.date,"EEE, d MMM")," \xB7 ",m.getCandidateProvider(t.selection.selected)," "),l(4),k(" ",t.selection.included?N(19,17,m.getPackageItemPrice(t.selection.selected),n.pricing.currencyCode||"ZAR","symbol-narrow","1.0-0"):"R0"," "),l(5),k(" ",t.selection.included?"Remove":"Include"," ")}}function Gn(a,d){if(a&1&&x(0,Wn,24,22,"div",92),a&2){let e,t=d.$implicit,i=c(6);f((e=i.getActivityServiceStatus(t))?0:-1,e)}}function Kn(a,d){if(a&1&&(r(0,"span"),s(1),M(2,"currency"),o()),a&2){let e=c(2).$implicit,t=c(4),i=c(2);l(),w(N(2,1,i.getLegPrice(e),t.pricing.currencyCode||"ZAR","symbol-narrow","1.0-0"))}}function Zn(a,d){if(a&1){let e=P();r(0,"div",87)(1,"div")(2,"span"),s(3),o(),r(4,"strong"),s(5),o(),r(6,"span",88),_(7,"mat-icon",11),r(8,"span")(9,"b"),s(10),o(),r(11,"small"),s(12),o()()()(),r(13,"div",91),x(14,Kn,3,6,"span"),r(15,"button",18),v("click",function(){g(e);let i=c().$implicit,n=c(6);return h(n.openDraftItem(i,"leg"))}),s(16),o()()()}if(a&2){let e=d,t=c().$implicit;T("is-excluded",!t.selection.included),E("data-service-state",e.state),l(3),k("Onward travel to ",(t.rawToPoint==null?null:t.rawToPoint.title)||(t.rawToPoint==null?null:t.rawToPoint.name),""),l(2),w((t.selection.selected==null?null:t.selection.selected.name)||"No option chosen yet"),l(),E("data-state",e.state),l(),p("svgIcon",e.icon),l(3),w(e.label),l(2),w(e.detail),l(2),f(t.selection.selected?14:-1),l(),p("disabled",e.state==="queued"||e.state==="searching"),l(),k(" ",t.selection.selected?"Replace":"Choose"," ")}}function Un(a,d){if(a&1&&x(0,Zn,17,12,"div",92),a&2){let e,t=d.$implicit,i=c(6);f((e=i.getTransferServiceStatus(t))?0:-1,e)}}function Hn(a,d){if(a&1){let e=P();x(0,Cn,18,3,"section",77)(1,Vn,9,3,"section",78)(2,Qn,3,1),I(3,Gn,1,1,null,null,se),r(5,"div",79)(6,"button",29),v("click",function(){g(e);let i=c(),n=c(4);return h(n.addActivity(i))}),_(7,"mat-icon",11),s(8," Add activity or event "),o(),r(9,"button",29),v("click",function(){g(e);let i=c(),n=c(4);return h(n.openSearchArea(i))}),_(10,"mat-icon",11),s(11," Search area "),o(),r(12,"label")(13,"span"),s(14,"Nights"),o(),r(15,"input",80),v("change",function(i){g(e);let n=c(),m=c(4);return h(m.updateStopNights(n.id,i.target.value))}),o()()(),I(16,Un,1,1,null,null,se)}if(a&2){let e,t,i=c(),n=c().$implicit,m=c(),u=c(2);f((e=u.getAccommodationRecovery(i))?0:-1,e),l(),f(n.hasGroundChoice&&(n.holdsCar||m.groundMode==="transfer")?1:-1),l(),f((t=u.getAccommodationServiceStatus(i))?2:-1,t),l(),F(i.activities),l(4),p("svgIcon","heroicons_outline:calendar-days"),l(3),p("svgIcon","heroicons_outline:map-pin"),l(5),p("value",i.nights),l(),F(n.onwardTransfers)}}function Yn(a,d){if(a&1&&(s(0),M(1,"date")),a&2){let e=c(4).$implicit;k(" \xB7 ",z(1,1,e.returnFlightOption.departDate,"EEE, d MMM")," ")}}function Xn(a,d){if(a&1){let e=P();r(0,"div",87)(1,"div")(2,"span"),s(3,"Flight service \xB7 Return sector"),o(),r(4,"strong",96),s(5),o(),r(6,"span",88),_(7,"mat-icon",11),r(8,"span")(9,"b"),s(10),o(),r(11,"small"),s(12),o()()(),r(13,"small",89),s(14," Selected \xB7 Included in the round-trip fare "),x(15,Yn,2,4),o()(),r(16,"div",91)(17,"span"),s(18,"Included in fare"),o(),r(19,"button",29),v("click",function(){g(e);let i=c(3).$implicit,n=c(3);return h(n.openDraftItem(i.returnFlightLeg,"leg"))}),s(20," View round-trip options "),o()()()}if(a&2){let e=d,t=c(3).$implicit;E("data-service-state",e.state),l(5),A(" ",t.returnFlightOption.departFrom," \u2192 ",t.returnFlightOption.arriveAt," "),l(),E("data-state",e.state),l(),p("svgIcon",e.icon),l(3),w(e.label),l(2),w(e.detail),l(3),f(t.returnFlightOption.departDate?15:-1)}}function Jn(a,d){if(a&1&&x(0,Xn,21,8,"div",87),a&2){let e,t=c(2).$implicit,i=c(3);f((e=i.getFlightServiceStatus(t.returnFlightLeg))?0:-1,e)}}function er(a,d){a&1&&(r(0,"p",73),s(1," The journey ends here, so nothing needs to be booked at this point. "),o())}function tr(a,d){if(a&1&&s(0),a&2){let e=c(2).$implicit;A(" \xB7 ",e.selection.candidates.length," live option",e.selection.candidates.length===1?"":"s"," ")}}function ir(a,d){a&1&&(r(0,"small"),s(1,"Selected \xB7 Included in the outbound round-trip fare"),o())}
1function nr(a,d){a&1&&(r(0,"small",90),s(1,"Not included in this quote"),o())}function rr(a,d){a&1&&(r(0,"small",89),s(1),o()),a&2&&(l(),w(d))}function ar(a,d){if(a&1&&(r(0,"span"),s(1),M(2,"currency"),o()),a&2){let e=d,t=c(7);T("is-saving",e<0),l(),A(" \xB7 ",e>0?"+":"","",N(2,4,e,t.pricing.currencyCode||"ZAR","symbol-narrow","1.0-0")," ")}}function or(a,d){if(a&1&&(r(0,"small"),s(1," Customised "),x(2,ar,3,9,"span",95),o()),a&2){let e,t=c(3).$implicit,i=c(5);l(2),f((e=i.getSelectionDelta(t.selection,"flight"))?2:-1,e)}}function lr(a,d){if(a&1&&(r(0,"small"),s(1),o(),x(2,rr,2,1,"small",89)(3,or,3,1,"small")),a&2){let e,t=c(2).$implicit,i=c(5);l(),A(" Selected \xB7 ",i.getCandidateName(t.selection.selected)," \xB7 ",i.getCandidateProvider(t.selection.selected)," "),l(),f((e=i.getCandidateContext(t.selection.selected))?2:-1,e),l(),f(t.selection.userEdited?3:-1)}}function sr(a,d){a&1&&(r(0,"small",90),s(1,"No flight selected yet"),o())}function cr(a,d){if(a&1&&(r(0,"b",100),s(1),M(2,"currency"),o()),a&2){let e=c(2).$implicit,t=c(3),i=c(2);l(),k(" ",N(2,1,i.getLegPrice(e),t.pricing.currencyCode||"ZAR","symbol-narrow","1.0-0")," ")}}function dr(a,d){if(a&1){let e=P();r(0,"div",101)(1,"button",18),v("click",function(){g(e);let i=c(2).$implicit,n=c(5);return h(n.openDraftItem(i,"leg"))}),s(2),o(),r(3,"button",83),v("click",function(){g(e);let i=c(2).$implicit,n=c(5);return h(n.toggleDraftItem(i.id))}),s(4),o()()}if(a&2){let e=c(),t=c().$implicit;l(),p("disabled",e.state==="queued"||e.state==="searching"),l(),k(" ",t.selection.selected?"View options":"Choose flight"," "),l(2),k(" ",t.selection.included?"Remove":"Include"," ")}}function mr(a,d){if(a&1){let e=P();r(0,"article",97)(1,"div",98),_(2,"mat-icon",11),o(),r(3,"button",99),v("click",function(){g(e);let i=c().$implicit,n=c(5);return h(n.openDraftItem(i,"leg"))}),r(4,"span"),s(5," Flight service "),x(6,tr,1,2),o(),r(7,"strong",96),s(8),o(),r(9,"span",88),_(10,"mat-icon",11),r(11,"span")(12,"b"),s(13),o(),r(14,"small"),s(15),o()()(),x(16,ir,2,0,"small")(17,nr,2,0,"small",90)(18,lr,4,4)(19,sr,2,0,"small",90)(20,cr,3,6,"b",100),o(),x(21,dr,5,3,"div",101),o()}if(a&2){let e=d,t=c().$implicit;E("data-service-state",e.state),l(2),p("svgIcon","heroicons_outline:paper-airplane"),l(),p("disabled",e.state==="queued"||e.state==="searching"),l(3),f(t.selection.candidates.length>0?6:-1),l(2),A(" ",(t.rawFromPoint==null||t.rawFromPoint.data==null?null:t.rawFromPoint.data.searchTerm)||(t.rawFromPoint==null?null:t.rawFromPoint.title)||(t.rawFromPoint==null?null:t.rawFromPoint.name)," \u2192 ",(t.rawToPoint==null||t.rawToPoint.data==null?null:t.rawToPoint.data.searchTerm)||(t.rawToPoint==null?null:t.rawToPoint.title)||(t.rawToPoint==null?null:t.rawToPoint.name)," "),l(),E("data-state",e.state),l(),p("svgIcon",e.icon),l(3),w(e.label),l(2),w(e.detail),l(),f(t.coveredByLegId?16:t.selection.included?t.selection.selected?18:19:17),l(4),f(!t.coveredByLegId&&t.selection.selected?20:-1),l(),f(t.coveredByLegId?-1:21)}}function pr(a,d){if(a&1&&x(0,mr,22,13,"article",97),a&2){let e,t=d.$implicit,i=c(5);f((e=i.getFlightServiceStatus(t))?0:-1,e)}}function ur(a,d){if(a&1&&(r(0,"article",64)(1,"div",65)(2,"span"),s(3),o()(),r(4,"div",66)(5,"div",67)(6,"div")(7,"span",59),s(8),o(),r(9,"h3"),s(10),o(),r(11,"p"),s(12),M(13,"date"),x(14,gn,5,5)(15,hn,2,1,"span",68),o()(),r(16,"div",69),x(17,fn,3,4,"span",70)(18,vn,2,1,"button",71)(19,bn,2,1,"button",72),o()(),x(20,Hn,18,6)(21,Jn,1,1)(22,er,2,0,"p",73),o()(),I(23,pr,1,1,null,null,se)),a&2){let e,t=d,i=c().$implicit,n=c(),m=c(2);T("package-builder__stop--airport",t.type==="airport")("package-builder__stop--stay",i.role==="stay"),E("data-point-state",m.getPointServiceStatus(i,n).state),l(3),w(i.badge),l(5),A("Route point ",i.badge," \xB7 ",i.roleLabel,""),l(2),w(t.location.name),l(2),k(" ",z(13,17,t.start,"EEE, d MMM")," "),l(2),f(t.type==="stay"&&t.end?14:-1),l(),f(t.location.code?15:-1),l(2),f((e=m.getPointServiceStatus(i,n))?17:-1,e),l(),f(m.canReorderStops(n)&&!i.first?18:-1),l(),f(m.canReorderStops(n)&&!i.last?19:-1),l(),f(t.type==="stay"?20:-1),l(),f(i.returnFlightLeg&&i.returnFlightOption?21:i.last&&i.flightLegs.length===0?22:-1),l(2),F(i.flightLegs)}}function _r(a,d){if(a&1&&x(0,ur,25,20),a&2){let e,t=d.$implicit;f((e=t.stop)?0:-1,e)}}function gr(a,d){if(a&1){let e=P();r(0,"div",87)(1,"div")(2,"span"),s(3),M(4,"date"),o(),r(5,"strong"),s(6),o(),r(7,"span",88),_(8,"mat-icon",11),r(9,"span")(10,"b"),s(11),o(),r(12,"small"),s(13),o()()()(),r(14,"div",91)(15,"span"),s(16),M(17,"currency"),o(),r(18,"button",83),v("click",function(){g(e);let i=c().$implicit,n=c(3);return h(n.toggleDraftItem(i.id))}),s(19),o()()()}if(a&2){let e=d,t=c().$implicit,i=c(),n=c(2);T("is-excluded",!t.included),E("data-service-state",e.state),l(3),k("Custom item \xB7 ",z(4,11,t.selected==null?null:t.selected.departDate,"d MMM"),""),l(3),w(t.selected==null?null:t.selected.name),l(),E("data-state",e.state),l(),p("svgIcon",e.icon),l(3),w(e.label),l(2),w(e.detail),l(3),k(" ",t.included?N(17,14,n.getPackageItemPrice(t.selected),i.pricing.currencyCode||"ZAR","symbol-narrow","1.0-0"):"R0"," "),l(3),k(" ",t.included?"Remove":"Include"," ")}}function hr(a,d){if(a&1&&x(0,gr,20,19,"div",92),a&2){let e,t=d.$implicit,i=c(3);f((e=i.getCustomServiceStatus(t))?0:-1,e)}}function fr(a,d){if(a&1){let e=P();r(0,"section",34)(1,"div",56)(2,"div")(3,"span",6),s(4,"Route & services"),o(),r(5,"h2"),s(6,"Your connected journey"),o(),r(7,"small"),s(8,"Each service shows whether it is queued, searching, ready or needs your input."),o()(),r(9,"span",57),s(10),o()(),I(11,_r,1,1,null,null,se),r(13,"section",58)(14,"div")(15,"span",59),s(16,"Custom item"),o(),r(17,"h3"),s(18,"Add anything not found in supplier results"),o()(),r(19,"div",60)(20,"input",61),te("ngModelChange",function(i){g(e);let n=c(2);return ee(n.view.customServiceDraft.name,i)||(n.view.customServiceDraft.name=i),h(i)}),o(),r(21,"input",62),te("ngModelChange",function(i){g(e);let n=c(2);return ee(n.view.customServiceDraft.price,i)||(n.view.customServiceDraft.price=i),h(i)}),o(),r(22,"input",63),te("ngModelChange",function(i){g(e);let n=c(2);return ee(n.view.customServiceDraft.date,i)||(n.view.customServiceDraft.date=i),h(i)}),o(),r(23,"button",29),v("click",function(){g(e);let i=c(2);return h(i.addManualCustomService())}),s(24," Add custom item "),o()(),I(25,hr,1,1,null,null,se),o()()}if(a&2){let e=d,t=c(2);l(10),k(" ",t.view.submittedRouteSummary||e.stops.length+" route points"," "),l(),F(t.getItineraryPoints(e)),l(9),J("ngModel",t.view.customServiceDraft.name),l(),J("ngModel",t.view.customServiceDraft.price),l(),J("ngModel",t.view.customServiceDraft.date),l(3),F(e.customServices)}}function vr(a,d){if(a&1&&(r(0,"div",35),s(1),o()),a&2){let e=c(2);l(),A(" Accommodation is ready to browse. Transfers are still loading (",e.view.transfersReceived,"/",e.expectedTransferSearches,"). ")}}function br(a,d){a&1&&(r(0,"p",102),s(1," Use the itinerary controls and ranked drawer first. Open the complete Express Package inventory when you need provider filters or every available result. "),o())}function Cr(a,d){if(a&1){let e=P();r(0,"div",56)(1,"div")(2,"span",6),s(3,"Supplier inventory"),o(),r(4,"h2"),s(5),o()(),r(6,"button",29),v("click",function(){g(e);let i=c(2);return h(i.toggleAllInventory())}),s(7),o()(),x(8,br,2,0,"p",102),r(9,"div",103)(10,"stay-list",104),v("resultChange",function(i){g(e);let n=c(2);return h(n.resultChanged(i))})("selectionChange",function(i){g(e);let n=c(2);return h(n.draftSelectionChanged(i))})("searchChangeRequested",function(){g(e);let i=c(2);return h(i.goBackToSearch())})("packageAccommodationUnavailable",function(i){g(e);let n=c(2);return h(n.onPackageAccommodationUnavailable(i))})("packageAccommodationBundlesReady",function(i){g(e);let n=c(2);return h(n.onPackageAccommodationBundlesReady(i))}),o()()}if(a&2){let e=c(2);l(5),w(e.view.showAllInventory?"All live package options":"Need deeper control?"),l(2),k(" ",e.view.showAllInventory?"Hide full inventory":"Browse all inventory"," "),l(),f(e.view.showAllInventory?-1:8),l(2),p("options",e.view.search)("trip",e.view.trip)("cacheMode",e.view.cacheMode)("displayMode","list")("compactHeader",!0)}}function xr(a,d){if(a&1){let e=P();r(0,"button",111),v("click",function(){let i=g(e).$implicit,n=c(5);return h(n.resolveDraftIssue(i))}),r(1,"span"),s(2),o(),_(3,"mat-icon",11),o()}if(a&2){let e=d.$implicit;l(2),w(e.message),l(),p("svgIcon","heroicons_outline:arrow-right")}}function wr(a,d){if(a&1&&I(0,xr,4,2,"button",110,se),a&2){let e=c();F(e.slice(0,3))}}function yr(a,d){if(a&1&&(r(0,"small"),s(1),M(2,"date"),o()),a&2){let e=c(2);l(),k("Live inventory checked ",z(2,1,e.inventoryPricedAt,"HH:mm"),"")}}function kr(a,d){if(a&1&&(r(0,"div",109)(1,"div"),_(2,"mat-icon",11),r(3,"strong"),s(4),o()(),x(5,wr,2,0)(6,yr,3,4,"small"),o()),a&2){let e=d,t=c(),i=c(2);T("package-builder__health--ready",!i.view.isSearching&&e.length===0),l(2),p("svgIcon",i.view.isSearching?"heroicons_outline:arrow-path":e.length===0?"heroicons_outline:check-circle":"heroicons_outline:exclamation-triangle"),l(2),k(" ",i.view.isSearching?"Checking live prices":e.length===0?"Ready to quote":e.length+" item"+(e.length===1?"":"s")+" need attention"," "),l(),f(i.view.isSearching?-1:5),l(),f(t.inventoryPricedAt?6:-1)}}function Sr(a,d){if(a&1){let e=P();r(0,"aside",37)(1,"span",6),s(2,"Package total"),o(),r(3,"div",105),s(4),M(5,"currency"),o(),r(6,"p"),s(7),o(),r(8,"dl")(9,"div")(10,"dt"),s(11,"Flights"),o(),r(12,"dd"),s(13),M(14,"currency"),o()(),r(15,"div")(16,"dt"),s(17,"Stays"),o(),r(18,"dd"),s(19),M(20,"currency"),o()(),r(21,"div")(22,"dt"),s(23,"Transfers"),o(),r(24,"dd"),s(25),M(26,"currency"),o()(),r(27,"div")(28,"dt"),s(29,"Cars"),o(),r(30,"dd"),s(31),M(32,"currency"),o()(),r(33,"div")(34,"dt"),s(35,"Activities & events"),o(),r(36,"dd"),s(37),M(38,"currency"),o()(),r(39,"div")(40,"dt"),s(41,"Custom items"),o(),r(42,"dd"),s(43),M(44,"currency"),o()()(),x(45,kr,7,6,"div",106),r(46,"button",107),v("click",function(){g(e);let i=c(2);return h(i.openQuoteReview())}),s(47),o(),r(48,"button",108),v("click",function(){g(e);let i=c(2);return h(i.scrollToPackageOptions())}),s(49," Browse supplier options "),o(),r(50,"small"),s(51,"A supplier refresh from the last 15 minutes is required."),o()()}if(a&2){let e,t=d,i=c(2);l(4),k(" ",N(5,13,t.pricing.total,t.pricing.currencyCode||"ZAR","symbol-narrow","1.2-2")," "),l(3),De(" ",(t.pax==null?null:t.pax.total)||1," traveller",((t.pax==null?null:t.pax.total)||1)===1?"":"s"," \xB7 ",t.stops.length," route points "),l(6),w(N(14,18,t.pricing.flight,t.pricing.currencyCode||"ZAR","symbol-narrow","1.0-0")),l(6),w(N(20,23,t.pricing.accommodation,t.pricing.currencyCode||"ZAR","symbol-narrow","1.0-0")),l(6),w(N(26,28,t.pricing.transfer,t.pricing.currencyCode||"ZAR","symbol-narrow","1.0-0")),l(6),w(N(32,33,t.pricing.car,t.pricing.currencyCode||"ZAR","symbol-narrow","1.0-0")),l(6),w(N(38,38,t.pricing.activity,t.pricing.currencyCode||"ZAR","symbol-narrow","1.0-0")),l(6),w(N(44,43,t.pricing.custom,t.pricing.currencyCode||"ZAR","symbol-narrow","1.0-0")),l(2),f((e=i.getDraftIssues(t))?45:-1,e),l(),p("disabled",!i.canCreateDraftQuote()),l(),k(" ",i.view.quoteCreated?"Quote created":i.view.isCreatingQuote?"Creating quote\u2026":"Create quote"," ")}}function Pr(a,d){if(a&1){let e=P();r(0,"header",14)(1,"div",15)(2,"button",16),v("click",function(){g(e);let i=c();return h(i.goBackToSearch())}),_(3,"mat-icon",11),s(4," Change route "),o(),r(5,"div")(6,"span",6),s(7,"Package builder"),o(),r(8,"h1"),s(9,"Build and price the journey"),o(),r(10,"p"),s(11),o()()(),r(12,"div",17)(13,"button",18),M(14,"async"),v("click",function(){g(e);let i=c();return h(i.undoDraftChange())}),_(15,"mat-icon",11),s(16," Undo "),o(),r(17,"button",19),v("click",function(){g(e);let i=c();return h(i.repriceAll())}),_(18,"mat-icon",11),s(19," Reprice all "),o()()(),r(20,"mat-drawer-container",20)(21,"mat-drawer",21),v("closedStart",function(){g(e);let i=c();return h(i.closeSelectionDrawer())}),r(22,"div",22)(23,"div")(24,"span",6),s(25,"Edit component"),o(),r(26,"h2"),s(27),o()(),r(28,"button",23),v("click",function(){g(e);let i=c();return h(i.closeSelectionDrawer())}),_(29,"mat-icon",11),o()(),r(30,"div",24)(31,"p",25),s(32," Express-ranked live options for this package component. Changing one option keeps the rest of the itinerary intact. "),o(),r(33,"section",26)(34,"span"),s(35,"Currently in your itinerary"),o(),r(36,"strong"),s(37),o(),r(38,"small"),s(39,"Select an alternative below. The package total and quote readiness update immediately."),o()(),x(40,en,9,1,"section",27)(41,ln,2,1)(42,sn,2,0,"button",28),r(43,"button",29),v("click",function(){g(e);let i=c();return h(i.openLiveOptions())}),s(44),o()()(),r(45,"mat-drawer-content")(46,"div",30)(47,"section",31)(48,"section",32)(49,"div"),_(50,"mat-icon",11),r(51,"span"),s(52,"Flights"),o(),r(53,"strong"),s(54),o()(),r(55,"div"),_(56,"mat-icon",11),r(57,"span"),s(58,"Stays"),o(),r(59,"strong"),s(60),o()(),r(61,"div"),_(62,"mat-icon",11),r(63,"span"),s(64,"Transfers"),o(),r(65,"strong"),s(66),o()(),r(67,"div"),_(68,"mat-icon",11),r(69,"span"),s(70,"Cars"),o(),r(71,"strong"),s(72),o()()(),x(73,_n,20,12,"section",33)(74,fr,27,4,"section",34),M(75,"async"),x(76,vr,2,2,"div",35),r(77,"section",36),x(78,Cr,11,8),o()(),x(79,Sr,52,48,"aside",37),M(80,"async"),o()()()}if(a&2){let e,t,i,n=c();l(3),p("svgIcon","heroicons_outline:arrow-left"),l(8),k("",n.view.submittedRouteSummary," \xB7 Select any service to replace it"),l(2),p("disabled",n.view.isSearching||!ve(14,38,n.canUndo$)),l(2),p("svgIcon","heroicons_outline:arrow-uturn-left"),l(2),p("disabled",n.view.isSearching),l(
1),p("svgIcon","heroicons_outline:arrow-path"),l(2),p("hasBackdrop",!0),l(),p("opened",n.view.selectionDrawerOpen),l(6),w((n.view.activeDraftItem==null||n.view.activeDraftItem.location==null?null:n.view.activeDraftItem.location.name)||(n.view.activeDraftItem==null?null:n.view.activeDraftItem.mode)||"Package item"),l(2),p("svgIcon","heroicons_outline:x-mark"),l(8),w(n.getActiveSelectionName()),l(3),f(n.view.activeDraftKind==="stop"?40:-1),l(),f((e=n.getTopActiveCandidates())?41:-1,e),l(),f(!(n.view.activeDraftItem==null||n.view.activeDraftItem.selection==null)&&n.view.activeDraftItem.selection.userEdited||!(n.view.activeDraftItem==null||n.view.activeDraftItem.accommodation==null)&&n.view.activeDraftItem.accommodation.userEdited?42:-1),l(2),k(" Browse all ",n.getActiveCandidateCount()," supplier options "),l(5),T("is-ready",n.view.packageFlightsComplete),l(),p("svgIcon","heroicons_outline:paper-airplane"),l(4),w(n.view.packageFlightsComplete?"Ready":"Searching"),l(),T("is-ready",n.view.packageFlightsComplete&&n.view.accommodationsReady),l(),p("svgIcon","heroicons_outline:building-office-2"),l(4),w(n.view.accommodationsReady?"Ready":n.view.packageFlightsComplete?"Searching":"Queued"),l(),T("is-ready",n.view.packageFlightsComplete&&n.view.transfersReceived>=n.expectedTransferSearches),l(),p("svgIcon","heroicons_outline:arrows-right-left"),l(4),k(" ",n.view.packageFlightsComplete?n.view.transfersReceived+"/"+n.expectedTransferSearches:"Queued"," "),l(),T("is-ready",n.view.packageFlightsComplete&&n.view.carsReceived>=n.expectedCarSearches),l(),p("svgIcon","heroicons_outline:truck"),l(4),k(" ",n.view.packageFlightsComplete?n.view.carsReceived+"/"+n.expectedCarSearches:"Queued"," "),l(),f(n.view.isSearching?73:-1),l(),f((t=ve(75,40,n.draft$))?74:-1,t),l(2),f(n.isCoreSearchReady()&&n.view.transfersReceived<n.expectedTransferSearches?76:-1),l(),T("package-builder__options--collapsed",!n.view.showAllInventory),l(),f(n.isCoreSearchReady()?78:-1),l(),f((i=ve(80,42,n.draft$))?79:-1,i)}}function Mr(a,d){if(a&1){let e=P();_(0,"map-circle",137),r(1,"map-marker",138),v("mapDragend",function(i){g(e);let n=c(2);return h(n.moveActiveSearchPoint(i))}),o()}if(a&2){let e=c(2);p("center",e.getActiveSearchAreaCenter())("radius",e.view.activeSearchArea.radiusKm*1e3)("options",ie(6,Hi)),l(),p("position",e.getActiveSearchAreaCenter())("title","Move accommodation and activity search point")("options",ie(7,Yi))}}function Tr(a,d){if(a&1){let e=P();r(0,"map-marker",140),v("mapClick",function(){g(e);let i=c().$implicit,n=c(2);return h(n.selectMapProperty(i,!0))}),o()}if(a&2){let e=c().$implicit,t=c(2);p("position",d)("title",e.name)("options",t.getMapMarkerOptions(e))}}function Er(a,d){if(a&1&&x(0,Tr,1,3,"map-marker",139),a&2){let e,t=d.$implicit,i=c(2);f((e=i.getMapPropertyPosition(t))?0:-1,e)}}function Ir(a,d){if(a&1&&(r(0,"em"),s(1),M(2,"number"),M(3,"number"),o()),a&2){let e=c(2);l(),A(" ",z(2,2,e.view.activeSearchArea.latitude,"1.4-4"),", ",z(3,5,e.view.activeSearchArea.longitude,"1.4-4")," ")}}function Fr(a,d){if(a&1){let e=P();r(0,"button",133),v("click",function(){let i=g(e).$implicit,n=c(2);return h(n.setActiveSearchRadius(i))}),s(1),o()}if(a&2){let e=d.$implicit,t=c(2);T("is-active",t.view.activeSearchArea.radiusKm===e),l(),k(" ",e," km ")}}function Or(a,d){a&1&&(r(0,"div",125),_(1,"span",128),s(2," Resolving this location\u2026 "),o())}function Dr(a,d){if(a&1&&(r(0,"small",126),s(1),o()),a&2){let e=c(2);l(),w(e.view.activeSearchArea.error)}}function Br(a,d){if(a&1&&s(0),a&2){let e=c(3);k(" \xB7 ",e.getMapInventory().length," in this area ")}}function Ar(a,d){if(a&1&&s(0),a&2){let e=c(3);k(" \xB7 ",e.view.activeSearchArea.mappedCount," on the map ")}}function Rr(a,d){if(a&1&&(r(0,"small"),s(1),x(2,Br,1,1)(3,Ar,1,1),o()),a&2){let e=d,t=c(2);l(),A(" ",e.length," result",e.length===1?"":"s"," "),l(),f(t.getMapInventory().length!==e.length?2:-1),l(),f(t.view.activeSearchArea.mapping||t.view.activeSearchArea.mappedCount>0?3:-1)}}function Vr(a,d){a&1&&_(0,"span",128)}function Nr(a,d){if(a&1){let e=P();r(0,"button",133),v("click",function(){let i=g(e).$implicit,n=c(2);return h(n.setMapFilterStars(i))}),s(1),o()}if(a&2){let e=d.$implicit,t=c(2);T("is-active",t.view.mapPropertyFilter.minStars===e),l(),k(" ",e===0?"Any":e+"+"," ")}}function $r(a,d){if(a&1){let e=P();r(0,"button",133),v("click",function(){let i=g(e).$implicit,n=c(3);return h(n.setMapFilterProvider(i))}),s(1),o()}if(a&2){let e=d.$implicit,t=c(3);T("is-active",t.view.mapPropertyFilter.provider===e),l(),k(" ",e," ")}}function zr(a,d){if(a&1){let e=P();r(0,"div",134)(1,"span"),s(2,"Supplier"),o(),r(3,"div")(4,"button",133),v("click",function(){g(e);let i=c(2);return h(i.setMapFilterProvider(""))}),s(5," All "),o(),I(6,$r,2,3,"button",123,K),o()()}if(a&2){let e=c(2);l(4),T("is-active",!e.view.mapPropertyFilter.provider),l(2),F(e.getMapFilterProviders())}}function Lr(a,d){if(a&1){let e=P();r(0,"button",141),v("click",function(){g(e);let i=c(2);return h(i.clearMapPropertyFilters())}),s(1," Clear filters "),o()}}function qr(a,d){a&1&&(r(0,"div",142)(1,"strong"),s(2,"Searching live suppliers\u2026"),o(),r(3,"small"),s(4,"Properties will appear here and on the map as this stop finishes."),o()())}
1function jr(a,d){a&1&&(r(0,"div",142)(1,"strong"),s(2,"No stays in this area yet"),o(),r(3,"small"),s(4,"Move the pin or widen the radius, then search this area."),o()())}function Qr(a,d){a&1&&(r(0,"div",142)(1,"strong"),s(2,"No properties match these filters"),o(),r(3,"small"),s(4,"Try a different name, lower the star rating, or include unpriced stays."),o()())}function Wr(a,d){if(a&1&&_(0,"img",147),a&2){let e=c().$implicit;p("src",e.image,me)("alt",e.name)}}function Gr(a,d){a&1&&(r(0,"span",148),_(1,"mat-icon",11),o()),a&2&&(l(),p("svgIcon","heroicons_outline:building-office-2"))}function Kr(a,d){if(a&1&&s(0),a&2){let e=c().$implicit;k(" \xB7 ",e.grading," star ")}}function Zr(a,d){if(a&1&&(r(0,"em"),s(1),o()),a&2){let e=c().$implicit;l(),w(e.address)}}function Ur(a,d){if(a&1&&(s(0),M(1,"currency")),a&2){let e=c().$implicit,t=c(4);k(" ",N(1,1,t.getAccommodationPrice(e),(t._packageDraftService.snapshot==null||t._packageDraftService.snapshot.pricing==null?null:t._packageDraftService.snapshot.pricing.currencyCode)||"ZAR","symbol-narrow","1.0-0")," ")}}function Hr(a,d){a&1&&s(0," Checking\u2026 ")}function Yr(a,d){a&1&&_(0,"mat-icon",149),a&2&&p("svgIcon","heroicons_solid:check-circle")}function Xr(a,d){if(a&1){let e=P();r(0,"button",146),v("click",function(){let i=g(e).$implicit,n=c(4);return h(n.selectMapProperty(i,!0))}),x(1,Wr,1,2,"img",147)(2,Gr,2,1,"span",148),r(3,"span")(4,"strong"),s(5),o(),r(6,"small"),s(7),x(8,Kr,1,1),o(),x(9,Zr,2,1,"em"),o(),r(10,"b"),x(11,Ur,2,6)(12,Hr,1,0),o(),x(13,Yr,1,1,"mat-icon",149),o()}if(a&2){let e=d.$implicit,t=c(4);T("is-selected",t.isMapPropertySelected(e))("is-checking",t.getAccommodationPrice(e)<=0),l(),f(e.image?1:2),l(4),w(e.name),l(2),k(" ",t.getCandidateProvider(e)," "),l(),f(e.grading?8:-1),l(),f(e.address?9:-1),l(2),f(t.getAccommodationPrice(e)>0?11:12),l(2),f(t.isMapPropertySelected(e)?13:-1)}}function Jr(a,d){if(a&1&&(r(0,"small",145),s(1),o()),a&2){let e=c(2),t=c(2);l(),A(" Showing ",t.mapPropertyListLimit," of ",e.length,". Narrow the search to see the rest on this list \u2014 matching pins stay on the map. ")}}function ea(a,d){if(a&1&&(r(0,"div",143),I(1,Xr,14,11,"button",144,Ti,!0),o(),x(3,Jr,2,2,"small",145)),a&2){let e=c(),t=c(2);l(),F(t.getVisibleMapProperties(e)),l(2),f(e.length>t.mapPropertyListLimit?3:-1)}}function ta(a,d){if(a&1&&x(0,qr,5,0,"div",142)(1,jr,5,0,"div",142)(2,Qr,5,0,"div",142)(3,ea,4,1),a&2){let e=c(2);f(e.isActiveMapInventorySearching()&&e.getMapInventory().length===0?0:e.getMapInventory().length===0?1:d.length===0?2:3)}}function ia(a,d){if(a&1){let e=P();r(0,"dialog",112,0),v("cancel",function(i){g(e);let n=c();return h(n.closeSearchAreaFromDialog(i))})("click",function(i){g(e);let n=c();return h(n.closeSearchAreaFromBackdrop(i))}),r(2,"section",113),v("click",function(i){return g(e),h(i.stopPropagation())}),r(3,"header")(4,"div")(5,"span",6),s(6,"Search geography"),o(),r(7,"h2",114),s(8,"Choose a stay on the map"),o(),r(9,"p"),s(10," Search the current area or move the pin first, then select a property from the map or list. The route point stays the same. "),o()(),r(11,"button",115),v("click",function(){g(e);let i=c();return h(i.closeSearchAreaModal())}),_(12,"mat-icon",11),o()(),r(13,"div",116)(14,"div",117)(15,"google-map",118),v("mapClick",function(i){g(e);let n=c();return h(n.moveActiveSearchPoint(i))}),x(16,Mr,2,8),I(17,Er,1,1,null,null,Ti,!0),o(),r(19,"div",119),_(20,"mat-icon",11),s(21," Drag the pin to search, then click a property to select it "),o()(),r(22,"aside",120)(23,"div",121),_(24,"mat-icon",11),r(25,"span")(26,"small"),s(27,"Selected search centre"),o(),r(28,"strong"),s(29),o(),x(30,Ir,4,8,"em"),o()(),r(31,"section",122)(32,"div")(33,"span"),s(34,"Search radius"),o(),r(35,"small"),s(36,"Use a tighter radius for a specific neighbourhood."),o()(),r(37,"div"),I(38,Fr,2,3,"button",123,K),o()(),r(40,"div",124),_(41,"mat-icon",11),r(42,"p"),s(43," Move the pin towards the neighbourhood the client should stay in, then search. Properties appear on this map \u2014 the supplier inventory stays in the background. "),o()(),x(44,Or,3,0,"div",125)(45,Dr,2,1,"small",126),r(46,"section",127)(47,"header")(48,"div")(49,"span"),s(50,"Available properties"),o(),x(51,Rr,4,4,"small"),o(),x(52,Vr,1,0,"span",128),o(),r(53,"div",129)(54,"label",130),_(55,"mat-icon",11),r(56,"input",131),te("ngModelChange",function(i){g(e);let n=c();return ee(n.view.mapPropertyFilter.query,i)||(n.view.mapPropertyFilter.query=i),h(i)}),v("ngModelChange",function(){g(e);let i=c();return h(i.onMapPropertyFilterChange())}),o()(),r(57,"div",132)(58,"span"),s(59,"Stars"),o(),r(60,"div"),I(61,Nr,2,3,"button",123,K),o()(),r(63,"div",132)(64,"span"),s(65,"Show"),o(),r(66,"div")(67,"button",133),v("click",function(){g(e);let i=c();return h(i.toggleMapPricedOnly())}),s(68," Priced only "),o(),r(69,"button",133),v("click",function(){g(e);let i=c();return h(i.setMapFilterSort("price"))}),s(70," Price "),o(),r(71,"button",133),v("click",function(){g(e);let i=c();return h(i.setMapFilterSort("stars"))}),s(72," Stars "),o()()(),x(73,zr,8,2,"div",134)(74,Lr,2,0,"button",135),o(),x(75,ta,4,1),o()()(),r(76,"footer")(77,"button",136),v("click",function(){g(e);let i=c();return h(i.resetActiveSearchArea())}),s(78," Reset pin "),o(),_(79,"span"),r(80,"button",29),v("click",function(){g(e);let i=c();return h(i.closeSearchAreaModal())}),s(81),o(),r(82,"button",19),v("click",function(){g(e);let i=c();return h(i.applyActiveSearchArea())}),_(83,"mat-icon",11),s(84),o()()()()}if(a&2){let e,t,i=c();l(12),p("svgIcon","heroicons_outline:x-mark"),l(3),p("center",i.getActiveSearchAreaCenter())("zoom",i.hasActiveSearchAreaPoint()?12:i.getRouteMapZoom())("options",ie(30,Ki)),l(),f(i.hasActiveSearchAreaPoint()?16:-1),l(),F(i.getMapProperties()),l(3),p("svgIcon","heroicons_outline:cursor-arrow-rays"),l(4),p("svgIcon","heroicons_outline:map-pin"),l(5),w(i.view.activeSearchArea.name),l(),f(i.hasActiveSearchAreaPoint()?30:-1),l(8),F(ie(31,Zi)),l(3),p("svgIcon","heroicons_outline:information-circle"),l(3),f(i.view.activeSearchArea.resolving?44:-1),l(),f(i.view.activeSearchArea.error?45:-1),l(6),f((e=i.getMapProperties())?51:-1,e),l(),f(i.isActiveMapInventorySearching()?52:-1),l(3),p("svgIcon","heroicons_outline:magnifying-glass"),l(),J("ngModel",i.view.mapPropertyFilter.query),l(5),F(ie(32,Ui)),l(6),T("is-active",i.view.mapPropertyFilter.pricedOnly),l(2),T("is-active",i.view.mapPropertyFilter.sort==="price"),l(2),T("is-active",i.view.mapPropertyFilter.sort==="stars"),l(2),f(i.getMapFilterProviders().length>1?73:-1),l(),f(i.hasCustomMapFilters()?74:-1),l(),f((t=i.getMapProperties())?75:-1,t),l(2),p("disabled",!i.view.activeSearchArea.dirty),l(4),k(" ",i.view.activeSearchArea.dirty?"Cancel":"Close"," "),l(),p("disabled",i.view.activeSearchArea.resolving||i.isActiveMapInventorySearching()||!!i.view.activeSearchArea.error||!i.view.activeSearchArea.placeId),l(),p("svgIcon",i.isActiveMapInventorySearching()?"heroicons_outline:arrow-path":"heroicons_outline:magnifying-glass"),l(),k(" ",i.isActiveMapInventorySearching()?"Searching properties\u2026":"Search this area"," ")}}function na(a,d){if(a&1&&(r(0,"article")(1,"span",158),_(2,"mat-icon",11),o(),r(3,"div")(4,"span"),s(5),o(),r(6,"strong"),s(7),o(),r(8,"small"),s(9),o()(),r(10,"b"),s(11),M(12,"currency"),o()()),a&2){let e=d.$implicit,t=c();l(2),p("svgIcon",e.type==="flight"?"heroicons_outline:paper-airplane":e.type==="stay"?"heroicons_outline:building-office-2":e.type==="car"?"heroicons_outline:truck":e.type==="activity"?"heroicons_outline:calendar-days":e.type==="transfer"?"heroicons_outline:arrows-right-left":"heroicons_outline:document-plus"),l(3),k(" ",e.type==="activity"?"Activity / event":e.type==="manual"?"Custom item":e.type," "),l(2),w(e.name),l(2),w(e.context),l(2),w(N(12,5,e.price,t.pricing.currencyCode||"ZAR","symbol-narrow","1.0-0"))}}function ra(a,d){if(a&1){let e=P();r(0,"div",151),v("click",function(){g(e);let i=c(2);return h(i.closeQuoteReview())}),r(1,"section",152),v("keydown.escape",function(){g(e);let i=c(2);return h(i.closeQuoteReview())})("click",function(i){return g(e),h(i.stopPropagation())}),r(2,"header")(3,"div")(4,"span",6),s(5,"Final review"),o(),r(6,"h2",153),s(7,"Confirm the package quote"),o(),r(8,"p"),s(9,"Only the services listed below will be sent to the quote."),o()(),r(10,"button",154),v("click",function(){g(e);let i=c(2);return h(i.closeQuoteReview())}),_(11,"mat-icon",11),o()(),r(12,"div",155)(13,"div")(14,"span"),s(15,"Client party"),o(),r(16,"strong"),s(17),o()(),r(18,"div")(19,"span"),s(20,"Route"),o(),r(21,"strong"),s(22),o()(),r(23,"div")(24,"span"),s(25,"Live price checked"),o(),r(26,"strong"),s(27),M(28,"date"),o()()(),r(29,"div",156),I(30,na,13,10,"article",null,se),o(),r(32,"footer")(33,"div")(34,"span"),s(35,"Quote total"),o(),r(36,"strong"),s(37),M(38,"currency"),o()(),r(39,"button",136),v("click",function(){g(e);let i=c(2);return h(i.closeQuoteReview())}),s(40," Back to itinerary "),o(),r(41,"button",157),v("click",function(){g(e);let i=c(2);return h(i.createDraftQuote())}),s(42),o()()()()}if(a&2){let e=d,t=c(2);l(),p("cdkTrapFocusAutoCapture",!0),l(9),p("disabled",t.view.isCreatingQuote),l(
1),p("svgIcon","heroicons_outline:x-mark"),l(6),A(" ",(e.pax==null?null:e.pax.total)||1," traveller",((e.pax==null?null:e.pax.total)||1)===1?"":"s"," "),l(5),w(t.view.submittedRouteSummary),l(5),w(z(28,11,e.inventoryPricedAt,"d MMM, HH:mm")),l(3),F(t.getQuoteReviewItems(e)),l(7),k(" ",N(38,14,e.pricing.total,e.pricing.currencyCode||"ZAR","symbol-narrow","1.2-2")," "),l(2),p("disabled",t.view.isCreatingQuote),l(2),p("disabled",t.view.isCreatingQuote),l(),k(" ",t.view.isCreatingQuote?"Creating quote\u2026":"Confirm and create quote"," ")}}function aa(a,d){if(a&1&&(x(0,ra,43,19,"div",150),M(1,"async")),a&2){let e,t=c();f((e=ve(1,1,t.draft$))?0:-1,e)}}function oa(a,d){if(a&1){let e=P();r(0,"car-list",163),v("resultChange",function(i){g(e);let n=c(),m=c(2);return h(m.resultChanged(i,n.pointIndex))}),o()}if(a&2){let e=c(),t=c(2);p("options",t.view.search)("trip",t.view.trip)("point",e.from)("pointTo",e.to)("cacheMode",t.view.cacheMode)}}function la(a,d){if(a&1&&x(0,oa,1,5,"car-list",162),a&2){let e=c(2);p("ngIf",e.view.search&&e.view.packageFlightsComplete)}}function sa(a,d){if(a&1){let e=P();r(0,"transfer-list",163),v("resultChange",function(i){g(e);let n=c().$implicit,m=c(2);return h(m.resultChanged(i,n.pointIndex,n.id))}),o()}if(a&2){let e=c().$implicit,t=c(2);p("options",t.view.search)("trip",t.view.trip)("point",e.from)("pointTo",e.to)("cacheMode",t.view.cacheMode)}}function ca(a,d){if(a&1&&x(0,sa,1,5,"transfer-list",162),a&2){let e=c(2);p("ngIf",e.view.search&&e.view.packageFlightsComplete)}}function da(a,d){if(a&1){let e=P();r(0,"div",159)(1,"flight-list",160),v("resultChange",function(i){g(e);let n=c();return h(n.resultChanged(i))}),o(),x(2,la,1,1,"car-list",161),I(3,ca,1,1,"transfer-list",161,se),o()}if(a&2){let e,t=c();l(),p("options",t.view.search)("trip",t.view.trip)("cacheMode",t.view.cacheMode),l(),f((e=t.carRentalEdge)?2:-1,e),l(),F(t.transferEdges)}}var Ei=(()=>{class a{constructor(e,t,i,n,m,u,b,y){this._formBuilder=e,this._tfmService=t,this._tfmCartService=i,this._cd=n,this.toaster=m,this._vfaTransferNotice=u,this._packageDraftService=b,this._packageQuoteAssembler=y,this.tripChange=new fe,this.cartChange=new fe,this._itineraryPointsCache=null,this._mapCenterCache={},this._mapPropertyCoordinates=new Map,this._mapMarkerOptions=new Map,this._mapPropertyGeocodeRun=0,this._mapPropertyGeocodeTimer=null,this.mapPropertyListLimit=it,this.fromControl=new xt(""),this.view={options:{},cacheMode:!1,statusses:[],isSearching:!1,isCreatingQuote:!1,searchError:null,flightSearchReady:!1,accommodationsReady:!1,accommodationPointsReady:new Set,builderStarted:!1,editingRoute:!1,selectionDrawerOpen:!1,showAllInventory:!1,activeDraftItem:null,activeDraftKind:null,activeSearchArea:null,originalSearchArea:null,searchAreaModalOpen:!1,mapPropertyFilter:Fe(),transferEdgesReady:new Set,activeActivityId:null,accommodationRecoveryByPoint:{},lastRepricedAt:null,quoteReviewOpen:!1,quoteCreated:!1,routeMapPath:[],routeMapPoints:[],submittedRouteSummary:"",searchElapsedSeconds:0,restoredDraftAvailable:!1,customServiceDraft:{name:"",price:null,date:null}},this.draft$=this._packageDraftService.draft$,this.canUndo$=this._packageDraftService.canUndo$,this._destroy$=new Oe,this.slowTimers=[],this.typingTimers=new Map,this.typingSpeedMs=24,this.view.cacheMode=this._tfmService._cacheMode,this._tfmService.statusChange.pipe(re(this._destroy$)).subscribe(C=>{if(C&&C.isError&&(this.view.searchError=C,this.view.isSearching=!1,this.stopSearchClock(),this.resetToasts()),this.view.statusses.filter(S=>S.id==C.id).length==0){this.view.statusses.forEach(O=>{O.isComplete=!0});let S=L(R({},C),{isComplete:!C.isError,typedText:"",fullText:C.text||"",isTyping:!1});this.view.statusses.push(S),this.startTyping(S,C.text||"",!!C.isError)}else{let S=this.view.statusses.filter(O=>O.id==C.id)[0];S.text=C.text,S.title=C.title,S.isComplete=!C.isError,S.isError=C.isError,S.fullText=C.text||"",this.startTyping(S,C.text||"",!!C.isError)}this._cd.detectChanges()}),this._tfmCartService.cartItemChange.pipe(re(this._destroy$)).subscribe(C=>{if(C?.event!=="added"||C?.type!=="activity"||!C?.item)return;let S=this._packageDraftService.snapshot,O=S?.stops.find($=>$.pointIndex===Number(C.item?.point))??S?.stops.find($=>$.type==="stay");O&&(this.applyActivitySelection(O,C.item),this._cd.markForCheck())}),this._tfmCartService.quoteCreateSucceeded$.pipe(re(this._destroy$)).subscribe(()=>{this.view.isCreatingQuote&&(this.view.isCreatingQuote=!1,this.view.quoteReviewOpen=!1,this.view.quoteCreated=!0,this.toaster.success("The package was created successfully and added to the client quote.","Quote created",{timeOut:7e3,progressBar:!0,positionClass:"toast-top-center"}),this._cd.markForCheck())}),this._tfmCartService.quoteCreateFailed$.pipe(re(this._destroy$)).subscribe(C=>{this.view.isCreatingQuote&&(this.view.isCreatingQuote=!1,this.toaster.error(C||"The quote could not be created. Your package is still available to retry.","Quote creation failed",{timeOut:9e3,progressBar:!0,positionClass:"toast-top-center"}),this._cd.markForCheck())}),this.draft$.pipe(re(this._destroy$)).subscribe(C=>{this.updateRouteMap(C),this._cd.markForCheck()})}ngOnInit(){this.view.options=this._options;let e=this._packageDraftService.snapshot;e?(this.view.search=L(R({},e.search),{method:"multitype",type:"multitype"}),(!Array.isArray(this.view.search.flights)||this.view.search.flights.length===0)&&(this.view.search.flights=e.legs.filter(t=>t.mode==="flight"&&t.selection.selected).map(t=>t.selection.selected)),Array.isArray(this.view.search.transfers)||(this.view.search.transfers=e.legs.filter(t=>t.mode==="transfer"&&t.selection.selected).map(t=>t.selection.selected)),this.view.trip=e.trip,this.view.submittedRouteSummary=this.getTripRouteSummary(this.view.trip),this.view.builderStarted=!this._packageDraftService.restoredFromSession,this.view.restoredDraftAvailable=this._packageDraftService.restoredFromSession,this.view.lastRepricedAt=e.inventoryPricedAt,this.view.flightSearchReady=!1,this._packageDraftService.updateContext(this.view.search,this.view.trip),this._tfmCartService.updateSearch(this.view.search),this._tfmCartService.updateTrip(this.view.trip),this._packageDraftService.restoredFromSession?(this.view.packageFlightsComplete=!1,this.view.accommodationsReady=!1,this.view.accommodationPointsReady=new Set,this.view.transfersReceived=0,this.view.transferEdgesReady=new Set,this.view.carsReceived=0):(this.view.packageFlightsComplete=e.source==="express"||!!this.view.search?.packageFlightsComplete,this.view.accommodationPointsReady=new Set(e.stops.filter(t=>t.type==="stay"&&!!t.accommodation.selected).map(t=>t.pointIndex)),this.view.accommodationsReady=this.areAllAccommodationPointsReady(),this.view.transfersReceived=e.source==="express"?this.expectedTransferSearches:0,this.view.transferEdgesReady=new Set(e.source==="express"?this.transferEdges.map(t=>
1t.id):[]),e.source==="express"&&setTimeout(()=>{this.view.flightSearchReady=!0,this._cd.markForCheck()},0))):this.view.search={method:"multitype",type:"multitype"},this._tfmService.log("builder",this.view)}openCartView(){this._tfmCartService.toggleCartView(!0)}resumeSessionDraft(){this._packageDraftService.snapshot&&(this.view.restoredDraftAvailable=!1,this.view.builderStarted=!0,this.repriceAll(!0))}discardSessionDraft(){this._packageDraftService.clear(),this.view.restoredDraftAvailable=!1,this.view.search={method:"multitype",type:"multitype"},this.view.trip=null,this.view.submittedRouteSummary="",this._cd.markForCheck()}searchClicked(){if(this._vfaTransferNotice.resetForNewSearch(),this.view.search&&(this.view.search.flights=null,this.view.search.transfers=null,this.view.search.hotels=null,this.view.search.cars=null,this.view.search.packageFlightsComplete=!1),this.view.trip=this.cloneSubmittedTrip(this.view.trip),this.view.submittedRouteSummary=this.getTripRouteSummary(this.view.trip),this._tfmCartService.updateTrip(this.view.trip),this.view.isSearching=!0,this.startSearchClock(),this.view.statusses=[],this.view.searchError=null,this.clearTypingTimers(),this.resetToasts(),this.progressToastId=this.toaster.info("Searching flights, stays and transfers for your custom package.","Building package",{disableTimeOut:!0,tapToDismiss:!1}).toastId,this.slowTimers.push(setTimeout(()=>{this.slowToastId=this.toaster.info("Still working... pulling results from suppliers.","Hang tight",{timeOut:5e3}).toastId},12e3)),this.slowTimers.push(setTimeout(()=>{this.slowerToastId=this.toaster.warning("Taking longer than usual. We're still searching, so you don't need to refresh.","Still searching",{timeOut:7e3}).toastId},25e3)),this.slowTimers.push(setTimeout(()=>{this.hangToastId=this.toaster.error("This search is taking unusually long. You can keep waiting, or tweak your dates/destination and try again.","Still searching...",{timeOut:8e3}).toastId},45e3)),this.view.transfersReceived=0,this.view.transferEdgesReady=new Set,this.view.carsReceived=0,this.view.packageFlightsComplete=!1,this.view.accommodationsReady=!1,this.view.accommodationPointsReady=new Set,this.view.flightSearchReady=!1,this.view.search&&this.view.trip){let e=this.view.editingRoute&&!!this._packageDraftService.snapshot;this.view.editingRoute&&this._packageDraftService.reconcileContext(this.view.search,this.view.trip)?this._packageDraftService.markInventoryRefreshing():(this._packageDraftService.clear(),this._packageDraftService.startCustom(this.view.search,this.view.trip),e&&this.toaster.info("The stop sequence changed, so a new package draft was started for the new route.","Route rebuilt",{timeOut:5e3}))}this.view.editingRoute=!1,this._cd.detectChanges(),this.view.builderStarted=!0,setTimeout(()=>{this.view.flightSearchReady=!0,this._cd.detectChanges()},0)}tripChanged(e){this._tfmService.log("builder tripChanged",e),this.view.trip=e,this._tfmCartService.updateTrip(this.view.trip)}searchChanged(e){e&&(this.view.search=e,this.view.search&&(this.view.search.method="multitype",this.view.search.type="multitype",Lt(this.view.search),qt(this.view.search)))}goBackToSearch(){this.view.isSearching=!1,this.view.flightSearchReady=!1,this.stopSearchClock(),this.clearTypingTimers(),this.resetToasts(),this.view.builderStarted=!1,this.view.editingRoute=!0,this.view.selectionDrawerOpen=!1,this._cd.markForCheck()}onPackageAccommodationBundlesReady(e){if(this.view.accommodationPointsReady.add(Number(e.pointIndex)),this.view.accommodationsReady=this.areAllAccommodationPointsReady(),this._stayList?.updatePricesAll({retainTransfers:!0}),this.syncDraftRecommendationsFromTrip(),this.view.searchAreaModalOpen&&Number(this.view.activeDraftItem?.pointIndex)===Number(e.pointIndex)){this.view.activeSearchArea.searching=!1;let t=(this.view.trip?.points??[]).find(i=>Number(i?.index)===Number(e.pointIndex));t&&(t.skipNoRoomDialog=!1),this.scheduleMapPropertyGeocoding(),this._cd.markForCheck()}this._vfaTransferNotice.showAfterPackageAccommodationLoaded(this.view.search,this.view.trip),this.finalizeSearchIfReady()}onPackageAccommodationUnavailable(e){let t=Number(e?.pointIndex),n=this._packageDraftService.snapshot?.stops.find(m=>m.type==="stay"&&m.pointIndex===t);if(n){if(this.view.accommodationRecoveryByPoint=L(R({},this.view.accommodationRecoveryByPoint),{[t]:e}),this._packageDraftService.setSelectionState(n.id,"error",e.message),this.view.accommodationPointsReady.add(t),this.view.accommodationsReady=this.areAllAccommodationPointsReady(),this.view.searchAreaModalOpen&&Number(this.view.activeDraftItem?.pointIndex)===t){this.view.activeSearchArea.searching=!1,this.view.activeSearchArea.mapping=!1;let m=(this.view.trip?.points??[]).find(u=>Number(u?.index)===t);m&&(m.skipNoRoomDialog=!1)}this._cd.markForCheck()}}getAccommodationRecovery(e){return this.view.accommodationRecoveryByPoint?.[e.pointIndex]??null}excludeAccommodation(e){e.accommodation.included&&this._packageDraftService.toggleIncluded(e.id);let t=R({},this.view.accommodationRecoveryByPoint);delete t[e.pointIndex],this.view.accommodationRecoveryByPoint=t,this.toaster.info(`Accommodation at ${e.location.name} will not be included in this quote.`,"Stay excluded")}resultChanged(e,t=0,i=null){if(this._tfmService.log(e),e){if(e.error){if(this.view.searchError=e.error,i){this.view.transferEdgesReady.add(i);let m=this._packageDraftService.snapshot?.legs.find(u=>u.mode==="transfer"&&this.getTransferEdgeId(u)===i);m&&this._packageDraftService.setSelectionState(m.id,"error",e.error?.message??e.error?.text??"No usable transfer was returned for this route."),this.view.transfersReceived=Math.min(this.expectedTransferSearches,this.view.transfersReceived+1),this.finalizeSearchIfReady(),this._cd.markForCheck();return}this.view.isSearching=!1,this.stopSearchClock(),this.resetToasts(),this._cd.detectChanges();return}e.search?.packageFlightsComplete&&(this.view.packageFlightsComplete=!0);let n=(e.trip?.points??this.view.trip?.points??[]).filter(m=>m?.type==="airport"&&Array.isArray(m?.flights)).flatMap(m=>m.flights);n.length>0&&(this.view.search.flights=n),e.data&&e.data.transfers&&(this.view.search.transfers||(this.view.search.transfers=[]),e.data.transfers.forEac
1h(m=>{m.point=t,m.packageEdgeId=i,this.view.search.transfers.some(b=>b?.packageEdgeId===m.packageEdgeId&&`${b?.purpose??b?.direction??""}`==`${m?.purpose??m?.direction??""}`&&(b?.id!=null&&m?.id!=null&&`${b.id}`==`${m.id}`||`${b?.name??""}`==`${m?.name??""}`&&`${b?.vendor??b?.context??""}`==`${m?.vendor??m?.context??""}`))||this.view.search.transfers.push(m)}),this._tfmService.log("transfers",e.data.transfers,t),this.view.transfersReceived+=1,i&&this.view.transferEdgesReady.add(i),this._stayList?.updatePricesAll({retainTransfers:!0}),this.syncDraftRecommendationsFromTrip(),this._cd.detectChanges()),e.data&&e.data.cars&&(this.view.search.cars||(this.view.search.cars=[]),e.data.cars.forEach(m=>{m.point=t,this.view.search.cars.push(m)}),this._tfmService.log("cars",e.data.cars,t),this.view.carsReceived+=1,this._stayList?.updatePricesAll({retainTransfers:!0}),this.syncDraftRecommendationsFromTrip(),this._cd.detectChanges())}this.view.searchAreaModalOpen&&this.scheduleMapPropertyGeocoding(),this._cd.markForCheck(),this.finalizeSearchIfReady()}get expectedTransferSearches(){return this.transferEdges.length}get expectedStaySearches(){return(this.view.trip?.points??[]).filter(e=>e?.type==="hotel").length}get carRentalEdge(){return Jt(this.view.trip?.points)}get expectedCarSearches(){return this.carRentalEdge?1:0}getSearchProgressPercent(){let e=this.expectedStaySearches,t=e>0?Math.min(1,this.view.accommodationPointsReady.size/e):1,i=this.expectedTransferSearches,n=i>0?Math.min(1,this.view.transfersReceived/i):1,m=this.expectedCarSearches,u=m>0?Math.min(1,this.view.carsReceived/m):1;return Math.round((this.view.packageFlightsComplete?40:4)+t*30+n*18+u*12)}getSearchElapsedLabel(){let e=Number(this.view.searchElapsedSeconds??0);return e<60?`${e}s`:`${Math.floor(e/60)}m ${e%60}s`}getRouteMapCenter(){let e=this.view.routeMapPoints??[];return e.length===0?this.stableMapCenter("route",-16,25):this.stableMapCenter("route",e.reduce((t,i)=>t+i.position.lat,0)/e.length,e.reduce((t,i)=>t+i.position.lng,0)/e.length)}getRouteMapZoom(){let e=this.view.routeMapPoints??[];if(e.length<2)return 6;let t=e.map(m=>m.position.lat),i=e.map(m=>m.position.lng),n=Math.max(Math.max(...t)-Math.min(...t),Math.max(...i)-Math.min(...i));return n>60?2:n>25?3:n>10?4:n>4?5:7}getDraftDateSummary(e){let t=[...e.stops].sort((b,y)=>b.order-y.order),i=t.find(b=>b.start)?.start,n=[...t].reverse().find(b=>b.end||b.start),m=n?.end??n?.start;if(!i||!m)return"Dates being confirmed";let u=b=>new Intl.DateTimeFormat("en-ZA",{day:"numeric",month:"short",year:"numeric"}).format(b);return`${u(i)} - ${u(m)}`}areAllAccommodationPointsReady(){return(this.view.trip?.points??[]).filter(t=>t?.type==="hotel").map(t=>Number(t.index)).every(t=>this.view.accommodationPointsReady.has(t))}get transferEdges(){return Xt(this.view.trip?.points)}isCoreSearchReady(){return!!(this.view.search&&this.view.trip&&this.view.packageFlightsComplete&&Array.isArray(this.view.search.flights))}isInventoryReady(){return this.isCoreSearchReady()&&this.view.accommodationsReady&&this.view.transfersReceived>=this.expectedTransferSearches&&this.view.carsReceived>=this.expectedCarSearches}finalizeSearchIfReady(){if(!this.isInventoryReady())return;this.completeToasts(),this.view.isSearching=!1,this.stopSearchClock();let e=new Date;this._packageDraftService.markInventoryPriced(e),this.view.lastRepricedAt=e,this.view.statusses.forEach(t=>t.isComplete=!0),this._cd.detectChanges()}getOutgoingLegs(e,t){return e.legs.filter(i=>i.fromStopId===t)}getItineraryPoints(e){if(this._itineraryPointsCache?.draft===e)return this._itineraryPointsCache.points;let t=this.buildItineraryPoints(e);return this._itineraryPointsCache={draft:e,points:t},t}buildItineraryPoints(e){let t=[...e.stops].sort((n,m)=>n.order-m.order),i=this._packageDraftService.carHolderStopId;return t.map((n,m)=>{let u=m===0,b=m===t.length-1,y=n.type==="stay",C=e.legs.filter(B=>B.mode==="transfer"),S=y?C.find(B=>B.toStopId===n.id&&B.rawFromPoint?.type==="airport")??null:null,O=y?C.find(B=>B.fromStopId===n.id&&B.rawToPoint?.type==="airport")??null:null,$=y?C.filter(
1B=>B.fromStopId===n.id&&B.rawToPoint?.type!=="airport"):[],q=b?e.legs.find(B=>B.mode==="flight"&&B.toStopId===n.id&&(B.selection.selected?.originDestinationOptions?.length??0)>1)??null:null,D=q?.selection.selected?.originDestinationOptions?.[1]??null;return{id:n.id,badge:m+1,stop:n,first:u,last:b,role:y?"stay":u?"depart":b&&!D?"finish":n.type==="airport"?"airport":"place",roleLabel:y?"Stay":u?"Depart":b?D?"Depart / return":"Journey ends":n.type==="airport"?"Connect":"Stop",flightLegs:e.legs.filter(B=>B.mode==="flight"&&B.fromStopId===n.id),arrivalTransfer:S,departureTransfer:O,onwardTransfers:$,returnFlightLeg:q,returnFlightOption:D,holdsCar:y&&n.id===i,hasGroundChoice:y&&(!!S||!!O||n.car.candidates.length>0)}})}getGroundModeLabel(e){switch(e.groundMode){case"car":return"Car hire for the land portion";case"none":return"Client arranges own transport";default:return"Airport transfers"}}setGroundMode(e){this._packageDraftService.setGroundMode(e),this.syncTripFromDraft()}getGroundTransferTotal(e){return[e.arrivalTransfer,e.departureTransfer].filter(t=>!!t).reduce((t,i)=>t+W(i.selection.selected),0)}hasGroundTransferOptions(e){return!!e.arrivalTransfer?.selection.selected||!!e.departureTransfer?.selection.selected}getPackageItemPrice(e){return W(e)}getAccommodationPrice(e){return le(e)}getLegPrice(e){return e.mode==="flight"?Ke(e.selection.selected):W(e.selection.selected)}getFlightServiceStatus(e){return e.coveredByLegId?this.serviceStatus("ready","Included","Covered by the selected round-trip fare.","heroicons_outline:check-circle"):e.selection.included?e.selection.status==="error"?this.errorServiceStatus(e.selection.error??"The selected fare is no longer available. Choose another flight."):this.view.flightSearchReady?this.view.packageFlightsComplete?e.selection.selected?this.readyServiceStatus(e.selection.userEdited?"Your chosen flight is live.":"Best live fare selected."):e.selection.candidates.length>0?this.actionServiceStatus(`${e.selection.candidates.length} live option${e.selection.candidates.length===1?"":"s"} available. Choose one.`):this.actionServiceStatus("No flight is selected. Change the route or search again."):this.searchingServiceStatus("Checking live fares for this route."):this.queuedServiceStatus("Waiting for the route search to start."):this.excludedServiceStatus("This flight is not included in the quote.")}getAccommodationServiceStatus(e){if(!e.accommodation.included)return this.excludedServiceStatus("This stay is not included in the quote.");let t=this.getAccommodationRecovery(e);return t||e.accommodation.status==="error"?this.errorServiceStatus(t?.message??e.accommodation.error??"No usable accommodation was returned for this stop."):this.view.packageFlightsComplete?this.view.accommodationPointsReady.has(Number(e.pointIndex))?e.accommodation.selected&&le(e.accommodation.selected)>0?this.readyServiceStatus(e.accommodation.userEdited?"Your chosen property is live.":"Best live stay selected."):e.accommodation.candidates.length>0?this.actionServiceStatus(`${e.accommodation.candidates.length} live option${e.accommodation.candidates.length===1?"":"s"} available. Choose a stay.`):this.actionServiceStatus("No stay is selected. Search another area or retry suppliers."):this.searchingServiceStatus("Checking properties and room availability for this stop."):this.queuedServiceStatus("Starts after live flights are ready.")}getTransferServiceStatus(e){return e.selection.included?e.selection.status==="error"?this.errorServiceStatus(e.selection.error??"No usable transfer was returned for this route."):this.view.packageFlightsComplete?this.isTransferEdgeReady(e)?e.selection.selected&&W(e.selection.selected)>0?this.readyServiceStatus(e.selection.userEdited?"Your chosen transfer is live.":"Best matching transfer selected."):e.selection.candidates.length>0?this.actionServiceStatus(`${e.selection.candidates.length} live option${e.selection.candidates.length===1?"":"s"} available. Choose one.`):this.actionServiceStatus("No suitable transfer was found. Choose a car or own arrangements."):this.searchingServiceStatus("Checking transfer suppliers for this exact route."):this.queuedServiceStatus("Starts after live flights are ready."):this.excludedServiceStatus("This transfer is not included in the quote.")}getGroundTransferChoiceStatus(e){let t=[e.arrivalTransfer,e.departureTransfer,...e.onwardTransfers].filter(b=>!!b);if(t.length===0)return this.excludedServiceStatus("No transfer route is required at this stop.");let i=t.map(b=>this.getTransferServiceStatus(b)),n=i.find(b=>b.state==="error"||b.state==="action");if(n)return n;let m=i.find(b=>b.state==="searching");if(m)return m;let u=i.find(b=>b.state==="queued");return u||this.readyServiceStatus("All required transfer services are selected.")}getCarServiceStatus(e){return e.car.included?e.car.status==="error"?this.errorServiceStatus(e.car.error??"The selected car is no longer available. Choose another car."):this.view.packageFlightsComplete?this.expectedCarSearches>0&&this.view.carsReceived<this.expectedCarSearches?this.searchingServiceStatus("Checking car-hire suppliers for the trip dates."):e.car.selected&&W(e.car.selected)>0?this.readyServiceStatus(e.car.userEdited?"Your chosen car is live.":"Best live car selected."):e.car.candidates.length>0?this.actionServiceStatus(`${e.car.candidates.length} live option${e.car.candidates.length===1?"":"s"} available. Choose a car.`):this.actionServiceStatus("No car is selected. Choose another ground option if none are available."):this.queuedServiceStatus("Starts after live flights are ready."):this.excludedServiceStatus("Car hire is not included in the quote.")}getActivityServiceStatus(e){return e.selection.included?e.selection.status==="loading"?this.searchingServiceStatus("Refreshing this item for the current trip dates."):e.selection.status==="error"?this.errorServiceStatus(e.selection.error??"Choose this activity or event again for the current dates."):e.selection.selected?this.readyServiceStatus("Included in the itinerary."):this.actionServiceStatus("Choose an activity or remove this item."):this.excludedServiceStatus("This activity or event is not included in the quote.")}getCustomServiceStatus(e){return e.included?e.selected?this.readyServiceStatus("Included in the itinerary."):this.actionServiceStatus("Complete or remove this custom item."):this.excludedServiceStatus("This custom item is not included in the quote.")}getPointServiceStatus(e,t){let i=[];if(e.stop.type==="stay"&&(i.push(this.getAccommodationServiceStatus(e.stop)),t.groundMode==="transfer"?[e.arrivalTransfer,e.departureTransfer,...e.onwardTransfers].filter(y=>
1!!y).forEach(y=>i.push(this.getTransferServiceStatus(y))):t.groundMode==="car"&&e.holdsCar&&i.push(this.getCarServiceStatus(e.stop)),e.stop.activities.filter(y=>y.selection.included).forEach(y=>i.push(this.getActivityServiceStatus(y)))),e.flightLegs.forEach(y=>i.push(this.getFlightServiceStatus(y))),i.length===0)return this.readyServiceStatus("No supplier booking is needed at this route point.");let n=i.filter(y=>y.state==="error"||y.state==="action");if(n.length>0)return this.serviceStatus(n.some(y=>y.state==="error")?"error":"action",`${n.length} action${n.length===1?"":"s"} needed`,n[0].detail,"heroicons_outline:exclamation-triangle");let m=i.filter(y=>y.state==="searching");if(m.length>0)return this.serviceStatus("searching",`${m.length} service${m.length===1?"":"s"} searching`,m[0].detail,"heroicons_outline:arrow-path");let u=i.filter(y=>y.state==="queued");if(u.length>0)return this.serviceStatus("queued",`${u.length} service${u.length===1?"":"s"} queued`,u[0].detail,"heroicons_outline:clock");let b=i.filter(y=>y.state!=="excluded");return this.serviceStatus("ready","Stop ready",`${b.length} service${b.length===1?"":"s"} ready.`,"heroicons_outline:check-circle")}getTransferEdgeId(e){return`transfer-${e.rawFromPoint?.index}-${e.rawToPoint?.index}`}isTransferEdgeReady(e){return this.view.transferEdgesReady.has(this.getTransferEdgeId(e))||this.expectedTransferSearches>0&&this.view.transfersReceived>=this.expectedTransferSearches}serviceStatus(e,t,i,n){return{state:e,label:t,detail:i,icon:n}}queuedServiceStatus(e){return this.serviceStatus("queued","Queued",e,"heroicons_outline:clock")}searchingServiceStatus(e){return this.serviceStatus("searching","Searching",e,"heroicons_outline:arrow-path")}readyServiceStatus(e){return this.serviceStatus("ready","Ready",e,"heroicons_outline:check-circle")}actionServiceStatus(e){return this.serviceStatus("action","Action needed",e,"heroicons_outline:exclamation-circle")}errorServiceStatus(e){return this.serviceStatus("error","Needs attention",e,"heroicons_outline:exclamation-triangle")}excludedServiceStatus(e){return this.serviceStatus("excluded","Not quoted",e,"heroicons_outline:minus-circle")}openDraftItem(e,t){this.view.activeDraftItem=e,this.view.activeDraftKind=t,this.view.selectionDrawerOpen=!0}openSearchArea(e){let t=this.createActiveSearchArea(e);this.view.activeDraftItem=e,this.view.activeDraftKind="stop",this.view.activeSearchArea=R({},t),this.view.originalSearchArea=R({},t),this.view.selectionDrawerOpen=!1,this.view.mapPropertyFilter=Fe(),this.view.searchAreaModalOpen=!0,this._cd.detectChanges();let i=this._areaDialog?.nativeElement;i?.isConnected&&!i.open&&i.showModal(),this.recenterAreaMap(),this.hydrateActiveSearchArea(),this.scheduleMapPropertyGeocoding()}recenterAreaMap(){setTimeout(()=>{let e=this._areaMap?.googleMap;e&&(globalThis?.google?.maps?.event?.trigger(e,"resize"),e.setCenter(this.getActiveSearchAreaCenter()))},400)}hydrateActiveSearchArea(){let e=this.view.activeSearchArea;this.hasActiveSearchAreaPoint()||!e?.placeId||(e.resolving=!0,this._tfmService.getPlaceDetail(e.placeId).pipe(re(this._destroy$)).subscribe({next:t=>{let i=t?.content?.result??t?.result,n=i?.geometry?.location,m=this.readMapCoordinate(n?.lat),u=this.readMapCoordinate(n?.lng);m==null||u==null?e.error="We could not position this location on the map.":(e.latitude=m,e.longitude=u,e.name=i?.formatted_address??e.name,e.error=null,this.view.originalSearchArea=L(R({},e),{resolving:!1})),e.resolving=!1,this._cd.markForCheck(),this.recenterAreaMap()},error:()=>{e.resolving=!1,e.error="We could not load this location on the map.",this._cd.markForCheck()}}))}closeSelectionDrawer(){this.view.selectionDrawerOpen=!1}closeSearchAreaModal(){this._mapPropertyGeocodeRun++,this._areaDialog?.nativeElement.open&&this._areaDialog.nativeElement.close(),this.view.searchAreaModalOpen=!1,this.view.activeSearchArea=null,this.view.originalSearchArea=null,this.view.mapPropertyFilter=Fe(),this._cd.markForCheck()}closeSearchAreaFromDialog(e){e.preventDefault(),this.closeSearchAreaModal()}closeSearchAreaFromBackdrop(e){e.target===e.currentTarget&&this.closeSearchAreaModal()}isActiveMapInventorySearching(){let e=Number(this.view.activeDraftItem?.pointIndex);return!!this.view.activeSearchArea?.searching||!!this.view.isSearching&&!this.view.accommodationPointsReady.has(e)&&!this.getAccommodationRecovery(this.view.activeDraftItem)}resetActiveSearchArea(){this.view.originalSearchArea&&(this.view.activeSearchArea=L(R({},this.view.originalSearchArea),{dirty:!1,resolving:!1,error:null}),this._cd.markForCheck(),this.recenterAreaMap())}getActiveSearchAreaCenter(){let e=this.view.activeSearchArea;return this.hasActiveSearchAreaPoint()?this.stableMapCenter("area",Number(e.latitude),Number(e.longitude)):this.getRouteMapCenter()}stableMapCenter(e,t,i){let n=this._mapCenterCache[e];if(n&&n.lat===t&&n.lng===i)return n;let m={lat:t,lng:i};return this._mapCenterCache[e]=m,m}hasActiveSearchAreaPoint(){let e=this.view.activeSearchArea;return e?.latitude!=null&&e?.longitude!=null&&e.latitude!==""&&e.longitude!==""&&Number.isFinite(Number(e.latitude))&&Number.isFinite(Number(e.longitude))}moveActiveSearchPoint(e){let t=e?.latLng,i=this.readMapCoordinate(t?.lat),n=this.readMapCoordinate(t?.lng);if(i==null||n==null)return;let m=this.view.activeSearchArea;if(!m)return;m.latitude=i,m.longitude=n,m.placeId=null,m.name="Resolving this search point...",m.dirty=!0,m.resolving=!0,m.error=null,this._cd.markForCheck();let u=globalThis?.google?.maps;if(!u?.Geocoder){m.resolving=!1,m.error="Map location lookup is not available yet.",this._cd.markForCheck();return}new u.Geocoder().geocode({location:{lat:m.latitude,lng:m.longitude}},(b,y)=>{let C=b?.[0];y==="OK"&&C?.place_id?(m.placeId=C.place_id,m.name=C.formatted_address||"Selected map area"):m.error="We could not resolve that point. Move the pin slightly and try again.",m.resolving=!1,this._cd.detectChanges()})}setActiveSearchRadius(e){this.view.activeSearchArea&&(this.view.activeSearchArea.radiusKm=e,this.view.activeSearchArea.dirty=!0,this._cd.markForCheck())}applyActiveSearchArea(){let e=this.view.activeSearchArea,t=this.view.activeDraftKind==="stop"?this.view.activeDraftItem?.id:null;if(!t||!e?.placeId||!Number.isFinite(Number(e.latitude))||!Number.isFinite(Number(e.longitude))){this.toaster.warning("Move the pin to a valid map location before searching this area.","Search point not ready");return}this._packageDraftService.updateStopSearchArea(t,{placeId:e.placeId,name:e.name,latitude:Number(e.latitude),longitude:Number(e.longitude),radiusKm:Number(e.radiu
1sKm)||5}),this.syncTripFromDraft(),e.dirty=!1,e.searching=!0,e.mapping=!1,e.mappedCount=0,e.error=null,this.view.originalSearchArea=L(R({},e),{searching:!1}),this._mapPropertyCoordinates.clear(),this._mapMarkerOptions.clear(),this._mapPropertyGeocodeRun++,this._cd.markForCheck(),this.toaster.info(`Searching stays within ${Number(e.radiusKm)||5} km. Properties will appear on this map.`,"Searching this area",{timeOut:5e3,progressBar:!0}),this.refreshStayAreaInventory()}getMapInventory(){let e=Number(this.view.activeDraftItem?.pointIndex);return((this.view.trip?.points??[]).find(i=>Number(i?.index)===e)?.hotels??[]).filter(i=>!i?.hide)}getMapProperties(){return yi(this.getMapInventory(),this.view.mapPropertyFilter,e=>le(e),e=>this.getCandidateProvider(e))}getVisibleMapProperties(e){return(e??[]).slice(0,it)}getMapFilterProviders(){return wi(this.getMapInventory(),e=>this.getCandidateProvider(e))}hasCustomMapFilters(){return xi(this.view.mapPropertyFilter)}onMapPropertyFilterChange(e=!1){this._cd.markForCheck(),e&&this.scheduleMapPropertyGeocoding()}setMapFilterStars(e){this.view.mapPropertyFilter.minStars=e,this.onMapPropertyFilterChange(!0)}setMapFilterProvider(e){this.view.mapPropertyFilter.provider=e,this.onMapPropertyFilterChange(!0)}setMapFilterSort(e){this.view.mapPropertyFilter.sort=e,this.onMapPropertyFilterChange()}toggleMapPricedOnly(){this.view.mapPropertyFilter.pricedOnly=!this.view.mapPropertyFilter.pricedOnly,this.onMapPropertyFilterChange(!0)}clearMapPropertyFilters(){this.view.mapPropertyFilter=Fe(),this.onMapPropertyFilterChange(!0)}getMapPropertyKey(e){return[e?.context??e?.provider??"",e?.id??e?.code??e?.name??""].join(":")}getMapPropertyPosition(e){let t=this.getMapPropertyKey(e),i=this._mapPropertyCoordinates.get(t);if(i)return i;let n=e?.mapPosition??e?.position,m=this.readMapCoordinate(e?.latitude,n?.latitude,n?.lat),u=this.readMapCoordinate(e?.longitude,n?.longitude,n?.lng);if(m==null||u==null)return null;let b={lat:m,lng:u};return this._mapPropertyCoordinates.set(t,b),b}isMapPropertySelected(e){let t=this._packageDraftService.snapshot?.stops.find(i=>i.id===this.view.activeDraftItem?.id||i.pointIndex===Number(this.view.activeDraftItem?.pointIndex));return!!t?.accommodation.selected&&this.getMapPropertyKey(t.accommodation.selected)===this.getMapPropertyKey(e)}getMapMarkerOptions(e){let t=this.isMapPropertySelected(e),i=le(e)>0,n=`${this.getMapPropertyKey(e)}:${t?1:0}:${i?1:0}`,m=this._mapMarkerOptions.get(n);if(m)return m;let u={opacity:i?1:.55,zIndex:t?4:i?2:1};return this._mapMarkerOptions.set(n,u),u}selectMapProperty(e,t=!1){if(le(e)<=0){this.toaster.info("Live price is still checking for this property. Choose another, or wait a moment.","Price not ready");return}let n=this._packageDraftService.snapshot?.stops.find(b=>b.id===this.view.activeDraftItem?.id||b.pointIndex===Number(e?.point));if(!n)return;let m=this.getMapPropertyKey(e);if(((this.view.trip?.points??[]).find(b=>Number(b?.index)===Number(n.pointIndex)||Number(b?.index)===Number(e?.point))?.hotels??[]).forEach(b=>{b.selected=this.getMapPropertyKey(b)===m}),e.selected=!0,this._packageDraftService.updateAccommodation(n.id,e,this.getMapInventory().filter(b=>le(b)>0)),this._stayList?.updatePricesAll({retainTransfers:!0}),t){let b=this.getMapPropertyPosition(e);b&&(this._areaMap?.googleMap?.setCenter(b),this._areaMap?.googleMap?.setZoom(14))}this.toaster.success(`${e.name} is now the selected stay.`,"Accommodation selected",{timeOut:3500,progressBar:!0}),this._cd.markForCheck()}scheduleMapPropertyGeocoding(){this._mapPropertyGeocodeTimer!=null&&clearTimeout(this._mapPropertyGeocodeTimer),this._mapPropertyGeocodeTimer=setTimeout(()=>{this._mapPropertyGeocodeTimer=null,this.geocodeMapProperties(++this._mapPropertyGeocodeRun)},400)}geocodeMapProperties(e){if(e!==this._mapPropertyGeocodeRun||!this.view.searchAreaModalOpen)return;let t=this.getMapProperties(),i=t.filter(y=>!this.getMapPropertyPosition(y)).slice(0,40),n=this.view.activeSearchArea;if(!n)return;if(n.mappedCount=t.length-i.length,i.length===0){n.mapping=!1,this.fitMapToProperties(t),this._cd.markForCheck();return}let m=globalThis?.google?.maps;if(!m?.Geocoder){n.mapping=!1,this._cd.markForCheck();return}n.mapping=!0;let u=new m.Geocoder,b=0;
1i.forEach((y,C)=>{setTimeout(()=>{if(e!==this._mapPropertyGeocodeRun||!this.view.searchAreaModalOpen)return;let S=[y?.address,y?.name,n.name].filter(Boolean).join(", ");u.geocode({address:S},(O,$)=>{if(e!==this._mapPropertyGeocodeRun||!this.view.searchAreaModalOpen)return;let q=O?.[0]?.geometry?.location,D=this.readMapCoordinate(q?.lat),B=this.readMapCoordinate(q?.lng);if($==="OK"&&D!=null&&B!=null){let Te={lat:D,lng:B};y.mapPosition=Te,this._mapPropertyCoordinates.set(this.getMapPropertyKey(y),Te),n.mappedCount++}b++,n.mapping=b<i.length,n.mapping||this.fitMapToProperties(t),this._cd.markForCheck()})},C*175)})}fitMapToProperties(e){let t=this._areaMap?.googleMap,i=globalThis?.google?.maps;if(!t||!i?.LatLngBounds)return;let n=e.map(u=>this.getMapPropertyPosition(u)).filter(u=>!!u);if(n.length===0)return;if(n.length===1){t.setCenter(n[0]),t.setZoom(14);return}let m=new i.LatLngBounds;n.forEach(u=>m.extend(u)),t.fitBounds(m,56)}createActiveSearchArea(e){let t=e.rawPoint??{},i=t?.data?.geometry?.location??t?.geometry?.location,n=this.readMapCoordinate(e.location.latitude,t?.lat,t?.latitude,i?.lat),m=this.readMapCoordinate(e.location.longitude,t?.lng,t?.longitude,i?.lng);return{latitude:n,longitude:m,placeId:e.location.placeId??t?.place_id??t?.googlePlaceID??null,name:t?.searchAreaName??e.location.name,radiusKm:Number(t?.radiusKm)||5,resolving:!1,searching:!1,mapping:!1,mappedCount:0,dirty:!1,error:null}}readMapCoordinate(...e){for(let t of e){let i=typeof t=="function"?t():t;if(!(i==null||i==="")&&Number.isFinite(Number(i)))return Number(i)}return null}moveStop(e,t){this._packageDraftService.moveStop(e,t),this.syncTripFromDraft(),this.refreshDraftInventory()}updateStopNights(e,t){this._packageDraftService.updateStopNights(e,Number(t)),this.syncTripFromDraft(),this.refreshDraftInventory()}canReorderStops(e){return e.stops.length>1&&e.stops.every(t=>t.type!=="airport")}repriceAll(e=!1){!this.view.search||!this.view.trip||this.view.isSearching||(e||this.toaster.info("Refreshing the same Express-ranked provider inventory for every package component.","Repricing package",{timeOut:4e3}),this.syncTripFromDraft(),this.refreshDraftInventory())}refreshStayAreaInventory(){let e=Number(this.view.activeDraftItem?.pointIndex),t=this.view.activeSearchArea,i=(this.view.trip?.points??[]).find(m=>Number(m?.index)===e);i&&t&&(i.hotels=[],i.place_id=t.placeId,i.googlePlaceID=t.placeId,i.searchAreaName=t.name,i.radiusKm=Number(t.radiusKm)||5,i.lat=t.latitude,i.lng=t.longitude,i.latitude=t.latitude,i.longitude=t.longitude,i.skipNoRoomDialog=!0,i.geometry=L(R({},i.geometry??{}),{location:{lat:t.latitude,lng:t.longitude}}));let n=R({},this.view.accommodationRecoveryByPoint);if(delete n[e],this.view.accommodationRecoveryByPoint=n,this.view.accommodationPointsReady.delete(e),this.view.accommodationsReady=this.areAllAccommodationPointsReady(),this._packageDraftService.markInventoryRefreshing(),this._cd.markForCheck(),this._stayList&&this.view.packageFlightsComplete){this._stayList.refreshStaySearch(e);return}this.view.activeSearchArea&&(this.view.activeSearchArea.searching=!1),this.toaster.warning("Wait until flights have finished, then search this area again. The map stays open.","Stay search not ready yet")}undoDraftChange(){let e=this.draftRouteFingerprint(this._packageDraftService.snapshot);this._packageDraftService.undo()&&(this.syncTripFromDraft(),e!==this.draftRouteFingerprint(this._packageDraftService.snapshot)&&this.refreshDraftInventory(),this.toaster.info("The last package change was undone.","Package restored",{timeOut:3e3}),this._cd.markForCheck())}draftRouteFingerprint(e){return JSON.stringify((e?.stops??[]).map(t=>[t.location.placeId,t.start?.toISOString()??null,t.end?.toISOString()??null,t.nights]))}cloneSubmittedTrip(e){if(!e)return e;let t=i=>i instanceof Date?new Date(i.getTime()):i;return L(R({},e),{points:(e.points??[]).map(i=>L(R({},i),{date:t(i?.date),dateFrom:t(i?.dateFrom),dateTo:t(i?.dateTo),data:i?.data?L(R({},i.data),{geometry:i.data.geometry?L(R({},i.data.geometry),{location:R({},i.data.geometry.location)}):i.data.geometry}):i?.data,flights:[],hotels:[],transfers:[],cars:[]}))})}getTripRouteSummary(e){let t=this.view.search?.routeSegments??[],i=[],n=m=>{let u=m?.searchTerm||m?.shortName||m?.name||"Unconfirmed";i[i.length-1]!==u&&i.push(u)};return t.length>0?(n(t[0]?.locationFrom),t.forEach(m=>n(m?.locationTo))):[...e?.points??[]].sort((m,u)=>
1Number(m?.index??0)-Number(u?.index??0)).forEach(m=>n(m?.data??m)),i.join(" \u2192 ")}updateRouteMap(e){if(!e){this.view.routeMapPath=[],this.view.routeMapPoints=[];return}let t=[],i=[],n=new Set,m=[...e.stops].sort((u,b)=>u.order-b.order);for(let u of m){let b=u.rawPoint??u.location.raw??{},y=b?.data?.geometry?.location??b?.geometry?.location??{lat:u.location.latitude,lng:u.location.longitude},C=this.readMapCoordinate(y?.lat),S=this.readMapCoordinate(y?.lng);if(C==null||S==null)continue;let O={lat:C,lng:S},$=t[t.length-1];(!$||$.lat!==C||$.lng!==S)&&t.push(O);let q=u.location.code||u.location.placeId||`${C.toFixed(4)}:${S.toFixed(4)}`;n.has(q)||(n.add(q),i.push({id:q,position:O,label:`${i.length+1}`,title:u.location.name}))}this.view.routeMapPath=t,this.view.routeMapPoints=i}startSearchClock(){this.stopSearchClock();let e=Date.now();this.view.searchElapsedSeconds=0,this.searchClock=setInterval(()=>{this.view.searchElapsedSeconds=Math.floor((Date.now()-e)/1e3),this._cd.markForCheck()},1e3)}stopSearchClock(){this.searchClock&&(clearInterval(this.searchClock),this.searchClock=void 0)}getDraftIssues(e){return this._packageQuoteAssembler.validate(e)}resolveDraftIssue(e){let t=this._packageDraftService.snapshot;if(!(!t||!e)){if(`${e.id??""}`.includes("stale-inventory")){this.repriceAll();return}if(e.legId){let i=t.legs.find(n=>n.id===e.legId);if(i){this.openDraftItem(i,"leg");return}}if(e.stopId){let i=t.stops.find(m=>m.id===e.stopId);if(!i)return;let n=i.activities.find(m=>e.id.startsWith(m.id));n?this.changeActivity(i,n.id):`${e.id}`.includes("-car-")?this.openCarOptions(i):this.openDraftItem(i,"stop");return}this.scrollToPackageOptions()}}getSelectionDelta(e,t){if(!e?.selected||!e?.recommended||!e.userEdited)return null;let i=this.selectionPrice(e.selected,t,!1),n=this.selectionPrice(e.recommended,t,!1);return!(i>0)||!(n>0)?null:i-n}getActiveSelection(){let e=this._packageDraftService.snapshot,t=this.view.activeDraftItem?.id;return!e||!t?null:this.view.activeDraftKind==="leg"?e.legs.find(i=>i.id===t)?.selection??null:e.stops.find(i=>i.id===t)?.accommodation??null}getTopActiveCandidates(){let t=this.getActiveSelection()?.candidates??[],i=new Set;return[...t].filter(n=>{let m=[n?.id??"",n?.index??"",n?.name??"",n?.originDestinationOptions?.[0]?.flightCode??"",n?.originDestinationOptions?.[0]?.departTime??""].join("|");return i.has(m)?!1:(i.add(m),!0)}).sort((n,m)=>this.getCandidatePrice(n)-this.getCandidatePrice(m)).slice(0,3)}getActiveCandidateCount(){return this.getActiveSelection()?.candidates?.length??0}getActiveSelectionName(){let e=this.getActiveSelection()?.selected;return e?this.getCandidateName(e):"No live option selected yet"}getActiveComponentLabel(){if(this.view.activeDraftKind==="leg"){let e=`${this.view.activeDraftItem?.mode??"service"}`;return e==="flight"?"flight":e}return"stay"}getCandidateName(e){let t=e?.originDestinationOptions?.[0];return(e?.name??e?.serviceDescription??[t?.flightCode,t?.departFrom,t?.arriveAt].filter(Boolean).join(" \xB7 "))||"Live option"}getCandidateProvider(e){let t=e?.originDestinationOptions?.[0],i=e?.context;return(typeof i=="string"?i:i?.name??i?.providerName)??e?.vendor??e?.supplier??t?.carrierName??e?.carrierName??"TFM provider"}getCandidateContext(e){let t=e?.originDestinationOptions??[];if(t.length>0){let u=t[0],b=t[t.length-1],y=[u?.departFrom,b?.arriveAt].filter(Boolean).join(" \u2192 "),C=u?.departTime?new Date(u.departTime):null,S=C&&Number.isFinite(C.getTime())?new Intl.DateTimeFormat("en-ZA",{weekday:"short",day:"numeric",month:"short",hour:"2-digit",minute:"2-digit"}).format(C):"";return[y,S,t.length>1?"Return included":"One-way fare"].filter(Boolean).join(" \xB7 ")}let i=this.view.activeDraftKind==="stop"?this._packageDraftService.snapshot?.stops.find(u=>u.id===this.view.activeDraftItem?.id):null,n=(e?.rooms??[]).find(u=>u?.selected)??e?.rooms?.[0],m=(n?.basis??[]).find(u=>u?.selected)??n?.basis?.[0];return[i?`${i.nights} night${i.nights===1?"":"s"}`:"",n?.name,m?.name].filter(Boolean).join(" \xB7 ")}getCandidatePrice(e){return(this.view.activeDraftKind==="leg"?this._packageDraftService.snapshot?.legs.find(i=>i.id===this.view.activeDraftItem?.id):null)?.mode==="flight"?this.selectionPrice(e,"flight",!0):le(e)||W(e)}isActiveCandidate(e){let t=this.getActiveSelection()?.selected;return t===e||t?.id!=null&&e?.id!=null&&`${t.id}`==`${e.id}`}selectActiveCandidate(e){let t=this._packageDraftService.snapshot;if(!(!t||this.isActiveCandidate(e))){if(this.view.activeDraftKind==="leg"){let i=t.legs.find(n=>n.id===this.view.activeDraftItem?.id);i&&this.draftSelectionChanged({item:e,type:i.mode})}else{let i=t.stops.find(n=>n.id===this.view.activeDraftItem?.id);i&&this._packageDraftService.updateAccommodation(i.id,e,i.accommodation.candidates)}this.isActiveCandidate(e)&&(this.toaster.success(`${this.getCandidateName(e)} is now selected.`,`Itinerary ${this.getActiveComponentLabel()} replaced`,{timeOut:3500,progressBar:!0}),this.closeSelectionDrawer())}}selectionPrice(e,t,i){if(t==="flight"){let n=Ke(e);return i&&e?.pairedReturnFlight?n+Ke(e.pairedReturnFlight):n}return t==="accommodation"?le(e):W(e)}toggleDraftItem(e){this._packageDraftService.toggleIncluded(e)}draftSelectionChanged(e){let t=e?.item,i=`${e?.type??t?.type??""}`.toLowerCase(),n=this._packageDraftService.snapshot;if(!t||!n)return;if(i==="flight"){let u=this.view.activeDraftKind==="leg"?n.legs.find(C=>C.id===this.view.activeDraftItem?.id):null;if(!u||u.mode!=="flight")return;if(u.coveredByLegId){this.toaster.warning("This return is included in the selected round trip. Change the outbound journey to a one-way pair before editing the return separately.","Round-trip fare",{timeOut:6e3});return}let b=u.rawFromPoint?.flights??[],y=n.legs.find(C=>C.id!==u.id&&C.rawFromPoint?.place_id===u.rawToPoint?.place_id&&C.rawToPoint?.place_id===u.rawFromPoint?.place_id&&Number(C.rawFromPoint?.index)>Number(u.rawFromPoint?.index));if((t?.originDestinationOptions?.length??0)>1&&y){this._packageDraftService.setRoundTripCoverage(u.id,y.id,t,b,!0);return}if(y&&t?.pairedReturnFlight){this._packageDraftService.setOneWayPair(u.id,y.id,t,t.pairedReturnFlight,b,y.rawFromPoint?.flights??[]);return}this._packageDraftService.clearRoundTripCoverage(u.id),this._packageDraftService.updateLegSelection(u.id,t,b);return}if(i==="transfer"){let u=this.view.activeDraftKind==="leg"?n.legs.find(b=>b.id===this.view.activeDraftItem?.id):null;u?.mode==="transfer"&&this._packageDraftService.updateLegSelection(u.id,t,this.transferCandidatesForLeg(u));return}let m=n.stops.find(u=>u.id===this.view.activeDraftItem?.id||u.pointIndex===Number(t?.point));m&&(i==="hotel"||i==="accommodation"?this._packageDraftService.updateAccommodation(m.id,t,m.rawPoint?.hotels??[]):i==="car"?this._packageDraftService.updateCar(m.id,t,(this.view.search?.cars??[]).filter(u=>u?.point===m.pointIndex)):i==="activity"&&this.applyActivitySelection(m,t))}restoreBestPrice(e){this._packageDraftService.restoreRecommended(e)}scrollToPackageOptions(){this.closeSelectionDrawer(),this.view.showAllInventory=!0,typeof document<"u"&&document.getElementById("custom-package-options")?.scrollIntoView({behavior:"smooth",block:"start"})}openLiveOptions(){let e=this.view.activeDraftItem;if(!e||!this._stayList){this.scrollToPackageOptions();return}if(this.closeSelectionDrawer(),this.view.activeDraftKind==="leg"&&e.mode==="flight"){this._stayList.showFlights(e.rawFromPoint);return}if(this.view.activeDraftKind==="leg"&&e.mode==="transfer"){this._stayList.showTransfers(e.rawFromPoint);return}this.scrollToPackageOptions()}toggleAllInventory(){this.view.showAllInventory=!this.view.showAllInventory,this._cd.markForCheck()}addActivity(e){this.view.activeActivityId=null,this.view.activeDraftItem=e,this.view.activeDraftKind="stop";let t=this.view.trip?.points?.find(i=>i?.index===e.pointIndex);if(!t||!this._stayList){this.toaster.info("Activity and event search becomes available once accommodation results are ready.","Still building package");return}this._stayList.showActivities(t)}changeActivity(e,t){this.view.activeActivityId=t,this.view.activeDraftItem=e,this.view.activeDraftKind="stop";let i=this.view.trip?.points?.find(n=>n?.index===e.pointIndex);if(!i||!this._stayList){this.toaster.info("Activity and event alternatives become available once this stay has live results.","Still building package");return}this._stayList.showActivities(i)}applyActivitySelection(e,t){if(this.view.activeActivityId){this._packageDraftService.updateActivity(this.view.activeActivityId,t),this.view.activeActivityId=null;return}let i=`${t?.id??t?.sequenceId??t?.code??""}`;e.activities.some(m=>{let u=m.selection.selected;if(u===t)return!0;
1let b=`${u?.id??u?.sequenceId??u?.code??""}`;return!!i&&b===i})||this._packageDraftService.addActivity(e.id,t,t?.departDate?new Date(t.departDate):e.start,t?.rph!=null?`${t.rph}`:null)}openCarOptions(e){this.view.activeDraftItem=e,this.view.activeDraftKind="stop";let t=this.view.trip?.points?.find(i=>i?.index===e.pointIndex);if(!t||!this._stayList){this.scrollToPackageOptions();return}this._stayList.showCars(t)}addManualCustomService(){let e=this.view.customServiceDraft,t=`${e?.name??""}`.trim(),i=Number(e?.price);if(!t||!Number.isFinite(i)||i<0){this.toaster.warning("Enter an item name and valid sell price.","Custom item");return}let n=this._packageDraftService.snapshot,m=n?.stops.find(b=>b.type==="stay")?.start??n?.stops[0]?.start??new Date,u=e.date?new Date(e.date):new Date(m.getTime());this._packageDraftService.addCustomService({id:`custom-service-${Date.now()}`,name:t,serviceDescription:t,supplier:"Custom",price:i,priceTotal:i,cost:i,searchType:9,SearchType:9,index:0,Index:0,point:0,start:u,end:u,Start:u,End:u,departDate:u,arriveDate:u}),this.view.customServiceDraft={name:"",price:null,date:null},this.toaster.success("Custom item added to this package."),this._cd.markForCheck()}openQuoteReview(){let e=this._packageDraftService.snapshot;if(!e||this.view.quoteCreated)return;let t=this._packageQuoteAssembler.validate(e);if(e.issues=t,t.length>0){this.toaster.warning(t[0].message,"Package needs attention",{timeOut:7e3,positionClass:"toast-top-center"});return}this.view.quoteReviewOpen=!0,this._cd.markForCheck()}closeQuoteReview(){this.view.isCreatingQuote||(this.view.quoteReviewOpen=!1,this._cd.markForCheck())}getQuoteReviewItems(e){let t=[];for(let i of e.legs){if(!i.selection.included||!i.selection.selected||i.coveredByLegId)continue;let n=e.stops.find(u=>u.id===i.fromStopId)?.location.name??"",m=e.stops.find(u=>u.id===i.toStopId)?.location.name??"";t.push({id:i.id,type:i.mode,name:i.selection.selected?.name??i.selection.selected?.carrierName??`${i.mode} service`,context:`${n} to ${m}`,price:this.getLegPrice(i)})}for(let i of e.stops){i.accommodation.included&&i.accommodation.selected&&t.push({id:`${i.id}-accommodation`,type:"stay",name:i.accommodation.selected.name??"Accommodation",context:`${i.location.name}, ${i.nights} night${i.nights===1?"":"s"}`,price:this.getAccommodationPrice(i.accommodation.selected)}),i.car.included&&i.car.selected&&t.push({id:`${i.id}-car`,type:"car",name:i.car.selected.name??"Car hire",context:i.location.name,price:this.getPackageItemPrice(i.car.selected)});for(let n of i.activities){if(!n.selection.included||!n.selection.selected)continue;let m=n.date?new Intl.DateTimeFormat("en-ZA",{day:"numeric",month:"short",year:"numeric"}).format(new Date(n.date)):"",u=this.getCandidateProvider(n.selection.selected);t.push({id:n.id,type:"activity",name:n.selection.selected.name??"Activity or event",context:[i.location.name,m,u].filter(Boolean).join(" \xB7 "),price:this.getPackageItemPrice(n.selection.selected)})}}for(let i of e.customServices)!i.included||!i.selected||t.push({id:i.id??i.selected.id??i.selected.name,type:"manual",name:i.selected.name??i.selected.serviceDescription??"Manual service",context:"Agent-added service",price:this.getPackageItemPrice(i.selected)});return t}createDraftQuote(){return he(this,null,function*(){let e=this._packageDraftService.snapshot;if(!this.view.isCreatingQuote){if(!e){this.toaster.warning("Start a package before creating the quote.","Package incomplete",{timeOut:5e3});return}this.view.isCreatingQuote=!0,this._cd.markForCheck();try{let t=yield this._packageQuoteAssembler.assemble(e);e.issues=t,t.length>0&&(this.view.isCreatingQuote=!1,this.toaster.warning(t[0].message,"Package incomplete",{timeOut:7e3,positionClass:"toast-top-center"}),this._cd.markForCheck())}catch{this.view.isCreatingQuote=!1,this.toaster.error("The package could not be assembled. No quote was created; please reprice and try again.","Package assembly failed",{timeOut:8e3,positionClass:"toast-top-center"}),this._cd.markForCheck()}}})}canCreateDraftQuote(){let e=this._packageDraftService.snapshot;return!!e&&!this.view.isSearching&&!this.view.isCreatingQuote&&!this.view.quoteCreated&&this._packageQuoteAssembler.validate(e).length===0}syncDraftRecommendationsFromTrip(){let e=this._packageDraftService.snapshot;if(!e)return;let t=!1;for(let n of e.stops.filter(m=>m.type==="stay")){let m=e.source==="express"&&!!n.accommodation.selected,u=this.view.trip?.points??[],y=((u.find(D=>D?.index===n.pointIndex)??u.find(D=>D?.type==="hotel"&&(D?.place_id===n.location.placeId||D?.place_id===n.rawPoint?.place_id)))?.hotels??[]).filter(D=>W(D)>0).sort((D,B)=>W(D)-W(B)),C=y.find(D=>D?.selected||D?.focus)??y[0];if(n.accommodation.userEdited)this._packageDraftService.rebindSelection(n.id,y);else if(m&&y.length>0)this._packageDraftService.rebindSelection(n.id,y);else if(!m&&C&&(this._packageDraftService.updateAccommodation(n.id,C,y,!0),!t)){let D=(C?.rooms??[]).find(oe=>oe?.selected)??C?.rooms?.[0],B=D?.packageFlights,Te=D?.packageFlightsReturn,rt=this._packageDraftService.snapshot?.legs.filter(oe=>oe.mode==="flight").sort((oe,Di)=>oe.order-Di.order)??[],ne=rt[0],Ee=ne?rt.find(oe=>oe.id!==ne.id&&oe.rawFromPoint?.place_id===ne.rawToPoint?.place_id&&oe.rawToPoint?.place_id===ne.rawFromPoint?.place_id):null;ne&&Ee&&(B?.originDestinationOptions?.length??0)>1?(this._packageDraftService.setRoundTripCoverage(ne.id,Ee.id,B,ne.rawFromPoint?.flights??[]),t=!0):ne&&B&&(this._packageDraftService.updateLegSelection(ne.id,B,ne.rawFromPoint?.flights??[],!0),Ee&&Te&&this._packageDraftService.updateLegSelection(Ee.id,Te,Ee.rawFromPoint?.flights??[],!0),t=!0)}let S=(this.view.search?.cars??[]).filter(D=>D?.point===n.pointIndex&&Xe(D)).sort((D,B)=>W(D)-W(B)),$=((n.accommodation.selected?.rooms??[]).find(D=>D?.selected)??n.accommodation.selected?.rooms?.[0])?.packageCarInbound;n.id===this._packageDraftService.carHolderStopId&&(n.car.userEdited?this._packageDraftService.rebindSelection(`${n.id}
1-car`,S):e.source==="express"&&n.car.selected&&S.length>0?this._packageDraftService.rebindSelection(`${n.id}-car`,S):$?this._packageDraftService.updateCar(n.id,$,S,!0):!(e.source==="express"&&n.car.selected)&&S.length>0&&this._packageDraftService.updateCar(n.id,S[0],S,!0))}let i=this.seedDraftFlightRecommendations(e);for(let n of e.legs){if(n.coveredByLegId||i.has(n.id)||!n.selection.userEdited&&(n.selection.selected?.originDestinationOptions?.length??0)>1)continue;let m=[];if(n.mode==="flight"?m=(n.rawFromPoint?.flights??[]).filter(Boolean):n.mode==="transfer"&&(m=this.transferCandidatesForLeg(n)),n.mode==="transfer"&&n.selection.selected&&!n.selection.userEdited&&!this.isTransferSuitableForLeg(n.selection.selected,n)&&this._packageDraftService.updateLegSelection(n.id,null,m,!0),n.selection.userEdited){if(this._packageDraftService.rebindSelection(n.id,m),n.mode==="flight"&&n.selection.status==="ready"&&(n.selection.selected?.originDestinationOptions?.length??0)>1){let y=e.legs.find(C=>C.id!==n.id&&C.rawFromPoint?.place_id===n.rawToPoint?.place_id&&C.rawToPoint?.place_id===n.rawFromPoint?.place_id&&Number(C.rawFromPoint?.index)>Number(n.rawFromPoint?.index));y&&this._packageDraftService.setRoundTripCoverage(n.id,y.id,n.selection.selected,m,!0)}continue}let u=n.mode==="transfer"?this.packageTransferRecommendation(n,e):null;if(u&&this.isTransferSuitableForLeg(u,n)){this._packageDraftService.updateLegSelection(n.id,u,m,!0);continue}if(e.source==="express"&&n.selection.selected){this._packageDraftService.rebindSelection(n.id,m);continue}if(n.mode==="transfer"){let y=Yt(this.transferPoolForLeg(n),this.expectedTransferPurpose(n),this.transferEndpointsForLeg(n));y&&this._packageDraftService.updateLegSelection(n.id,y.selected,m,!0);continue}let b=m.find(y=>y?.selected)??m[0];b&&this._packageDraftService.updateLegSelection(n.id,b,m,!0)}}packageTransferRecommendation(e,t){let i=e.rawFromPoint?.type==="airport"?t.stops.find(m=>m.id===e.toStopId):t.stops.find(m=>m.id===e.fromStopId),n=(i?.accommodation.selected?.rooms??[]).find(m=>m?.selected)??i?.accommodation.selected?.rooms?.[0];return e.rawFromPoint?.type==="airport"?n?.packageTransferInbound??null:n?.packageTransferOutbound??null}expectedTransferPurpose(e){return e.rawFromPoint?.type==="airport"?"inbound":e.rawToPoint?.type==="airport"?"outbound":""}transferEndpointsForLeg(e){return[e.rawFromPoint?.title,e.rawFromPoint?.name,e.rawFromPoint?.data?.searchTerm,e.rawToPoint?.title,e.rawToPoint?.name,e.rawToPoint?.data?.searchTerm].filter(Boolean)}transferPoolForLeg(e){let t=`transfer-${e.rawFromPoint?.index}-${e.rawToPoint?.index}`,i=e.rawFromPoint?.type==="airport";return(this.view.search?.transfers??[]).filter(n=>{if(n?.packageEdgeId&&n.packageEdgeId!==t)return!1;let m=Number(i?e.rawToPoint?.index:e.rawFromPoint?.index);return n?.packageEdgeId||Number(n?.point)===m})}transferCandidatesForLeg(e){let t=Je(this.transferPoolForLeg(e),this.expectedTransferPurpose(e),this.transferEndpointsForLeg(e));return(t.length>0?t:this.transferPoolForLeg(e).filter(Xe)).sort((i,n)=>W(i)-W(n))}isTransferSuitableForLeg(e,t){return Je([e],this.expectedTransferPurpose(t),this.transferEndpointsForLeg(t)).length===1}seedDraftFlightRecommendations(e){let t=new Set,i=e.legs.filter(n=>n.mode==="flight").sort((n,m)=>n.order-m.order);for(let n of i){if(t.has(n.id)||n.selection.userEdited)continue;if(n.coveredByLegId){t.add(n.id);continue}if(n.selection.selected){let C=n.rawFromPoint?.flights??[];C.length>0&&this._packageDraftService.rebindSelection(n.id,C),t.add(n.id);for(let S of i.filter(O=>O.coveredByLegId===n.id))t.add(S.id);continue}let m=i.find(C=>!t.has(C.id)&&C.id!==n.id&&C.rawFromPoint?.place_id===n.rawToPoint?.place_id&&C.rawToPoint?.place_id===n.rawFromPoint?.place_id&&Number(C.rawFromPoint?.index)>Number(n.rawFromPoint?.index)),u=n.rawFromPoint?.flights??[],b=L(R({},e.search),{dateFrom:n.rawFromPoint?.date??n.departAt,dateTo:m?.rawFromPoint?.date??n.rawToPoint?.date??n.arriveAt,tripIntentDateFrom:n.rawFromPoint?.date??n.departAt,tripIntentDateTo:m?.rawFromPoint?.date??n.rawToPoint?.date??n.arriveAt});if(m){let C=Ut(u,m.rawFromPoint?.flights??[],b);if(C?.outbound){C.useReturnFlights?this._packageDraftService.setRoundTripCoverage(n.id,m.id,C.outbound,u):(this._packageDraftService.updateLegSelection(n.id,C.outbound,u,!0),C.returnFlight&&this._packageDraftService.updateLegSelection(m.id,C.returnFlight,m.rawFromPoint?.flights??[],!0)),t.add(n.id),t.add(m.id);continue}}let y=Ht(u,b,"outbound");y&&(this._packageDraftService.updateLegSelection(n.id,y,u,!0),t.add(n.id))}return t}syncTripFromDraft(){let e=this._packageDraftService.snapshot;!e||!this.view.trip||(this.view.trip.points=e.stops.map((t,i)=>{let n=t.rawPoint??{};return n.index=i,n.date=t.start,n.dateTo=t.end,n.nights=t.nights,t.pointIndex=i,t.rawPoint=n,n}),e.trip=this.view.trip,this._tfmCartService.updateTrip(this.view.trip))}refreshDraftInventory(){if(!(!this.view.search||!this.view.trip)){this.view.accommodationRecoveryByPoint={},this.view.quoteReviewOpen=!1,this.view.quoteCreated=!1,this._packageDraftService.markInventoryRefreshing(),this.view.isSearching=!0,this.startSearchClock(),this.view.statusses=[],this.view.searchError=null,this.view.search.flights=[],this.view.search.transfers=[],this.view.search.cars=[],this.view.search.hotels=[],this.view.packageFlightsComplete=!1,this.view.accommodationsReady=!1,this.view.accommodationPointsReady=new Set,this.view.transfersReceived=0,this.view.transferEdgesReady=new Set,this.view.carsReceived=0,this.view.flightSearchReady=!1;for(let e of this.view.trip.points??[])e.flights=[],e.transfers=[],e.cars=[],e.hotels=[];this._tfmCartService.updateSearch(this.view.search),this._cd.detectChanges(),setTimeout(()=>{this.view.flightSearchReady=!0,this._cd.detectChanges()})}}selectionChanged(e){}displayFn(e){return e&&e.name?e.name:""}setLocation(e,t){this._tfmService.log(e,t),t=="locationFrom"?this.view.search.locationFrom=e:t=="locationTo"&&(this.view.search.locationTo=e)}processPackages(){this.view.data.hotels.filter(e=>e.price>
10).forEach(e=>{if(this.view.data.packages.filter(i=>i.name==e.name).length==0){var t={};t.point=e.point,t.id=this.view.data.packages.length+1,t.context="TFM",t.code=this.view.data.packages.length+1,t.name=e.name,t.grading=e.grading,t.duration=e.duration,t.price=e.price,t.image=e.image,t.hotel=e,this.packageAssignFlight(),this.packageAssignTransfer(),this.view.data.packages.push(t)}}),this.filterAndTagPackages()}filterAndTagPackages(){if(this.view.data.packages&&this.view.data.packages.length>0){this.view.data.packages.sort(function(i,n){return i.price&&n.price&&i.price-n.price}),this.view.data.packages[0].tag="Cheapest",this.view.filter.package.quick=[],this.view.filter.package.grading=[],this.view.filter.package.basis=[];var e=null,t=null;this.view.data.packages.forEach(i=>{(!e||i.price<e)&&(e=i.price),(!t||i.price>t)&&(t=i.price);var n="";n=i.grading+" Stars",this.view.filter.package.grading.filter(m=>m.title==n).length==0&&this.view.filter.package.grading.push({type:"",icon:"",title:n,value:i.price,count:1}),i.hotel.rooms.forEach(m=>{m.basis.forEach(u=>{n=u.name,this.view.filter.package.basis.filter(b=>b.title==n).length==0&&this.view.filter.package.basis.push({type:"",icon:"",title:n,value:i.hotel.price,count:1})})})}),this.view.filter.package.quick.push({type:"amount",icon:"fad fa-funnel-dollar",title:"Cheapest",value:e,count:1}),this.view.filter.package.quick.push({type:"amount",icon:"fad fa-fire-alt",title:"Popular",value:t,count:1})}}packageAssignFlight(){this.view.data.packages.forEach(e=>{this.view.data.flights&&this.view.data.flights.length>0&&(e.flight=this.view.data.flights[0])}),this.packageCalculateTotal()}packageAssignTransfer(){this.view.data.packages.forEach(e=>{this.view.data.transfers&&this.view.data.transfers.length>0&&(e.transfer=this.view.data.transfers[0])}),this.packageCalculateTotal()}packageCalculateTotal(){this.view.data.packages.forEach(e=>{var t=0;e.hotel&&(t+=e.hotel.price),e.flight&&(t+=e.flight.price),e.transfer&&(t+=e.transfer.price),e.price=t})}getPaxTotal(){return this.view.search.pax.adult+this.view.search.pax.teen+this.view.search.pax.child+this.view.search.pax.infant}addFlight(){this.view.flights.push({})}trackByFn(e,t){return t.id||e}resetToasts(){this.clearTimers(),this.progressToastId&&this.toaster.clear(this.progressToastId),this.slowToastId&&this.toaster.clear(this.slowToastId),this.slowerToastId&&this.toaster.clear(this.slowerToastId),this.hangToastId&&this.toaster.clear(this.hangToastId),this.progressToastId=this.slowToastId=this.slowerToastId=this.hangToastId=void 0}clearTimers(){this.slowTimers.forEach(e=>clearTimeout(e)),this.slowTimers=[]}startTyping(e,t,i){let n=e?.id||e?.title||"status",m=this.typingTimers.get(n);if(m&&(clearInterval(m),this.typingTimers.delete(n)),e.fullText=t||"",i||!e.fullText){e.typedText=e.fullText,e.isTyping=!1;return}e.typedText="",e.isTyping=!0;let u=0,b=setInterval(()=>{e.typedText+=e.fullText.charAt(u),u+=1,u>=e.fullText.length&&(clearInterval(b),this.typingTimers.delete(n),e.isTyping=!1),this._cd.detectChanges()},this.typingSpeedMs);this.typingTimers.set(n,b)}clearTypingTimers(){this.typingTimers.forEach(e=>clearInterval(e)),this.typingTimers.clear()}completeToasts(){this.clearTimers(),this.progressToastId&&this.toaster.clear(this.progressToastId),this.slowToastId&&this.toaster.clear(this.slowToastId),this.slowerToastId&&this.toaster.clear(this.slowerToastId),this.toaster.success("Results ready. Scroll to pick your flights, stays and transfers.","Search complete",{timeOut:4e3})}ngOnDestroy(){this._mapPropertyGeocodeRun++,this._mapPropertyGeocodeTimer!=null&&(clearTimeout(this._mapPropertyGeocodeTimer),this._mapPropertyGeocodeTimer=null),this.clearTypingTimers(),this.stopSearchClock(),this.resetToasts(),this.view.statusses=[],this._destroy$.next(),this._destroy$.complete()}static{this.\u0275fac=function(t){return new(t||a)(V(wt),V(we),V(Se),V(be),V(It),V(hi),V(ri),V(Si))}}static{this.\u0275cmp=G({type:a,selectors:[["builder"]],viewQuery:function(t,i){if(t&1&&(pe(et,5),pe(Ze,5),pe(ji,5)),t&2){let n;ue(n=_e())&&(i._stayList=n.first),ue(n=_e())&&(i._areaMap=n.first),ue(n=_e())&&(i._areaDialog=n.first)}},inputs:{_options:[0,"options","_options"]},outputs:{tripChange:"tripChange",cartChange:"cartChange"},standalone:!0,features:[Z],decls:6,vars:4,consts:[["areaDialog",""],[1,"package-builder"],[1,"package-builder__start"],["aria-labelledby","package-builder
1-area-title",1,"package-builder__area-backdrop"],["class","hidden",4,"ngIf"],[1,"package-builder__start-header"],[1,"package-builder__eyebrow"],[1,"package-builder__resume"],["aria-label","Package route planner",1,"package-builder__route-composer"],[3,"searchClicked","tripChange","searchChange","cacheMode","panel"],[1,"package-builder__resume-icon"],[3,"svgIcon"],["mat-flat-button","","type","button",1,"package-builder__resume-primary",3,"click"],["mat-button","","type","button",1,"package-builder__resume-secondary",3,"click"],[1,"package-builder__header"],[1,"package-builder__header-copy"],["mat-button","","type","button",1,"package-builder__back",3,"click"],[1,"package-builder__header-tools"],["mat-stroked-button","","type","button",3,"click","disabled"],["mat-flat-button","","color","primary","type","button",3,"click","disabled"],[1,"package-builder__drawer-container",3,"hasBackdrop"],["position","end","mode","over",1,"package-builder__selection-drawer",3,"closedStart","opened"],[1,"package-builder__drawer-header"],["mat-icon-button","","type","button","aria-label","Close editor",3,"click"],[1,"package-builder__drawer-body"],[1,"package-builder__drawer-intro"],[1,"package-builder__current-selection"],[1,"package-builder__area-shortcut"],["mat-stroked-button","","type","button"],["mat-stroked-button","","type","button",3,"click"],[1,"package-builder__layout"],[1,"package-builder__workspace"],["aria-label","Package search progress",1,"package-builder__provider-progress"],["aria-live","polite",1,"package-builder__progress"],["aria-label","Package itinerary",1,"package-builder__timeline"],[1,"package-builder__inline-notice"],["id","custom-package-options",1,"package-builder__options"],[1,"package-builder__summary"],[1,"package-builder__drawer-empty"],[1,"package-builder__candidate-heading"],[1,"package-builder__candidate-list"],["type","button",1,"package-builder__candidate",3,"package-builder__candidate--selected"],["type","button",1,"package-builder__candidate",3,"click"],[1,"package-builder__candidate-rank"],[1,"package-builder__candidate-context"],[1,"package-builder__candidate-provider"],[1,"package-builder__candidate-action"],[1,"package-builder__progress-heading"],["aria-hidden","true",1,"package-builder__progress-orbit"],["role","progressbar","aria-label","Package search progress","aria-valuemin","0","aria-valuemax","100",1,"package-builder__progress-meter"],[1,"package-builder__progress-row","package-builder__progress-row--active"],[1,"package-builder__slow-search"],[1,"package-builder__search-error"],[1,"package-builder__progress-row",3,"package-builder__progress-row--active"],[1,"package-builder__progress-row"],[3,"ngClass"],[1,"package-builder__section-heading"],[1,"package-builder__recommendation-label"],[1,"package-builder__custom-services"],[1,"package-builder__stop-type"],[1,"package-builder__custom-form"],["type","text","name","customServiceName","aria-label","Custom service name","placeholder","Private guide, rail pass, special dinner...",3,"ngModelChange","ngModel"],["type","number","min","0","name","customServicePrice","aria-label","Custom service sell price","placeholder","Sell price",3,"ngModelChange","ngModel"],["type","date","name","customServiceDate","aria-label","Custom service date",3,"ngModelChange","ngModel"],[1,"package-builder__stop"],[1,"package-builder__rail"],[1,"package-builder__stop-content"],[1,"package-builder__stop-heading"],[1,"package-builder__stop-code"],[1,"package-builder__stop-actions"],[1,"package-builder__point-state"],["mat-icon-button","","type","button","aria-label","Move stop earlier"],["mat-icon-button","","type","button","aria-label","Move stop later"],[1,"package-builder__point-note"],[1,"package-builder__stop-nights"],["mat-icon-button","","type","button","aria-label","Move stop earlier",3,"click"],["mat-icon-button","","type","button","aria-label","Move stop later",3,"click"],["aria-live","polite",1,"package-builder__recovery"],[1,"package-builder__ground"],[1,"package-builder__stay-tools"],["type","number","min","0",3,"change","value"],[1,"package-builder__recovery-actions"],["mat-flat-button","","color","primary","type","button",3,"click"],["mat-button","","type","button",3,"click"],[1,"package-builder__ground-heading"],["role","radiogroup","aria-label","Ground transport",1,"package-builder__ground-options"],["type","button","role","radio",1,"package-builder__ground-option",3,"click"],[1,"package-builder__selection-line"],[1,"package-builder__service-state"],[1,"package-builder__service-context"],[1,"is-warning"],[1,"package-builder__selection-actions"],[1,"package-builder__selection-line",3,"is-excluded"],[1,"package-builder__missing-service"],[1,"package-builder__selection-line","is-excluded"],[3,"is-saving"],[1,"package-builder__leg-route"],[1,"package-builder__leg"],[1,"package-builder__leg-icon"],["type","button",1,"package-builder__leg-button",3,"click","disabled"],[1,"package-builder__leg-price"],[1,"package-builder__leg-actions"],[1,"package-builder__options-intro"],[1,"package-builder__inventory"],[3,"resultChange","selectionChange","searchChangeRequested","packageAccommodationUnavailable","packageAccommodationBundlesReady","options","trip","cacheMode","displayMode","compactHeader"],[1,"package-builder__total"],[1,"package-builder__health",3,"package-builder__health--ready"],["mat-flat-button","","type","button",1,"package-builder__summary-cta",3,"click","disabled"],["mat-button","","type","button",1,"package-builder__summary-link",3,"click"],[1,"package-builder__health"],["type","button",1,"package-builder__health-issue"],["type","button",1,"package-builder__health-issue",3,"click"],["aria-labelledby","package-builder
1-area-title",1,"package-builder__area-backdrop",3,"cancel","click"],[1,"package-builder__area-dialog",3,"click"],["id","package-builder-area-title"],["mat-icon-button","","type","button","aria-label","Close search area map",3,"click"],[1,"package-builder__area-dialog-body"],[1,"package-builder__area-map-stage"],["height","100%","width","100%",3,"mapClick","center","zoom","options"],[1,"package-builder__area-map-hint"],[1,"package-builder__area-controls"],[1,"package-builder__area-location"],[1,"package-builder__area-radius"],["type","button",3,"is-active"],[1,"package-builder__area-guidance"],[1,"package-builder__area-status"],[1,"package-builder__area-error"],[1,"package-builder__map-results"],[1,"package-builder__area-status-spinner"],[1,"package-builder__map-filters"],[1,"package-builder__map-search"],["type","search","name","mapPropertyQuery","autocomplete","off","placeholder","Search hotels, streets, or suppliers",3,"ngModelChange","ngModel"],[1,"package-builder__map-filter-row"],["type","button",3,"click"],[1,"package-builder__map-filter-row","package-builder__map-filter-row--wrap"],["type","button",1,"package-builder__map-filter-clear"],["mat-button","","type","button",3,"click","disabled"],[3,"center","radius","options"],[3,"mapDragend","position","title","options"],[3,"position","title","options"],[3,"mapClick","position","title","options"],["type","button",1,"package-builder__map-filter-clear",3,"click"],[1,"package-builder__map-results-empty"],[1,"package-builder__map-property-list"],["type","button",1,"package-builder__map-property",3,"is-selected","is-checking"],[1,"package-builder__map-results-more"],["type","button",1,"package-builder__map-property",3,"click"],[3,"src","alt"],[1,"package-builder__map-property-placeholder"],[1,"package-builder__map-property-selected",3,"svgIcon"],[1,"package-builder__review-backdrop"],[1,"package-builder__review-backdrop",3,"click"],["role","dialog","aria-modal","true","aria-labelledby","package-builder-review-title","cdkTrapFocus","",1,"package-builder__review",3,"keydown.escape","click","cdkTrapFocusAutoCapture"],["id","package-builder-review-title"],["mat-icon-button","","type","button","aria-label","Close quote review",3,"click","disabled"],[1,"package-builder__review-summary"],[1,"package-builder__review-items"],["mat-flat-button","","type","button",1,"package-builder__review-cta",3,"click","disabled"],[1,"package-builder__review-icon"],[1,"hidden"],[3,"resultChange","options","trip","cacheMode"],[3,"options","trip","point","pointTo","cacheMode"],[3,"options","trip","point","pointTo","cacheMode","resultChange",4,"ngIf"],[3,"resultChange","options","trip","point","pointTo","cacheMode"]],template:function(t,i){t&1&&(r(0,"main",1),x(1,Ji,12,7,"section",2)(2,Pr,81,44),o(),x(3,ia,85,33,"dialog",3)(4,aa,2,3)(5,da,5,4,"div",4)),t&2&&(l(),f(i.view.builderStarted?2:1),l(2),f(i.view.searchAreaModalOpen&&i.view.activeSearchArea?3:-1),l(),f(i.view.quoteReviewOpen?4:-1),l(),p("ngIf",i.view.builderStarted&&i.view.search&&i.view.trip&&i.view.flightSearchReady))},dependencies:[de,ce,pt,ut,_t,gt,Ce,$e,Be,Ve,Ae,Ne,Re,yt,oi,H,U,ze,zt,Ue,Mt,X,Y,xe,pi,ui,li,si,_i,gi,mi,Qt,$t,ci,ti,Nt,Ge,Qe,We,je,Kt,Ze,Wt,Gt,ei,ii,Zt,et,di,St,kt],styles:[`.package-builder{--builder-ink: #23282f;--builder-muted: #717884;--builder-line: #e3e6ea;--builder-surface: #f4f5f7;--builder-accent: #d97706;--builder-accent-soft: #fff3dc;--builder-panel: #ffffff;min-height:100%;color:var(--builder-ink)}.package-builder h1,.package-builder h2,.package-builder h3,.package-builder p{margin:0}.package-builder .mat-mdc-unelevated-button.mat-primary,.package-builder .mat-mdc-raised-button.mat-primary{background-color:var(--builder-ink)!important;color:#fff!important;box-shadow:none!important}.package-builder .mat-mdc-unelevated-button.mat-primary:disabled,.package-builder .mat-mdc-raised-button.mat-primary:disabled{background-color:#dcdfe3!important;color:#8b929c!important}.package-builder h1{font-size:clamp(2rem,4vw,3.75rem);line-height:1.02;letter-spacing:-.05em;font-weight:700}.package-builder h2{font-size:1.35rem;line-height:1.2;letter-spacing:-.02em;font-weight:650}.package-builder__start{min-height:calc(100dvh - 7rem);padding:2rem clamp(1rem,4vw,4rem) 2.5rem;background:var(--builder-surface)}.package-builder__start-header{width:min(100%,88rem);margin:0 auto 1.5rem}.package-builder__start-header p{max-width:48rem;margin-top:.65rem;color:var(--builder-muted);font-size:.95rem;line-height:1.55}.package-builder__start-header h1{font-size:clamp(1.85rem,3vw,2.6rem);line-height:1.08;letter-spacing:-.04em}.package-builder__eyebrow,.package-builder__stop-type{display:block;margin-bottom:.45rem;color:var(--builder-accent);font-size:.7rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase}.package-builder__route-composer{width:min(100%,88rem);min-width:0;margin:0 auto;border:1px solid rgba(35,40,47,.08);border-radius:1rem;background:var(--builder-panel);box-shadow:0 .85rem 2.2rem #20354d12}.package-builder__resume{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;gap:.8rem;align-items:center;width:min(100%,88rem);margin:0 auto 1rem;padding:.85rem 1rem;border:1px solid #e5c58f;border-radius:.8rem;background:#fff8ec}.package-builder__resume p{margin-top:.15rem;color:#6e5b3f;font-size:.75rem}.package-builder__resume-primary{min-height:2.4rem;border-radius:.6rem!important;background:var(--builder-ink)!important;color:#fff!important;font-size:.78rem;font-weight:700;box-shadow:none!important}.package-builder__resume-secondary{min-height:2.4rem;border-radius:.6rem!important;color:#87520a!important;font-size:.78rem;font-weight:650}.package-builder__resume-icon{display:grid;width:2.25rem;height:2.25rem;place-items:center;border-radius:.6rem;background:#f2dfbd;color:#87520a}.package-builder__resume-icon .mat-icon{width:1.1rem;height:1.1rem}.package-builder__header{display:flex;align-items:center;justify-content:space-between;gap:1.25rem;padding:.8rem clamp(1rem,3vw,3rem);border-bottom:1px solid var(--builder-line);background:radial-gradient(circle at 88% 0,rgba(217,119,6,.08),transparent 22rem),#fff}.package-builder__header p{max-width:48rem;margin-top:.15rem;color:var(--builder-muted);font-size:.78rem}.package-builder__header .package-builder__eyebrow{margin-bottom:.1rem;font-size:.62rem}.package-builder__header h1{font-size:clamp(1.2rem,2vw,1.55rem);letter-spacing:-.025em}.package-builder__header-copy{display:flex;align-items:center;gap:1rem;min-width:0}.package-builder__back{flex:0 0 auto;border-right:1px solid var(--builder-line);border-radius:0;padding-right:1rem}.package-builder__header-status{display:flex;align-items:center;gap:.55rem;color:var(--builder-muted);font-size:.82rem;white-space:nowrap}.package-builder__header-tools{display:flex;flex-wrap:wrap;justify-content:flex-end;
1gap:.65rem}.package-builder__header-tools .mat-icon{margin-right:.35rem}.package-builder__status-dot{width:.55rem;height:.55rem;border-radius:50%;background:#16a36a}.package-builder__status-dot--active{background:#e8a51d;animation:builder-pulse 1.4s ease-in-out infinite}.package-builder__drawer-container{min-height:calc(100vh - 14rem);overflow:visible;background:radial-gradient(circle at 100% 0,rgba(217,119,6,.055),transparent 28rem),var(--builder-surface)}.package-builder__drawer-container .mat-drawer-content{overflow:visible!important}.package-builder__selection-drawer{width:min(29rem,92vw);padding:0;border-left:1px solid var(--builder-line)}.package-builder__drawer-header{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;padding:1.05rem 1.15rem;border-bottom:1px solid var(--builder-line)}.package-builder__drawer-body{display:grid;gap:.85rem;padding:1.1rem 1.15rem 1.35rem}.package-builder__drawer-body p{color:var(--builder-muted);line-height:1.6}.package-builder__drawer-intro{font-size:.82rem}.package-builder__current-selection{display:grid;gap:.2rem;padding:.8rem .9rem;border-left:3px solid #0c7151;border-radius:.55rem;background:#eef8f4}.package-builder__current-selection span,.package-builder__current-selection small{color:#557169;font-size:.72rem}.package-builder__current-selection strong{font-size:.9rem}.package-builder__area-shortcut{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:.7rem;padding:.75rem .8rem;border:1px solid #e1e4e8;border-radius:.7rem;background:#f8fafb}.package-builder__area-shortcut>.mat-icon{color:var(--builder-accent)}.package-builder__area-shortcut span{display:grid;min-width:0}.package-builder__area-shortcut strong{font-size:.78rem}.package-builder__area-shortcut small{color:var(--builder-muted);font-size:.68rem;line-height:1.4}.package-builder__area-backdrop{--builder-ink: #23282f;--builder-muted: #717884;--builder-line: #e3e6ea;--builder-accent: #d97706;--builder-accent-soft: #fff3dc;position:fixed;inset:0;display:none;box-sizing:border-box;width:100vw;max-width:none;height:100dvh;max-height:none;margin:0;padding:1.25rem;overflow:hidden;border:0;background:transparent;place-items:center}.package-builder__area-backdrop[open]{display:grid}.package-builder__area-backdrop::backdrop{background:#08111eb8;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.package-builder__area-dialog{display:grid;grid-template-rows:auto minmax(0,1fr) auto;width:min(100%,86rem);height:min(50rem,100dvh - 2.5rem);overflow:hidden;border:1px solid var(--builder-line);border-radius:1rem;background:#fff;color:var(--builder-ink);box-shadow:0 1.8rem 4.5rem #08111e57}.package-builder__area-dialog>header{display:flex;align-items:flex-start;justify-content:space-between;gap:1.5rem;padding:1.15rem 1.3rem;border-bottom:1px solid var(--builder-line)}.package-builder__area-dialog>header>div{min-width:0}.package-builder__area-dialog>header h2{margin-top:.15rem;font-size:1.2rem;letter-spacing:-.02em}.package-builder__area-dialog>header p{max-width:70ch;margin-top:.3rem;color:var(--builder-muted);font-size:.78rem;line-height:1.5}.package-builder__area-dialog>footer{position:relative;z-index:2;display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:.7rem;padding:.9rem 1.3rem;border-top:1px solid var(--builder-line);background:#fff}.package-builder__area-dialog-body{display:grid;min-height:0;grid-template-columns:minmax(0,1fr) 24rem}.package-builder__area-map-stage{position:relative;min-height:26rem;overflow:hidden;background:#dfe8ec}.package-builder__area-map-hint{position:absolute;z-index:1;top:.8rem;left:50%;display:flex;padding:.45rem .65rem;align-items:center;gap:.4rem;border:1px solid rgba(255,255,255,.78);border-radius:.55rem;background:#23282fe0;color:#fff;font-size:.7rem;font-weight:650;transform:translate(-50%);box-shadow:0 .5rem 1.2rem #23282f33;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);pointer-events:none}.package-builder__area-map-hint .mat-icon{width:1rem;height:1rem}.package-builder__area-controls{display:grid;align-content:start;gap:1rem;min-width:0;overflow-y:auto;padding:1.2rem;border-left:1px solid var(--builder-line);background:#f8fafb}
1.package-builder__area-location{display:flex;align-items:flex-start;gap:.65rem;min-width:0;padding:.85rem;border:1px solid #e1e4e8;border-radius:.7rem;background:#fff}.package-builder__area-location>.mat-icon{flex:0 0 auto;width:1.15rem;height:1.15rem;margin-top:.1rem;color:var(--builder-accent)}.package-builder__area-location span,.package-builder__area-location strong,.package-builder__area-location small,.package-builder__area-location em{display:block;min-width:0}.package-builder__area-location small{margin-bottom:.18rem;color:var(--builder-muted);font-size:.65rem}.package-builder__area-location strong{overflow-wrap:anywhere;font-size:.8rem;line-height:1.4}.package-builder__area-location em{margin-top:.28rem;color:#8a929e;font-size:.64rem;font-style:normal;font-variant-numeric:tabular-nums}.package-builder__area-radius{display:grid;gap:.65rem}.package-builder__area-radius>div:first-child{display:grid;gap:.12rem}.package-builder__area-radius>div:first-child span{font-size:.76rem;font-weight:700}.package-builder__area-radius>div:first-child small{color:var(--builder-muted);font-size:.67rem;line-height:1.4}.package-builder__area-radius>div:last-child{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.4rem}.package-builder__area-radius button{padding:.52rem .45rem;border:1px solid #d6dade;border-radius:.55rem;background:#fff;color:#34465d;font-size:.7rem;font-weight:700;cursor:pointer;transition:border-color .18s ease,background-color .18s ease,transform .18s ease}.package-builder__area-radius button:hover{border-color:#9caeba;transform:translateY(-1px)}.package-builder__area-radius button:active{transform:translateY(0)}.package-builder__area-radius button:focus-visible{outline:2px solid rgba(217,119,6,.45);outline-offset:2px}.package-builder__area-radius button.is-active{border-color:var(--builder-accent);background:var(--builder-accent-soft);color:#8a4d04}.package-builder__area-guidance,.package-builder__area-status{display:flex;align-items:flex-start;gap:.5rem;color:#5f6873;font-size:.7rem;line-height:1.5}.package-builder__area-guidance .mat-icon,.package-builder__area-status .mat-icon{flex:0 0 auto;width:1.05rem;height:1.05rem;color:var(--builder-accent)}.package-builder__area-status{align-items:center}.package-builder__area-status-spinner{width:.85rem;height:.85rem;border:2px solid #ead7bd;border-top-color:var(--builder-accent);border-radius:50%;animation:builder-spin .8s linear infinite}.package-builder__area-error{padding:.65rem .7rem;border:1px solid #fecaca;border-radius:.55rem;background:#fef2f2;color:#b42318;font-size:.7rem;line-height:1.45}.package-builder__map-results{display:grid;gap:.65rem;padding-top:.95rem;border-top:1px solid var(--builder-line)}.package-builder__map-results>header{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.package-builder__map-results>header>div{display:grid;gap:.1rem}.package-builder__map-results>header span{font-size:.76rem;font-weight:750}.package-builder__map-results>header small{color:var(--builder-muted);font-size:.66rem}.package-builder__map-filters{display:grid;gap:.7rem}.package-builder__map-search{display:flex;align-items:center;gap:.5rem;min-width:0;padding:.55rem .7rem;border:1px solid #d6dade;border-radius:.6rem;background:#fff}.package-builder__map-search .mat-icon{flex:0 0 auto;width:1.05rem;height:1.05rem;color:var(--builder-muted)}.package-builder__map-search input{min-width:0;width:100%;border:0;background:transparent;color:var(--builder-ink);font-size:.78rem;outline:none}.package-builder__map-search input::placeholder{color:#9aa3ad}.package-builder__map-search:focus-within{border-color:var(--builder-accent);box-shadow:0 0 0 3px #d977061f}.package-builder__map-filter-row{display:grid;gap:.35rem}.package-builder__map-filter-row>span{color:var(--builder-muted);font-size:.62rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase}.package-builder__map-filter-row>div{display:flex;flex-wrap:wrap;gap:.35rem}.package-builder__map-filter-row button{padding:.38rem .55rem;border:1px solid #d6dade;border-radius:999px;background:#fff;color:#34465d;font-size:.66rem;font-weight:700;cursor:pointer;transition:border-color .16s ease,background-color .16s ease}.package-builder__map-filter-row button:hover{border-color:#9caeba}.package-builder__map-filter-row button:focus-visible{outline:2px solid rgba(217,119,6,.45);outline-offset:2px}.package-builder__map-filter-row button.is-active{border-color:var(--builder-accent);background:var(--builder-accent-soft);color:#8a4d04}.package-builder__map-filter-clear{justify-self:start;padding:0;border:0;background:transparent;color:#8a4d04;font-size:.68rem;font-weight:700;cursor:pointer}.package-builder__map-filter-clear:hover{text-decoration:underline}.package-builder__map-results-more{color:var(--builder-muted);font-size:.66rem;line-height:1.45}.package-builder__map-results-empty{display:grid;gap:.2rem;padding:.85rem;border:1px dashed #d7dce2;border-radius:.7rem;background:#fff}.package-builder__map-results-empty strong{font-size:.76rem}.package-builder__map-results-empty small{color:var(--builder-muted);font-size:.67rem;line-height:1.45}.package-builder__map-property-list{display:grid;gap:.5rem}.package-builder__map-property{position:relative;display:grid;grid-template-columns:3.35rem minmax(0,1fr) auto;min-width:0;padding:.5rem;align-items:center;gap:.6rem;border:1px solid #dde2e7;border-radius:.7rem;background:#fff;color:var(--builder-ink);text-align:left;cursor:pointer;transition:border-color .16s ease,box-shadow .16s ease,transform .16s ease}.package-builder__map-property:hover{border-color:#b8c0c8;transform:translateY(-1px);box-shadow:0 .4rem 1rem #23282f14}.package-builder__map-property:focus-visible{outline:2px solid rgba(217,119,6,.42);outline-offset:2px}.package-builder__map-property.is-selected{border-color:var(--builder-accent);background:#fffbf4;box-shadow:0 0 0 1px #d977061f}.package-builder__map-property.is-checking{cursor:default;opacity:.82}.package-builder__map-property.is-checking>b{color:var(--builder-muted);font-weight:500}.package-builder__map-property>img,.package-builder__map-property .package-builder__map-property-placeholder{width:3.35rem;height:3.35rem;border-radius:.5rem}.package-builder__map-property>img{object-fit:cover;background:#eef1f3}.package-builder__map-property>span:nth-child(2){display:grid;min-width:0;gap:.12rem}.package-builder__map-property>span:nth-child(2) strong{overflow:hidden;font-size:.72rem;line-height:1.35;text-overflow:ellipsis;white-space:nowrap}.package-builder__map-property>span:nth-child(2) small,.package-builder__map-property>span:nth-child(2) em{overflow:hidden;color:var(--builder-muted);font-size:.62rem;font-style:normal;line-height:1.35;text-overflow:ellipsis;white-space:nowrap}.package-builder__map-property>b{padding-right:.25rem;color:#8a4d04;font-size:.72rem;white-space:nowrap}.package-builder__map-property-placeholder{display:grid;background:#edf1f3;color:#73808b;place-items:center}.package-builder__map-property-placeholder .mat-icon{width:1.15rem;height:1.15rem}.package-builder__map-property-selected{position:absolute;top:-.35rem;right:-.35rem;width:1.1rem;height:1.1rem;border-radius:50%;background:#fff;color:var(--builder-accent)}@media (max-width: 799px){.package-builder__area-backdrop{padding:0}.package-builder__area-dialog{width:100%;height:100dvh;border:0;border-radius:0}.package-builder__area-dialog>footer{grid-template-columns:auto minmax(0,1fr) auto}.package-builder__area-dialog>footer>button:last-child{grid-column:1/-1}.package-builder__area-dialog-body{grid-template-columns:1fr;grid-template-rows:minmax(18rem,1fr) auto;overflow-y:auto}.package-builder__area-map-stage{min-height:18rem}.package-builder__area-controls{overflow:visible;border-top:1px solid var(--builder-line);border-left:0}}.package-builder__candidate-heading{display:flex;align-items:center;justify-content:space-between;gap:1rem}.package-builder__candidate-heading strong{font-size:.85rem}.package-builder__candidate-heading span{color:var(--builder-muted);font-size:.72rem}.package-builder__candidate-list{display:grid;gap:.7rem}.package-builder__candidate{display:grid;gap:.25rem;width:100%;padding:.85rem .9rem;border:1px solid var(--builder-line);border-radius:.85rem;background:#fff;color:var(--builder-ink);text-align:left;cursor:pointer;transition:border-color .16s ease,box-shadow .16s ease,transform .16s ease}.package-builder__candidate:hover{border-color:#7ba9bb;box-shadow:0 .65rem 1.5rem #10233f17;transform:translateY(-1px)}.package-builder__candidate:active{transform:translateY(0)}.package-builder__candidate b{color:var(--builder-accent);font-size:1rem;font-variant-numeric:tabular-nums}.package-builder__candidate footer{display:flex;align-items:center;justify-content:space-between;gap:.75rem;margin-top:.45rem;padding-top:.55rem;border-top:1px solid #eceef1}.package-builder__candidate--selected{border-color:var(--builder-accent);box-shadow:inset 0 0 0 1px var(--builder-accent);cursor:default}.package-builder__candidate--selected:hover{box-shadow:inset 0 0 0 1px var(--builder-accent);transform:none}
1.package-builder__candidate-rank{color:#0c7151;font-size:.7rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase}.package-builder__candidate-context,.package-builder__candidate-provider{color:var(--builder-muted);font-size:.72rem}.package-builder__candidate-provider{margin-top:.1rem}.package-builder__candidate-action{display:inline-flex;align-items:center;gap:.25rem;color:#275f75;font-size:.72rem;font-weight:700}.package-builder__candidate-action .mat-icon{width:.9rem;height:.9rem}.package-builder__drawer-empty{padding:.9rem 1rem;border:1px dashed #b8c6d5;border-radius:.75rem;background:var(--builder-surface);color:var(--builder-muted);font-size:.84rem;line-height:1.5}.package-builder__layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(16rem,20rem);align-items:start;gap:clamp(1rem,2vw,2rem);width:min(100%,96rem);margin:0 auto;padding:1rem clamp(1rem,3vw,3rem) 5rem}.package-builder__workspace{min-width:0}.package-builder__provider-progress{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;overflow:hidden;margin-bottom:1rem;border:1px solid rgba(35,40,47,.08);border-radius:.9rem;background:#23282f14;box-shadow:0 .55rem 1.4rem #20354d0e}.package-builder__provider-progress>div{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.1rem .55rem;align-items:center;padding:.55rem .7rem;background:#fff;color:var(--builder-muted)}.package-builder__provider-progress>div .mat-icon{grid-row:1/3;width:1.25rem;height:1.25rem}.package-builder__provider-progress>div span{font-size:.72rem;font-weight:650}.package-builder__provider-progress>div strong{color:var(--builder-ink);font-size:.78rem}.package-builder__provider-progress>div.is-ready{color:#0c7151}.package-builder__provider-progress>div.is-ready strong{color:#0c7151}.package-builder__progress,.package-builder__timeline,.package-builder__options{padding:clamp(1rem,1.5vw,1.35rem);border:1px solid rgba(35,40,47,.08);border-radius:1.25rem;background:#fff;box-shadow:0 1rem 2.5rem #20354d11}.package-builder__progress{margin-bottom:1rem;padding:.85rem 1rem}.package-builder__progress>button{min-height:2.1rem;margin-top:.35rem;padding-inline:.75rem}.package-builder__progress-heading{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:.75rem;margin-bottom:.65rem}.package-builder__progress-heading p{margin-top:.12rem;color:var(--builder-muted);font-size:.74rem}.package-builder__progress-heading>strong{color:var(--builder-accent);font-size:.9rem;font-variant-numeric:tabular-nums;white-space:nowrap}.package-builder__progress-orbit{display:grid;width:2.35rem;height:2.35rem;place-items:center;border-radius:.75rem;background:var(--builder-accent-soft);color:var(--builder-accent)}.package-builder__progress-orbit .mat-icon{width:1.25rem;height:1.25rem;animation:builder-search-flight 1.8s cubic-bezier(.16,1,.3,1) infinite}.package-builder__progress-meter{overflow:hidden;height:.24rem;margin-bottom:.55rem;border-radius:999px;background:#eceef1}.package-builder__progress-meter span{display:block;width:100%;height:100%;border-radius:inherit;background:var(--builder-accent);transform-origin:left center;transition:transform .3s cubic-bezier(.16,1,.3,1)}.package-builder__progress-context{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.65rem;align-items:start;margin-bottom:.7rem;padding:.8rem .9rem;border-radius:.65rem;background:#f4f7f9;color:#536477;font-size:.78rem;line-height:1.45}.package-builder__progress-context .mat-icon{width:1rem;height:1rem;margin-top:.1rem;color:#0c7151}.package-builder__progress-row{display:flex;align-items:center;gap:.65rem;min-height:2rem;padding:.35rem 0;border-top:1px solid var(--builder-line);color:var(--builder-muted);font-size:.75rem}.package-builder__progress-row--active .mat-icon{color:var(--builder-accent);animation:builder-spin 1s linear infinite}.package-builder__slow-search,.package-builder__search-error{display:grid;gap:.2rem;margin:.8rem 0;padding:.8rem .9rem;border-radius:.65rem;background:#fff7e8;color:#7a4a09;font-size:.78rem}.package-builder__search-error{background:#fff0ef;color:#a02a27}.package-builder__section-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;margin-bottom:.9rem}.package-builder__section-heading small{display:block;margin-top:.25rem;color:var(--builder-muted);font-size:.73rem}.package-builder__recommendation-label{max-width:18rem;color:#7a591d;font-size:.78rem;font-weight:650;text-align:right}.package-builder__stop{position:relative;display:grid;grid-template-columns:1.9rem minmax(0,1fr);gap:.7rem}.package-builder__rail{position:relative;display:flex;justify-content:center}.package-builder__rail:after{position:absolute;top:2.25rem;bottom:-1.1rem;width:1px;background:var(--builder-line);content:""}.package-builder__rail span{z-index:1;display:grid;width:1.9rem;height:1.9rem;place-items:center;border:1px solid #3b4149;border-radius:.6rem;background:var(--builder-ink);color:#fff;font-size:.8rem;font-weight:700}.package-builder__stop-content{margin-bottom:.45rem;padding:.8rem .9rem .9rem;border:1px solid #e9ebee;border-radius:.9rem;background:#fbfcfd;transition:border-color .2s cubic-bezier(.22,1,.36,1),box-shadow .2s cubic-bezier(.22,1,.36,1)}.package-builder__stop-content:hover{border-color:#d1dae3;box-shadow:0 .7rem 1.6rem #20354d0e}.package-builder__stop[data-point-state=searching] .package-builder__stop-content{border-color:#efd5aa;box-shadow:inset .2rem 0 #d97706}.package-builder__stop[data-point-state=searching] .package-builder__rail span{border-color:#d97706;background:#fff8ec;color:#a4560a}.package-builder__stop[data-point-state=action] .package-builder__stop-content{border-color:#e7c681;background:#fffcf6;box-shadow:inset .2rem 0 #d58a12}.package-builder__stop[data-point-state=action] .package-builder__rail span{border-color:#d58a12;background:#fff6df;
1color:#8a5a11}.package-builder__stop[data-point-state=error] .package-builder__stop-content{border-color:#ebbbb7;background:snow;box-shadow:inset .2rem 0 #c9433d}.package-builder__stop[data-point-state=error] .package-builder__rail span{border-color:#c9433d;background:#fff0ef;color:#a02a27}.package-builder__stop[data-point-state=ready] .package-builder__rail span{border-color:#1b8a63;background:#f0faf6;color:#0c7151}.package-builder__stop-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem}.package-builder__stop-heading h3{font-size:1rem;font-weight:650}.package-builder__stop-heading p{display:flex;flex-wrap:wrap;align-items:center;gap:.3rem;margin-top:.15rem;color:var(--builder-muted);font-size:.85rem}.package-builder__stop-code{padding:.08rem .4rem;border:1px solid #d8dde2;border-radius:.35rem;color:#4e5965;background:#fff;font-size:.65rem;font-weight:750;letter-spacing:.05em}.package-builder__stop-actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:.25rem}.package-builder__point-state{display:inline-flex;align-items:center;gap:.32rem;min-height:1.7rem;padding:.25rem .55rem;border:1px solid #d8dde2;border-radius:.5rem;background:#fff;color:#59636e;font-size:.68rem;font-weight:700;white-space:nowrap}.package-builder__point-state .mat-icon{width:.9rem;height:.9rem}.package-builder__point-state[data-state=ready]{border-color:#b8decf;background:#f0faf6;color:#0c7151}.package-builder__point-state[data-state=searching]{border-color:#efd5aa;background:#fff8ec;color:#a4560a}.package-builder__point-state[data-state=searching] .mat-icon{animation:builder-spin 1s linear infinite}.package-builder__point-state[data-state=queued]{background:#f4f6f8;color:#68727d}.package-builder__point-state[data-state=action]{border-color:#e9c077;background:#fff8e8;color:#8a5a11}.package-builder__point-state[data-state=error]{border-color:#ebbbb7;background:#fff1f0;color:#a02a27}.package-builder__point-state[data-state=excluded]{border-style:dashed;background:#f4f6f8;color:#68727d}.package-builder__stay-tools{display:flex;flex-wrap:wrap;align-items:flex-end;gap:.5rem;margin-top:.6rem}.package-builder__stay-tools label{display:grid;gap:.25rem;color:var(--builder-muted);font-size:.72rem;font-weight:650}.package-builder__stay-tools input{width:4rem;height:2.25rem;padding:0 .65rem;border:1px solid #d0d4d9;border-radius:.55rem;background:#fff;color:var(--builder-ink)}.package-builder__stop-nights{margin-left:.5rem;padding:.1rem .45rem;border-radius:.4rem;background:var(--builder-surface);color:var(--builder-muted);font-size:.72rem;font-weight:650}.package-builder__point-note{margin-top:.5rem;color:var(--builder-muted);font-size:.8rem}.package-builder__ground{margin-top:.7rem;padding:.75rem;border:1px solid rgba(35,40,47,.1);border-radius:.8rem;background:#fff}.package-builder__ground-heading{display:flex;flex-wrap:wrap;align-items:baseline;gap:.5rem}.package-builder__ground-heading small{color:var(--builder-muted);font-size:.75rem}.package-builder__ground-options{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.5rem;margin-top:.55rem}.package-builder__ground-option{display:grid;grid-template-columns:auto minmax(0,1fr);grid-template-areas:"icon label" "icon price";gap:0 .55rem;align-items:center;padding:.6rem .7rem;border:1px solid #d8dce1;border-radius:.7rem;background:#fff;color:var(--builder-ink);text-align:left;cursor:pointer;transition:border-color .15s ease,background-color .15s ease}.package-builder__ground-option mat-icon{grid-area:icon;width:1.15rem;height:1.15rem;color:var(--builder-muted)}.package-builder__ground-option span{grid-area:label;font-size:.82rem;font-weight:650}.package-builder__ground-option b{grid-area:price;color:var(--builder-muted);font-size:.76rem;font-weight:600;font-variant-numeric:tabular-nums}.package-builder__ground-option:hover{border-color:#b9bfc7;background:var(--builder-surface)}.package-builder__ground-option.is-active{border-color:#d97706;background:#fff8ec}.package-builder__ground-option.is-active mat-icon,.package-builder__ground-option.is-active b{color:#a4560a}.package-builder__selection-line{position:relative;display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-top:.55rem;overflow:hidden;padding:.7rem .8rem .7rem 1rem;border:1px solid #e4e8ec;border-radius:.75rem;background:#fff;font-variant-numeric:tabular-nums}.package-builder__selection-line:before{position:absolute;inset:0 auto 0 0;width:.2rem;content:"";background:#dba24d}.package-builder__selection-line div{display:grid;gap:.15rem}.package-builder__selection-line span{color:var(--builder-muted);font-size:.68rem;font-weight:750;letter-spacing:.065em;text-transform:uppercase}.package-builder__selection-line small{color:#a44713;font-size:.72rem}
1.package-builder__selection-line small.is-saving{color:#0c7151}.package-builder__selection-line small.is-warning{color:#a4560a}.package-builder__selection-line[data-service-state=ready]:before{background:#1b8a63}.package-builder__selection-line[data-service-state=searching]:before{background:#d97706;animation:builder-pulse 1.4s ease-in-out infinite}.package-builder__selection-line[data-service-state=queued]:before,.package-builder__selection-line[data-service-state=excluded]:before{background:#9ba4ad}.package-builder__selection-line[data-service-state=action]:before{background:#d58a12}.package-builder__selection-line[data-service-state=error]:before{background:#c9433d}.package-builder__selection-line[data-service-state=searching]{border-color:#efd5aa;background:#fffdf8}.package-builder__selection-line[data-service-state=action]{border-color:#e7c681;background:#fffbf2}.package-builder__selection-line[data-service-state=error]{border-color:#ebbbb7;background:#fff8f7}.package-builder__service-context{color:var(--builder-muted)!important;font-size:.72rem!important;font-weight:500!important;letter-spacing:normal!important;line-height:1.45;text-transform:none!important}.package-builder__selection-line.is-excluded{border-style:dashed;background:#f5f7f9;color:#717884}.package-builder__selection-line.is-excluded strong{text-decoration:line-through;text-decoration-thickness:1px}.package-builder__missing-service{display:flex;align-items:center;justify-content:space-between;gap:.55rem;margin-top:.65rem;padding:.75rem .8rem;border:1px dashed #d5a04d;border-radius:.75rem;background:#fffaf0}.package-builder__missing-service>div{display:grid;min-width:0;gap:.12rem}.package-builder__missing-service>div span{color:#8a5a11;font-size:.67rem;font-weight:750;letter-spacing:.065em;text-transform:uppercase}.package-builder__missing-service>div small{color:var(--builder-muted);font-size:.72rem}.package-builder__missing-service[data-service-state=searching]{border-style:solid;border-color:#efd5aa;background:#fffdf8}.package-builder__missing-service[data-service-state=error]{border-style:solid;border-color:#ebbbb7;background:#fff8f7}.package-builder__recovery{display:grid;gap:.8rem;margin-bottom:.85rem;padding:.9rem;border:1px solid #edb15d;border-radius:.8rem;background:#fff8eb}.package-builder__recovery>div:first-child{display:flex;align-items:flex-start;gap:.65rem}.package-builder__recovery .mat-icon{flex:0 0 auto;color:#b95f00}.package-builder__recovery span,.package-builder__recovery small{display:block}.package-builder__recovery small{margin-top:.2rem;color:#6b5843;font-size:.78rem;line-height:1.45}.package-builder__recovery-actions{display:flex;flex-wrap:wrap;gap:.45rem}.package-builder__selection-actions{display:flex!important;grid-auto-flow:column;align-items:center;gap:.65rem!important}.package-builder__leg{display:grid;grid-template-columns:1.9rem minmax(0,1fr) auto;align-items:center;gap:.7rem;margin:0 0 .55rem 2.6rem;padding:.65rem .7rem;border:1px solid #e2e6ea;border-radius:.8rem;background:#fff;box-shadow:0 .35rem 1rem #23282f09;transition:border-color .18s cubic-bezier(.22,1,.36,1),background .18s cubic-bezier(.22,1,.36,1)}.package-builder__leg:hover{border-color:#e1e7ec;background:#f8fafb}.package-builder__leg[data-service-state=ready]{box-shadow:inset .2rem 0 #1b8a63,0 .35rem 1rem #23282f09}.package-builder__leg[data-service-state=searching]{border-color:#efd5aa;background:#fffdf8;box-shadow:inset .2rem 0 #d97706,0 .35rem 1rem #23282f09}.package-builder__leg[data-service-state=queued],.package-builder__leg[data-service-state=excluded]{box-shadow:inset .2rem 0 #9ba4ad,0 .35rem 1rem #23282f09}.package-builder__leg[data-service-state=action]{border-color:#e7c681;background:#fffbf2;box-shadow:inset .2rem 0 #d58a12,0 .35rem 1rem #23282f09}.package-builder__leg[data-service-state=error]{border-color:#ebbbb7;background:#fff8f7;box-shadow:inset .2rem 0 #c9433d,0 .35rem 1rem #23282f09}.package-builder__leg-icon{display:grid;width:1.9rem;height:1.9rem;place-items:center;border-radius:50%;border:1px solid #efd5aa;background:#fff7e9;color:#a65c08}.package-builder__leg-actions{display:flex;align-items:center;gap:.2rem}.package-builder__leg-button{display:grid;min-width:0;padding:.25rem 0;border:0;background:transparent;color:inherit;text-align:left;cursor:pointer}.package-builder__leg-button:disabled{cursor:default}.package-builder__leg-button span{color:var(--builder-muted);font-size:.7rem;font-weight:700;letter-spacing:.09em;text-transform:uppercase}.package-builder__leg-button strong{overflow:hidden;margin-top:.15rem;text-overflow:ellipsis;white-space:nowrap}.package-builder__leg-button .package-builder__leg-route{color:var(--builder-ink);font-size:.95rem;font-weight:750;letter-spacing:-.015em}.package-builder__leg-button small{margin-top:.15rem;
1color:#0c7151;font-size:.72rem}.package-builder__leg-button .package-builder__leg-price{margin-top:.25rem;color:var(--builder-ink);font-size:.82rem;font-variant-numeric:tabular-nums}.package-builder__leg-button .is-saving{color:#0c7151}.package-builder__service-state{display:inline-grid!important;grid-template-columns:auto minmax(0,1fr);align-items:center;justify-self:start;gap:.4rem!important;width:fit-content;max-width:min(100%,34rem);margin-top:.28rem;padding:.34rem .48rem;border:1px solid #d8dde2;border-radius:.48rem;background:#f7f8f9;color:#59636e!important;font-size:.7rem!important;font-weight:600!important;letter-spacing:normal!important;line-height:1.25;text-transform:none!important}.package-builder__service-state>.mat-icon{width:1rem;height:1rem}.package-builder__service-state>span{display:grid!important;gap:.04rem!important;min-width:0;color:inherit!important;font-size:inherit!important;font-weight:inherit!important;letter-spacing:normal!important;text-transform:none!important}.package-builder__service-state>span b{color:inherit;font-size:.7rem;font-weight:750}.package-builder__service-state>span small{overflow:hidden;color:#68727d!important;font-size:.68rem!important;font-weight:500!important;letter-spacing:normal!important;line-height:1.3;text-overflow:ellipsis;text-transform:none!important;white-space:normal}.package-builder__service-state[data-state=ready]{border-color:#b8decf;background:#f0faf6;color:#0c7151!important}.package-builder__service-state[data-state=searching]{border-color:#efd5aa;background:#fff8ec;color:#a4560a!important}.package-builder__service-state[data-state=searching]>.mat-icon{animation:builder-spin 1s linear infinite}.package-builder__service-state[data-state=queued]{background:#f1f3f5;color:#68727d!important}.package-builder__service-state[data-state=action]{border-color:#e9c077;background:#fff6df;color:#8a5a11!important}.package-builder__service-state[data-state=error]{border-color:#ebbbb7;background:#fff0ef;color:#a02a27!important}.package-builder__service-state[data-state=excluded]{border-style:dashed;background:#f1f3f5;color:#68727d!important}.package-builder__inline-notice{margin:1rem 0;padding:.9rem 1rem;border-left:3px solid #e8a51d;background:#fff8e8;color:#735613;font-size:.85rem}.package-builder__custom-services{display:grid;gap:.9rem;margin-top:1.5rem;padding-top:1.5rem;border-top:1px solid var(--builder-line)}.package-builder__custom-services h3{font-size:1rem;font-weight:650}.package-builder__custom-form{display:grid;grid-template-columns:minmax(12rem,1fr) minmax(7rem,.35fr) minmax(9rem,.4fr) auto;gap:.65rem}.package-builder__custom-form input{min-width:0;height:2.75rem;padding:0 .75rem;border:1px solid #d0d4d9;border-radius:.6rem;background:#fff;color:var(--builder-ink)}.package-builder__options{margin-top:1.5rem}.package-builder__options-intro{max-width:48rem;color:var(--builder-muted);line-height:1.55}.package-builder__options--collapsed .package-builder__section-heading{margin-bottom:.65rem}.package-builder__options--collapsed .package-builder__inventory{display:none}.package-builder__summary{position:sticky;top:1rem;z-index:4;align-self:start;display:grid;max-height:calc(100vh - 8rem);gap:.85rem;overflow-y:auto;padding:1.35rem;border:1px solid rgba(255,255,255,.08);border-radius:1.1rem;background:radial-gradient(circle at 100% 0,rgba(217,119,6,.28),transparent 15rem),var(--builder-ink);color:#fff;box-shadow:0 1.4rem 3rem #23282f3d;font-variant-numeric:tabular-nums}.package-builder__summary .package-builder__eyebrow{color:#f0bd77}.package-builder__summary p,.package-builder__summary small{color:#c8ccd2}.package-builder__summary dl{display:grid;gap:.55rem;margin:.25rem 0}.package-builder__summary dl div{display:flex;justify-content:space-between;gap:1rem}.package-builder__summary dt{color:#c8ccd2}.package-builder__summary dd{margin:0}.package-builder__summary .package-builder__summary-link{color:#f0bd77}.package-builder__summary .package-builder__summary-cta{min-height:2.8rem;border-radius:.7rem!important;background:#e58b0a!important;color:#23282f!important;font-size:.85rem;font-weight:750;box-shadow:none!important}.package-builder__summary .package-builder__summary-cta:disabled{background:#ffffff1a!important;color:#ffffff8c!important}.package-builder__review-cta{min-height:2.7rem;border-radius:.7rem!important;background:#e58b0a!important;color:#23282f!important;font-size:.82rem;font-weight:750;box-shadow:none!important}.package-builder__review-cta:disabled{background:#ead9c2!important;color:#8d7f6c!important}.package-builder__review-backdrop{--builder-ink: #23282f;--builder-muted: #717884;--builder-line: #e3e6ea;--builder-accent: #d97706;--builder-accent-soft: #fff3dc;position:fixed;z-index:120;inset:0;display:grid;overflow-y:auto;padding:2rem 1rem;background:#08111eb8;place-items:center;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.package-builder__review{width:min(100%,52rem);max-height:calc(100dvh - 4rem);overflow-y:auto;border:1px solid #e3e6ea;border-radius:1rem;background:#fff;color:var(--builder-ink);box-shadow:0 1.8rem 4.5rem #08111e57}.package-builder__review>header{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;padding:1.25rem 1.35rem;border-bottom:1px solid var(--builder-line)}.package-builder__review>header p{margin-top:.35rem;color:var(--builder-muted)}.package-builder__review>footer{position:sticky;bottom:0;display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:.75rem;padding:1rem 1.35rem;border-top:1px solid var(--builder-line);background:#fff}.package-builder__review>footer>div{display:grid}.package-builder__review>footer span{color:var(--builder-muted);font-size:.75rem}.package-builder__review>footer strong{font-size:1.35rem;font-variant-numeric:tabular-nums}.package-builder__review-summary{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;border-bottom:1px solid var(--builder-line);background:var(--builder-line)}.package-builder__review-summary>div{display:grid;gap:.25rem;padding:.85rem 1rem;background:#f8fafb}.package-builder__review-summary span{color:var(--builder-muted);font-size:.72rem}.package-builder__review-summary strong{font-size:.82rem;line-height:1.4}.package-builder__review-items{display:grid;padding:.4rem 1.35rem 1rem}.package-builder__review-items article{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:.8rem;padding:.85rem 0;border-bottom:1px solid #edf0f2}.package-builder__review-items article>div{display:grid;min-width:0}.package-builder__review-items article>div>span{color:var(--builder-accent);font-size:.68rem;font-weight:700;text-transform:uppercase}.package-builder__review-items small{color:var(--builder-muted)}.package-builder__review-items b{font-variant-numeric:tabular-nums}.package-builder__review-icon{display:grid;width:2.2rem;height:2.2rem;place-items:center;border-radius:.65rem;background:var(--builder-accent-soft);color:var(--builder-accent)}.package-builder__total{font-size:clamp(1.7rem,3vw,2.35rem);font-weight:700;letter-spacing:-.035em}
1.package-builder__health{display:grid;gap:.45rem;padding:.85rem;border:1px solid rgba(255,184,112,.35);border-radius:.75rem;background:#b854102e}.package-builder__health>div{display:flex;align-items:center;gap:.55rem}.package-builder__health .mat-icon{width:1.2rem;height:1.2rem;color:#ffbd7a}.package-builder__health small{display:block;color:#e8d5c2;line-height:1.35}.package-builder__health-issue{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.4rem;width:100%;padding:.38rem 0;border:0;background:transparent;color:#f7e6d6;font:inherit;font-size:.75rem;line-height:1.35;text-align:left;cursor:pointer}.package-builder__health-issue:hover,.package-builder__health-issue:focus-visible{color:#fff;text-decoration:underline;text-underline-offset:.18rem}.package-builder__health-issue .mat-icon{width:1rem;height:1rem;color:currentColor}.package-builder__health--ready{border-color:#63daa559;background:#0c71513d}.package-builder__health--ready .mat-icon{color:#75d8ad}.ai-status{color:var(--builder-ink)}.ai-status-error{color:#c62828}@keyframes builder-pulse{50%{opacity:.35}}@keyframes builder-spin{to{transform:rotate(360deg)}}@keyframes builder-search-flight{0%,to{opacity:.55;transform:translate(-.25rem,.2rem)}50%{opacity:1;transform:translate(.25rem,-.2rem)}}@media (max-width: 1023px){.package-builder__layout{grid-template-columns:minmax(0,1fr)}.package-builder__summary{position:static}.package-builder__custom-form,.package-builder__provider-progress{grid-template-columns:1fr 1fr}}@media (max-width: 639px){.package-builder__review-backdrop{align-items:end;padding:0}.package-builder__review{max-height:92dvh;border-radius:1rem 1rem 0 0}.package-builder__review>footer{grid-template-columns:1fr}.package-builder__review>footer button{width:100%}.package-builder__review-summary{grid-template-columns:1fr}.package-builder__start{padding:1.5rem .75rem 2rem}.package-builder__header{align-items:flex-start;flex-direction:column}.package-builder__header-tools{width:100%;justify-content:stretch}.package-builder__header-tools button{flex:1}.package-builder__resume{grid-template-columns:1fr}.package-builder__resume button{grid-column:1/-1;width:100%}.package-builder__selection-line{align-items:stretch;flex-direction:column}.package-builder__selection-actions{flex-wrap:wrap;justify-content:flex-start;width:100%}.package-builder__section-heading,.package-builder__stop-heading{align-items:flex-start;flex-direction:column}.package-builder__stop-actions{width:100%;justify-content:flex-start}.package-builder__leg{grid-template-columns:1.9rem minmax(0,1fr)}.package-builder__leg>.package-builder__leg-actions{grid-column:2;justify-self:start}.package-builder__ground-options,.package-builder__custom-form,.package-builder__provider-progress{grid-template-columns:1fr}.package-builder__progress-heading{grid-template-columns:auto minmax(0,1fr)}.package-builder__progress-heading>strong{grid-column:2}}@media (prefers-reduced-motion: reduce){.package-builder__candidate,.package-builder__progress-meter span{transition:none}.package-builder__progress-orbit .mat-icon,.package-builder__progress-row--active .mat-icon,.package-builder__point-state .mat-icon,.package-builder__service-state>.mat-icon{animation:none}} 2`],encapsulation:2,changeDetection:0})}}return a})();var Ii=(()=>{class a{static{this.\u0275fac=function(t){return new(t||a)}}static{this.\u0275cmp=G({type:a,selectors:[["deal-of-the-week"]],standalone:!0,features:[Z],decls:49,vars:5,consts:[[1,"relative","flex","flex-col","flex-auto","min-w-0","overflow-hidden"],[1,"relative","pb-12","sm:pt-10","sm:pb-12","px-6","sm:px-16","overflow-hidden"],[1,"flex","flex-col","items-center"],[1,"text-xl","font-semibold"],[1,"mt-1","text-3xl","sm:text-3xl","font-extrabold","tracking-tight","leading-tight","text-center"],[1,"mt-3","sm:text-2xl","text-center","tracking-tight","text-secondary"],[1,""],[1,"flex","justify-center","mt-10","sm:mt-20"],[1,"flex","flex-col","lg:flex-row","max-w-sm","lg:max-w-240"],[1,"pb-10"],[1,"pb-5"],["src","https://images.pexels.com/photos/2422463/pexels-photo-2422463.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1","alt",""],[1,"flex","items-center","mt-10","ml-5","mr-5"],[1,"font-medium","text-secondary"],[1,"flex-auto","ml-2","border-b-2"],[1,"grid","grid-cols-1","lg:grid-cols-2","gap-y-4","mt-6","ml-5"],[1,"flex","items-center"],[1,"icon-size-5","text-blue-500",3,"svgIcon"],[1,"ml-2"],[1,"flex","flex-col","items-center","p-8","lg:px-10","lg:py-12","lg:max-w-120","bg-gray-100","dark:bg-black","dark:bg-opacity-10"],[1,"flex","items-center","whitespace-nowrap"],[1,"text-8xl","font-extrabold","tracking-tight"],[1,"ml-2","text-2xl","font-semibold","text-secondary"],[1,"font-medium","text-center","text-secondary"],["mat-flat-button","",1,"w-full","mt-8","lg:mt-auto","bg-green-500",3,"color"]],template:function(t,i){t&1&&(r(0,"div",0)(1,"div",1)(2,"div",2)(3,"h2",3),s(4,"DEAL OF THE WEEK"),o(),r(5,"div",4),s(6," Unlock big Savings! "),o(),r(7,"div",5)(8,"div",6),s(9,"Search, build and share your own packages."),o()()(),r(10,"div",7)(11,"fuse-card",8)(12,"div",9)(13,"div",10),_(14,"img",11),o(),r(15,"div",12)(16,"div",13),s(17,"INCLUDED FEATURES"),o(),_(18,"div",14),o(),r(19,"div",15)(20,"div",16),_(21,"mat-icon",17),r(22,"div",18),s(23,"Flights"),o()(),r(24,"div",16),_(25,"mat-icon",17),r(2
26,"div",18),s(27,"Transfers"),o()(),r(28,"div",16),_(29,"mat-icon",17),r(30,"div",18),s(31,"Free Entry for 2 Days"),o()(),r(32,"div",16),_(33,"mat-icon",17),r(34,"div",18),s(35,"Free Hike Entry"),o()()()(),r(36,"div",19)(37,"div",20)(38,"div",21),s(39,"R 3500"),o(),r(40,"div",22),s(41,"ZAR"),o()(),r(42,"div",23)(43,"div"),s(44,'Embark on an extraordinary journey with our "Deal of the Week" special! Discover the magic of faraway lands and create lasting memories with this exclusive offer.'),o(),r(45,"div"),s(46,"Delight in the allure of our carefully curated selection, where every destination promises a unique experience. From serene coastal retreats to bustling urban escapes, our travel deal invites you to explore four distinct locales, each with its own charm."),o()(),r(47,"button",24),s(48," View More "),o()()()()()()),t&2&&(l(21),p("svgIcon","heroicons_solid:check-circle"),l(4),p("svgIcon","heroicons_solid:check-circle"),l(4),p("svgIcon","heroicons_solid:check-circle"),l(4),p("svgIcon","heroicons_solid:check-circle"),l(14),p("color","primary"))},dependencies:[ke,H,U,X,Y]})}}return a})();function pa(a,d){if(a&1&&(r(0,"div",17),s(1),M(2,"date"),M(3,"date"),o()),a&2){let e=c();l(),A(" ",z(2,2,(e.bundle.search==null?null:e.bundle.search.validFrom)||e.bundle.validFrom||e.bundle.departDate,"dd MMM yyyy")," - ",z(3,5,(e.bundle.search==null?null:e.bundle.search.validTo)||e.bundle.validTo||e.bundle.returnDate,"dd MMM yyyy")," ")}}function ua(a,d){a&1&&(r(0,"div",17),s(1,"Flexible travel window"),o())}function _a(a,d){if(a&1&&(r(0,"span",21),s(1),o()),a&2){let e=c();l(),k(" ",e.bundle.basis," ")}}function ga(a,d){a&1&&(r(0,"span",22),s(1," Accommodation "),o())}function ha(a,d){a&1&&(r(0,"span",22),s(1," Flights "),o())}function fa(a,d){a&1&&(r(0,"span",22),s(1," Transfers "),o())}function va(a,d){a&1&&(r(0,"span",22),s(1," Car rental "),o())}function ba(a,d){a&1&&(r(0,"span",22),s(1," Cruise "),o())}function Ca(a,d){if(a&1&&(r(0,"div",23)(1,"div",19),s(2,"Bundle details"),o(),_(3,"div",27),o()),a&2){let e=c();l(3),p("innerHTML",e.bundle.contentDescription||(e.bundle.supplier==null?null:e.bundle.supplier.contentShort),ct)}}var Fi=(()=>{class a{constructor(e,t){this.dialogRef=e,this.data=t}get bundle(){return this.data?.bundle??{}}get displayCurrencyCode(){return this.data?.displayCurrencyCode||this.bundle?.currency||"ZAR"}get price(){return this.bundle.priceAdvertise||this.bundle.priceBundleTotal||this.bundle.priceTotal||0}close(){this.dialogRef.close()}priceLive(){this.dialogRef.close("price-live")}static{this.\u0275fac=function(t){return new(t||a)(V(Ft),V(Ot))}}static{this.\u0275cmp=G({type:a,selectors:[["prebuilt-package-details-dialog"]],standalone:!0,features:[Z],decls:54,vars:18,consts:[[1,"relative","bg-white","dark:bg-slate-900","rounded-2xl","overflow-hidden"],["mat-icon-button","","aria-label","Close bundle details",1,"absolute","top-4","right-4",3,"click"],[3,"svgIcon"],[1,"relative","h-56"],["alt","Package image",1,"absolute","inset-0","h-full","w-full","object-cover",3,"src"],[1,"absolute","inset-0","bg-gradient-to-t","from-black/70","via-black/30","to-transparent"],[1,"absolute","left-6","bottom-4","text-white"],[1,"text-xs","uppercase","tracking-widest"],[1,"text-2xl","font-semibold"],[1,"text-sm","opacity-90"],[1,"p-6","space-y-6"],[1,"grid","gap-4","md:grid-cols-3"],[1,"rounded-xl","border","border-gray-200","p-4","text-sm","text-gray-600","dark:border-gray-700","dark:text-gray-300"],[1,"text-xs","uppercase","tracking-widest","text-gray-400"],[1,"text-2xl","font-semibold","text-primary-600"],[1,"text-xs","text-gray-500"],[1,"text-2xl","font-semibold","text-gray-900","dark:text-white"],[1,"text-sm","text-gray-900","dark:text-white"],[1,"space-y-3"],[1,"text-sm","uppercase","tracking-widest","text-gray-500"],[1,"flex","flex-wrap","gap-2"],[1,"rounded-full","bg-primary-50","px-3","py-1","text-xs","font-medium","text-primary-600","dark:bg-slate-800","dark:text-primary-300"],[1,"rounded-full","bg-gray-100","px-3","py-1","text-xs","font-medium","text-gray-700","dark:bg-slate-800","dark:text-gray-300"],[1,"space-y-2"],[1,"flex","flex-col-reverse","gap-3","border-t","border-gray-200","pt-5","sm:flex-row","sm:justify-end","dark:border-gray-700"],["mat-stroked-button","","type","button",3,"click"],["mat-flat-button","","color","primary","type","button",3,"click"],[1,"text-sm","leading-relaxed","text-gray-700","dark:text-gray-300",3,"innerHTML"]],template:function(t,i){t&1&&(r(0,"div",0)(1,"button",1),v("click",function(){return i.close()}),_(2,"mat-icon",2),o(),r(3,"div",3),_(4,"img",4)(5,"div",5),r(6,"div",6)(7,"div",7),s(8,"Bundle"),o(),r(9,"div",8),s(10),o(),r(11,"div",9),s(12),o()()(),r(13,"div",10)(14,"div",11)(15,"div",12)(16,"div",13),s(17,"Price"),o(),r(18,"div",14),s(19),M(20,"tfmSiteCurrency"),o(),r(21,"div",15),s(22,"per person sharing"),o()(),r(23,"div",12)(24,"div",13),s(25,"Nights"),o(),r(26,"div",16),s(27),o(),r(28,"div",15),s(29,"stay length"),o()(),r(30,"div",12)(31,"div",13),s(32,"Valid"),o(),x(33,pa,4,8,"div",17)(34,ua,2,0,"div",17),r(35,"div",15),s(36,"travel window"),o()()(),r(37,"div",18)(38,"div",19),s(39,"Included"),o(),r(40,"div",20),x(41,_a,2,1,"span",21)(42,ga,2,0,"span",22)(43,ha,2,0,"span",22)(44,fa,2,0,"span",22)(45,va,2,0,"span",22)(46,ba,2,0,"span",22),o()(),x(47,Ca,4,1,"div",23),r(48,"div",24)(49,"button",25),v("click",function(){return i.close()}),s(50,"Close"),o(),r(51,"button",26),v("click",function(){return i.priceLive()}),_(52,"mat-icon",2),s(53," Price live and quote "),o()()()()),t&2&&(l(2),p("svgIcon","heroicons_outline:x-mark"),l(2),p("src",(i.bundle.imageUrls==null?null:i.bundle.imageUrls[0])||"assets/images/xl
2-travel-banners/XL_WEB_PAGE_BANNERS_1.jpg",me),l(6),k(" ",(i.bundle.supplier==null?null:i.bundle.supplier.name)||i.bundle.supplierName||i.bundle.name," "),l(2),k(" ",i.bundle.destinationName||i.bundle.destination," "),l(7),k(" ",z(20,15,i.price,i.displayCurrencyCode)," "),l(8),k(" ",i.bundle.nights||(i.bundle.search==null?null:i.bundle.search.nights)||0," "),l(6),f(i.bundle.search!=null&&i.bundle.search.validFrom||i.bundle.validFrom||i.bundle.departDate||i.bundle.search!=null&&i.bundle.search.validTo||i.bundle.validTo||i.bundle.returnDate?33:34),l(8),f(i.bundle.basis?41:-1),l(),f(i.bundle.priceAccommodation>0?42:-1),l(),f(i.bundle.priceFlights>0&&!i.bundle.excludeFlights?43:-1),l(),f(i.bundle.priceTransfers>0?44:-1),l(),f(i.bundle.priceCars>0?45:-1),l(),f(i.bundle.priceCruises>0?46:-1),l(),f(i.bundle.contentDescription||i.bundle.supplier!=null&&i.bundle.supplier.contentShort?47:-1),l(5),p("svgIcon","heroicons_outline:bolt"))},dependencies:[de,Ce,qe,Bt,X,Y,xe,H,U],styles:["[_nghost-%COMP%]{display:block}img[_ngcontent-%COMP%]{display:block}"]})}}return a})();var wa=(a,d)=>d.label,ya=(a,d)=>d.value,ka=(a,d)=>d.key,Sa=(a,d)=>d.id,Pa=()=>[1,2,3];function Ma(a,d){a&1&&(_(0,"i",14),r(1,"span"),s(2,"Loading bundle library"),o())}function Ta(a,d){if(a&1&&(r(0,"strong"),s(1),o(),r(2,"span"),s(3),o()),a&2){let e=c();l(),w(e.view.filteredBundles.length),l(2),k("",e.view.filteredBundles.length===1?"bundle":"bundles"," ready")}}function Ea(a,d){if(a&1&&s(0),a&2){let e=c();A(" ",e.activeFilterCount()," ",e.activeFilterCount()===1?"filter":"filters"," applied ")}}function Ia(a,d){a&1&&s(0," Quick filters and core criteria ")}function Fa(a,d){if(a&1){let e=P();r(0,"button",16),v("click",function(){let i=g(e).$implicit,n=c(2);return h(n.selectDestination(i))}),s(1),o()}if(a&2){let e=d.$implicit,t=c(2);T("is-active",t.view.selectedDestination===e),l(),k(" ",e," ")}}function Oa(a,d){if(a&1){let e=P();r(0,"button",16),v("click",function(){let i=g(e).$implicit,n=c(2);return h(n.selectNightRange(i.min,i.max))}),s(1),o()}if(a&2){let e=d.$implicit,t=c(2);T("is-active",t.isNightRangeSelected(e)),l(),k(" ",e.label," ")}}function Da(a,d){if(a&1){let e=P();r(0,"div",8)(1,"div")(2,"span"),s(3,"Destination"),o(),r(4,"nav",15)(5,"button",16),v("click",function(){g(e);let i=c();return h(i.selectDestination("All Destinations"))}),s(6," Anywhere "),o(),I(7,Fa,2,3,"button",17,K),M(9,"slice"),o()(),r(10,"div")(11,"span"),s(12,"Trip length"),o(),r(13,"nav",18),I(14,Oa,2,3,"button",17,wa),o()()()}if(a&2){let e=c();l(5),T("is-active",e.view.selectedDestination==="All Destinations"),l(2),F(mt(9,2,e.view.destinations,1,7)),l(7),F(e.view.quickNightRanges)}}function Ba(a,d){if(a&1&&(r(0,"mat-option",27),s(1),o()),a&2){let e=d.$implicit;p("value",e),l(),w(e)}}function Aa(a,d){if(a&1&&(r(0,"mat-option",27),s(1),o()),a&2){let e=d.$implicit;p("value",e),l(),k("",e,"+")}}function Ra(a,d){if(a&1&&(r(0,"mat-option",27),s(1),o()),a&2){let e=d.$implicit;p("value",e),l(),w(e)}}function Va(a,d){if(a&1&&(r(0,"mat-option",27),s(1),o()),a&2){let e=d.$implicit;p("value",e.value),l(),w(e.label)}}function Na(a,d){if(a&1){let e=P();r(0,"button",16),v("click",function(){let i=g(e).$implicit,n=c(2);return h(n.toggleServiceFilter(i.key))}),_(1,"mat-icon",7),s(2),o()}if(a&2){let e=d.$implicit,t=c(2);T("is-active",t.view.filters.services[e.key]),E("aria-pressed",t.view.filters.services[e.key]),l(),p("svgIcon",e.icon),l(),k(" ",e.label," ")}}function $a(a,d){if(a&1){let e=P();r(0,"div",19)(1,"div",20)(2,"label",21),_(3,"mat-icon",7),r(4,"span",22),s(5,"Search bundles"),o(),r(6,"input",23),te("ngModelChange",function(i){g(e);let n=c();return ee(n.view.searchQuery,i)||(n.view.searchQuery=i),h(i)}),v("ngModelChange",function(){g(e);let i=c();return h(i.applyFilters())}),o()(),r(7,"mat-form-field",24)(8,"mat-label"),s(9,"Destination"),o(),r(10,"mat-select",25),te("ngModelChange",function(i){g(e);let n=c();return ee(n.view.selectedDestination,i)||(n.view.selectedDestination=i),h(i)}),v("selectionChange",function(){g(e);let i=c();return h(i.applyFilters())}),r(11,"mat-option",26),s(12,"All destinations"),o(),I(13,Ba,2,2,"mat-option",27,K),M(15,"slice"),o()(),r(16,"div",28)(17,"label"),s(18,"Minimum nights"),o(),r(19,"mat-form-field",29)(20,"mat-select",30),te("ngModelChange",function(i){g(e);let n=c();return ee(n.view.filters.minNights,i)||(n.view.filters.minNights=i),h(i)}),v("selectionChange",function(){g(e);let i=c();return h(i.applyFilters())}),r(21,"mat-option",27),s(22,"Any"),o(),I(23,Aa,2,2,"mat-option",27,K),o()()(),r(25,"div",28)(26,"label"),s(27,"Maximum nights"),o(),r(28,"mat-form-field",29)(29,"mat-select",30),te("ngModelChange",function(i){g(e);let n=c();return ee(n.view.filters.maxNights,i)||(n.view.filters.maxNights=i),h(i)}),v("selectionChange",function(){g(e);let i=c();return h(i.applyFilters())}),r(30,"mat-option",27),s(31,"Any"),o(),I(32,Ra,2,2,"mat-option",27,K),o()()(),r(34,"div",31)(35,"label"),s(36,"Price per person"),o(),r(37,"div")(38,"input",32),te("ngModelChange",function(i){g(e);let n=c();return ee(n.view.filters.minPrice,i)||(n.view.filters.minPrice=i),h(i)}),v("ngModelChange",function(){g(e);let i=c();return h(i.applyFilters())}),o(),r(39,"input",33),te("ngModelChange",function(i){g(e);let n=c();return ee(n.view.filters.maxPrice,i)||(n.view.filters.maxPrice=i),h(i)}),v("ngModelChange",function(){g(e);let i=c();return h(i.applyFilters())}),o()()(),r(40,"mat-form-field",29)(41,"mat-label"),s(42,"Sort results"),o(),r(43,"mat-select",34),te("ngModelChange",function(i){g(e);let n=c();return ee(n.view.sortOption,i)||(n.view.sortOption=i),h(i)}),v("selectionChange",function(){g(e);let i=c();return h(i.applyFilters())}),I(44,Va,2,2,"mat-option",27,ya),o()()()(),r(46,"div",35)(47,"div",36)(48,"strong"),s(49,"Must include"),o()(),r(50,"div",37)(51,"div"),I(52,Na,3,5,"button",17,ka),o()(),r(54,"button",38),v("click",function(){g(e);let i=c();return h(i.resetFilters())}),_(55,"mat-icon",7),s(56," Reset all "),o()()}if(a&2){let e=c();l(3),p("svgIcon","heroicons_outline:magnifying-glass"),l(3),J("ngModel",e.view.searchQuery),l(4),J("ngModel",e.view.selectedDestination),l(3),F(z(15,10,e.view.destinations,1)),l(7),J("ngModel",e.view.filters.minNights),l(3),F(e.view.nightOptions),l(6),J("ngModel",e.view.filters.maxNights),l(3),F(e.view.nightOptions),l(6),J("ngModel",e.view.filters.minPrice),l(),J("ngModel",e.view.filters.maxPrice),l(4),J("ngModel",e.view.sortOption),l(),F(e.view.sortOptions),l(8),F(e.view.filterOptions),l(2),p("disabled",!e.activeFilterCount()),l(),p("svgIcon","mat_outline:restart_alt")}}function za(a,d){a&1&&(r(0,"div",40),_(1,"span"),r(2,"div"),_(3,"i")(4,"i")(5,"i"),o()())}function La(a,d){a&1&&(r(0,"div",10)(1,"div",39),_(2,"span"),r(3,"div")(4,"strong"),s(5,"Loading published bundles"),o(),r(6,"p"),s(7,"Retrieving active package templates and travel windows."),o()()(),I(8,za,6,0,"div",40,K),o()),a&2&&(l(8),F(ie(0,Pa)))}function qa(a,d){if(a&1){let e=P();r(0,"div",11)(1,"span"),_(2,"mat-icon",7),o(),r(3,"h2"),s(4,"Bundles could not be loaded"),o(),r(5,"p"),s(6,"The bundle service did not respond. Try the request again."),o(),r(7,"button",41),v("click",function(){g(e);let i=c();return h(i.loadBundles())}),s(8,"Try again"),o()()}a&2&&(l(2),p("svgIcon","heroicons_outline:exclamation-triangle"))}function ja(a,d){a&1&&(r(0,"h2"),s(1,"No active published bundles"),o(),r(2,"p"),s(3,"The selected channel does not currently have an active bundle available for this travel window."),o())}function Qa(a,d){if(a&1){let e=P();r(0,"h2"),s(1,"No bundles match these filters"),o(),r(2,"p"),s(3,"Clear the filters to return to the full published bundle library."),o(),r(4,"button",42),v("click",function(){g(e);let i=c(2);return h(i.resetFilters())}),s(5,"Clear filters"),o()}}function Wa(a,d){if(a&1&&(r(0,"div",12)(1,"span"),_(2,"mat-icon",7),o(),x(3,ja,4,0)(4,Qa,6,0),o()),a&2){let e=c();l(2),p("svgIcon","heroicons_outline:magnifying-glass"),l(),f(e.view.bundles.length?4:3)}}function Ga(a,d){if(a&1&&(r(0,"span",52),s(1),o()),a&2){let e=c().$implicit;l(),w(e.basis)}}function Ka(a,d){a&1&&(r(0,"span"),_(1,"mat-icon",7),s(2,"Stay"),o()),a&2&&(l(),p("svgIcon","heroicons_outline:home-modern"))}function Za(a,d){a&1&&(r(0,"span"),_(1,"mat-icon",7),s(2,"Flights"),o()),a&2&&(l(),p("svgIcon","mat_outline:flight"))}function Ua(a,d){a&1&&(r(0,"span"),_(1,"mat-icon",7),s(2,"Transfers"),o()),a&2&&(l(),p("svgIcon","mat_outline:airport_shuttle"))}function Ha(a,d){a&1&&(r(0,"span"),_(1,"mat-icon",7),s(2,"Car"),o()),a&2&&(l(),p("svgIcon","mat_outline:directions_car"))}function Ya(a,d){a&1&&(r(0,"span"),_(1,"mat-icon",7),s(2,"Cruise"),o()),a&2&&(l(),p("svgIcon","mat_outline:directions_boat"))}function Xa(a,d){a&1&&s(0," Preparing ")}function Ja(a,d){a&1&&s(0," Price live ")}function eo(a,d){if(a&1){let e=P();r(0,"article",46)(1,"button",47),v("click",function(){let i=g(e).$implicit,n=c(2);return h(n.selectBundle(i))}),_(2,"img",48),r(3,"span",49)(4,"span",50)(5,"span"),s(6),o(),r(7,"strong"),s(8),o()(),r(9,"strong",51),s(10),o(),x(11,Ga,2,1,"span",52),r(12,"span",53),x(13,Ka,3,1,"span")(14,Za,3,1,"span")(15,Ua,3,1,"span")(16,Ha,3,1,"span")(17,Ya,3,1,"span"),o()()(),r(18,"div",54)(19,"span"),s(20,"Advertised from"),o(),r(21,"strong"),s(22),M(23,"tfmSiteCurrency"),o(),r(24,"small"),s(25,"per person sharing"),o(),r(26,"button",55),v("click",function(){let i=g(e).$implicit,n=c(2);return h(n.quickBook(i))}),x(27,Xa,1,0)(28,Ja,1,0),o()()()}if(a&2){let e=d.$implicit,t=c(2);T("is-selected",t.isSelected(e)),l(),E("aria-pressed",t.isSelected(e)),l(),p("src",(e.imageUrls==null?null:e.imageUrls[0])||t.view.fallbackImage,me)("alt",(e.name||(e.supplier==null?null:e.supplier.name)||e.destinationName||"Travel")+" package"),l(4),w(e.destinationName||e.destination||"Featured destination"),l(2),k("",t.getBundleNights(e)," nights"),l(2),w(e.name||(e.supplier==null?null:e.supplier.name)||e.supplierName||"Published bundle"),l(),f(e.basis?11:-1),l(2),f(e.priceAccommodation>0?13:-1),l(),f(e.priceFlights>0&&!e.excludeFlights?14:-1),l(),f(e.priceTransfers>0&&!e.excludeTransfers?15:-1),l(),f(e.priceCars>0&&!e.excludeCars?16:-1),l(),f(e.priceCruises>0?17:-1),l(5),w(z(23,17,t.getBundlePrice(e),t.displayCurrencyCode)),l(4),p("disabled",!!t.view.launchingBundleId),l(),f(t.view.launchingBundleId===e.id?27:28)}}function to(a,d){if(a&1&&(r(0,"div",60),_(1,"mat-icon",7),r(2,"div")(3,"span"),s(4,"Travel window"),o(),r(5,"strong"),s(6),M(7,"date"),M(8,"date"),o()()()),a&2){let e=c();l(),p("svgIcon","heroicons_outline:calendar-days"),l(5),A(" ",z(7,3,(e.search==null?null:e.search.validFrom)||e.validFrom||e.departDate,"dd MMM yyyy")," - ",z(8,6,(e.search==null?null:e.search.validTo)||e.validTo||e.returnDate,"dd MMM yyyy")," ")}}function io(a,d){a&1&&s(0," Preparing live search ")}function no(a,d){a&1&&s(0," Price live and quote ")}function ro(a,d){if(a&1){let e=P();r(0,"aside",45)(1,"div",56),_(2,"img",48),o(),r(3,"div",57)(4,"span",58),s(5),o(),r(6,"h2"),s(7),o(),r(8,"div",59)(9,"div")(10,"span"),s(11,"From"),o(),r(12,"strong"),s(13),M(14,"tfmSiteCurrency"),o(),r(15,"small"),s(16,"per person sharing"),o()(),r(17,"div")(18,"span"),s(19,"Stay"),o(),r(20,"strong"),s(21),o(),r(22,"small"),s(23,"nights"),o()()(),x(24,to,9,9,"div",60),r(25,"div",61)(26,"button",55),v("click",function(){let i=g(e),n=c(2);return h(n.quickBook(i))}),_(27,"mat-icon",7),x(28,io,1,0)(29,no,1,0),o(),r(30,"button",62),v("click",function(){let i=g(e),n=c(2);return h(n.openDetails(i))}),s(31," View bundle details "),o()(),r(32,"p",63),s(33," The advertised bundle is the starting point. Flights, rooms, ground services and the final price are checked live before the quote is created. "),o()()()}if(a&2){let e=d,t=c(2);l(2),p("src",(e.imageUrls==null?null:e.imageUrls[0])||t.view.fallbackImage,me)("alt",(e.name||(e.supplier==null?null:e.supplier.name)||e.destinationName||"Travel")+" package preview"),l(3),k(" ",e.de
2stinationName||e.destination||"Featured destination"," "),l(2),w(e.name||(e.supplier==null?null:e.supplier.name)||e.supplierName||"Published bundle"),l(6),w(z(14,10,t.getBundlePrice(e),t.displayCurrencyCode)),l(8),w(t.getBundleNights(e)),l(3),f(e.search!=null&&e.search.validFrom||e.validFrom||e.departDate?24:-1),l(2),p("disabled",!!t.view.launchingBundleId),l(),p("svgIcon","heroicons_outline:bolt"),l(),f(t.view.launchingBundleId===e.id?28:29)}}function ao(a,d){if(a&1&&(r(0,"div",13)(1,"div",43),I(2,eo,29,20,"article",44,Sa),o(),x(4,ro,34,13,"aside",45),o()),a&2){let e,t=c();l(2),F(t.view.filteredBundles),l(2),f((e=t.view.selectedBundle)?4:-1,e)}}var Oi=(()=>{class a{constructor(e,t,i,n){this._tfmService=e,this._router=t,this._dialog=i,this._changeDetectorRef=n,this.view={searchQuery:"",bundles:[],filteredBundles:[],selectedBundle:null,isLoading:!0,isError:!1,filtersExpanded:!0,launchingBundleId:null,fallbackImage:"assets/images/xl-travel-banners/XL_WEB_PAGE_BANNERS_1.jpg",destinations:["All Destinations"],selectedDestination:"All Destinations",nightOptions:[1,3,5,7,10,14],quickNightRanges:[{label:"Any length",min:"",max:""},{label:"Short break",min:1,max:4},{label:"One week",min:5,max:8},{label:"Long stay",min:9,max:""}],sortOption:"price-asc",sortOptions:[{value:"price-asc",label:"Price: low to high"},{value:"price-desc",label:"Price: high to low"},{value:"nights-asc",label:"Duration: shortest first"},{value:"name-asc",label:"Package name: A\u2013Z"}],filters:{minNights:"",maxNights:"",minPrice:"",maxPrice:"",services:{accommodation:!1,flights:!1,transfers:!1,cars:!1,cruises:!1}},filterOptions:[{key:"accommodation",label:"Stay",icon:"heroicons_outline:home-modern"},{key:"flights",label:"Flights",icon:"mat_outline:airplanemode_active"},{key:"transfers",label:"Transfers",icon:"mat_outline:airport_shuttle"},{key:"cars",label:"Cars",icon:"mat_outline:directions_car"},{key:"cruises",label:"Cruise",icon:"mat_outline:directions_boat"}]}}get displayCurrencyCode(){return this.view?.site?.displayCurrencyCode||"ZAR"}ngOnInit(){this._tfmService.getSite().then(e=>{this.view.site=e}),this.loadBundles()}loadBundles(){this.view.isLoading=!0,this.view.isError=!1,this.fetchBundlesWithTimeout({rateType:"pps",onlyActive:!0,isListing:!0}).then(e=>{this.view.bundles=e,this.view.destinations=this.getDestinations(e.filter(t=>this.isBundleValid(t))),this.applyFilters()}).catch(e=>{console.error("Error loading bundles:",e),this.view.isError=!0}).finally(()=>{this.view.isLoading=!1,this._changeDetectorRef.detectChanges()})}fetchBundlesWithTimeout(e){return new Promise((i,n)=>{let m=setTimeout(()=>n(new Error("Bundle request timed out")),2e4);this.fetchBundles(e).then(u=>{clearTimeout(m),i(u)}).catch(u=>{clearTimeout(m),n(u)})})}fetchBundles(e){return he(this,null,function*(){let i=(yield this._tfmService.filterBundles(e,!1))?.content??[],n=Array.isArray(i)?i:Object.values(i);return n.forEach(m=>{m.tagsArray=(m.tags??"").split(",").map(u=>u.trim()).filter(u=>u.length>0)}),n})}toggleServiceFilter(e){this.view.filters.services[e]=!this.view.filters.services[e],this.applyFilters()}selectDestination(e){this.view.selectedDestination=e,this.applyFilters()}selectNightRange(e,t){this.view.filters.minNights=e,this.view.filters.maxNights=t,this.applyFilters()}isNightRangeSelected(e){return this.view.filters.minNights===e.min&&this.view.filters.maxNights===e.max}activeFilterCount(){let e=this.view.filters;return[this.view.searchQuery?.trim(),this.view.selectedDestination!=="All Destinations",e.minNights!=="",e.maxNights!=="",e.minPrice!=="",e.maxPrice!=="",...Object.values(e.services)].filter(Boolean).length}resetFilters(){this.view.searchQuery="",this.view.selectedDestination="All Destinations",this.view.filters.minNights="",this.view.filters.maxNights="",this.view.filters.minPrice="",this.view.filters.maxPrice="",this.view.sortOption="price-asc",Object.keys(this.view.filters.services).forEach(e=>{this.view.filters.services[e]=!1}),this.applyFilters()}applyFilters(){let e=this.view.searchQuery?.trim().toLowerCase(),t=this.view.selectedDestination,i=Number(this.view.filters.minNights)||null,n=Number(this.view.filters.maxNights)||null,m=Number(this.view.filters.minPrice)||null,u=Number(this.view.filters.maxPrice)||null,b=this.view.filters.services;this.view.filteredBundles=this.view.bundles.filter(S=>this.isBundleValid(S)).filter(S=>{if(t&&t!=="All Destinations"&&(S.destinationName||S.destination||"").toLowerCase().trim()!==t.toLowerCase().trim())return!1;if(e){let q=Array.isArray(S.tags)?S.tags.join(" "):S.tags;if(![S.name,S.destination,S.destinationName,S.supplier?.name,q].filter(
2Boolean).join(" ").toLowerCase().includes(e))return!1}let O=this.getBundleNights(S);if(i&&O<i||n&&O>n)return!1;let $=this.getBundlePrice(S);return!(m&&$<m||u&&$>u||b.accommodation&&!(S.priceAccommodation>0)||b.flights&&!(S.priceFlights>0)||b.transfers&&!(S.priceTransfers>0)||b.cars&&!(S.priceCars>0)||b.cruises&&!(S.priceCruises>0))}).sort((S,O)=>{switch(this.view.sortOption){case"price-desc":return this.getBundlePrice(O)-this.getBundlePrice(S);case"nights-asc":return this.getBundleNights(S)-this.getBundleNights(O);case"name-asc":return(S.name||S.supplierName||"").localeCompare(O.name||O.supplierName||"");default:return this.getBundlePrice(S)-this.getBundlePrice(O)}});let y=this.view.selectedBundle,C=y?.id;this.view.selectedBundle=this.view.filteredBundles.find(S=>S===y||C!=null&&S.id===C)??this.view.filteredBundles[0]??null}selectBundle(e){this.view.selectedBundle=e}isSelected(e){return this.view.selectedBundle===e?!0:this.view.selectedBundle?.id!=null&&e?.id!=null&&this.view.selectedBundle.id===e.id}toggleFilters(){this.view.filtersExpanded=!this.view.filtersExpanded}quickBook(e){!e||this.view.launchingBundleId||(this.view.launchingBundleId=e.id,this._tfmService.setSelectedBundle(e),this._router.navigate(["/quote/packages/popular"],{queryParams:{bundleId:e.id}}).finally(()=>{this.view.launchingBundleId=null}))}openDetails(e){this._dialog.open(Fi,{data:{bundle:e,displayCurrencyCode:this.displayCurrencyCode},panelClass:"prebuilt-details-dialog",maxWidth:"960px",width:"92vw"}).afterClosed().subscribe(i=>{i==="price-live"&&this.quickBook(e)})}getDestinations(e){let t=new Set;return e.forEach(i=>{let n=i.destinationName||i.destination;n&&t.add(n)}),["All Destinations",...Array.from(t).sort()]}isBundleValid(e){return!!e}getBundleNights(e){return Et(e)}getBundlePrice(e){return e.priceAdvertise||e.priceBundleTotal||e.priceTotal||0}static{this.\u0275fac=function(t){return new(t||a)(V(we),V(vt),V(Dt),V(be))}}static{this.\u0275cmp=G({type:a,selectors:[["prebuilt-packages"]],standalone:!0,features:[Z],decls:32,vars:9,consts:[["aria-labelledby","prebuilt-title",1,"prebuilt-library"],[1,"prebuilt-library__header"],["id","prebuilt-title"],["aria-live","polite",1,"prebuilt-library__count"],["aria-label","Filter bundle library",1,"prebuilt-filter"],[1,"prebuilt-filter__header"],[1,"prebuilt-filter__intro"],[3,"svgIcon"],[1,"prebuilt-filter__quick-groups"],["mat-button","","type","button",3,"click"],["aria-label","Loading bundles","role","status",1,"prebuilt-library__loading"],["role","alert",1,"prebuilt-library__empty"],[1,"prebuilt-library__empty"],[1,"prebuilt-library__workspace"],["aria-hidden","true"],["aria-label","Quick destination filters"],["type","button",3,"click"],["type","button",3,"is-active"],["aria-label","Quick duration filters"],[1,"prebuilt-filter__tier","prebuilt-filter__tier--main"],[1,"prebuilt-filter__main-grid"],[1,"prebuilt-library__search"],[1,"sr-only"],["type","search","placeholder","Search destination, hotel, supplier or tag",3,"ngModelChange","ngModel"],["subscriptSizing","dynamic",1,"prebuilt-library__destination"],["disableOptionCentering","","panelClass","prebuilt-packages-select-panel",3,"ngModelChange","selectionChange","ngModel"],["value","All Destinations"],[3,"value"],[1,"prebuilt-library__filter-field"],["subscriptSizing","dynamic"],["placeholder","Any",3,"ngModelChange","selectionChange","ngModel"],[1,"prebuilt-library__filter-field","prebuilt-library__filter-field--price"],["type","number","min","0","placeholder","Minimum","aria-label","Minimum advertised price",3,"ngModelChange","ngModel"],["type","number","min","0","placeholder","Maximum","aria-label","Maximum advertised price",3,"ngModelChange","ngModel"],[3,"ngModelChange","selectionChange","ngModel"],[1,"prebuilt-filter__tier","prebuilt-filter__tier--refine"],[1,"prebuilt-filter__refine-label"],[1,"prebuilt-library__services"],["mat-button","","type","button",1,"prebuilt-library__clear",3,"click","disabled"],[1,"prebuilt-library__loading-copy"],[1,"prebuilt-library__skeleton"],["mat-flat-button","","color","primary","type","button",3,"click"],["mat-stroked-button","","color","primary","type","button",3,"click"],["aria-label","Available bundles",1,"prebuilt-library__results"],[1,"prebuilt-bundle",3,"is-selected"],["aria-label","Selected bundle summary",1,"prebuilt-preview"],[1,"prebuilt-bundle"],["type","button",1,"prebuilt-bundle__select",3,"click"],[3,"src","alt"],[1,"prebuilt-bundle__content"],[1,"prebuilt-bundle__route"],[1,"prebuilt-bundle__title"],[1,"prebuilt-bundle__basis"],["aria-label","Included
2services",1,"prebuilt-bundle__services"],[1,"prebuilt-bundle__price"],["mat-flat-button","","color","primary","type","button",3,"click","disabled"],[1,"prebuilt-preview__image"],[1,"prebuilt-preview__body"],[1,"prebuilt-preview__destination"],[1,"prebuilt-preview__facts"],[1,"prebuilt-preview__window"],[1,"prebuilt-preview__actions"],["mat-stroked-button","","type","button",3,"click"],[1,"prebuilt-preview__note"]],template:function(t,i){t&1&&(r(0,"section",0)(1,"header",1)(2,"div")(3,"p"),s(4,"Bundle library"),o(),r(5,"h1",2),s(6,"Start from a proven package"),o(),r(7,"span"),s(8," Choose a published bundle, confirm its shape, then reprice it against live supplier inventory before creating the quote. "),o()(),r(9,"div",3),x(10,Ma,3,0)(11,Ta,4,2),o()(),r(12,"section",4)(13,"header",5)(14,"div",6)(15,"span"),_(16,"mat-icon",7),o(),r(17,"div")(18,"strong"),s(19,"Find the right starting package"),o(),r(20,"small"),x(21,Ea,1,2)(22,Ia,1,0),o()()(),x(23,Da,16,6,"div",8),r(24,"button",9),v("click",function(){return i.toggleFilters()}),_(25,"mat-icon",7),s(26),o()(),x(27,$a,57,13),o(),x(28,La,10,1,"div",10)(29,qa,9,1,"div",11)(30,Wa,5,2,"div",12)(31,ao,5,1,"div",13),o()),t&2&&(l(10),f(i.view.isLoading?10:11),l(6),p("svgIcon","heroicons_outline:adjustments-horizontal"),l(5),f(i.activeFilterCount()?21:22),l(2),f(i.view.filtersExpanded?23:-1),l(),E("aria-expanded",i.view.filtersExpanded),l(),p("svgIcon","mat_outline:tune"),l(),k(" ",i.view.filtersExpanded?"Hide filters":"Show filters"," "),l(),f(i.view.filtersExpanded?27:-1),l(),f(i.view.isLoading?28:i.view.isError?29:i.view.filteredBundles.length?31:30))},dependencies:[de,ht,Ce,qe,$e,Be,Ve,Ae,Ne,Re,H,U,ye,X,Y,Ue,Rt,At,ni,Pt,ze],styles:["[_nghost-%COMP%]{display:block}.prebuilt-library[_ngcontent-%COMP%]{min-height:calc(100dvh - 8rem);padding:clamp(1.25rem,3vw,3rem);color:var(--fuse-text-default, #182230);background:var(--fuse-bg-default, #f4f7fa)}.prebuilt-library__header[_ngcontent-%COMP%]{display:flex;align-items:flex-end;justify-content:space-between;gap:2rem;max-width:90rem;margin:0 auto 1.5rem}.prebuilt-library__header[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0 0 .35rem;color:var(--fuse-primary, #2563eb);font-size:.72rem;font-weight:700;letter-spacing:.09em;text-transform:uppercase}.prebuilt-library__header[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{margin:0;font-size:clamp(2rem,3.4vw,3.25rem);font-weight:750;letter-spacing:-.045em;line-height:1.04}.prebuilt-library__header[_ngcontent-%COMP%] div[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{display:block;max-width:65ch;margin-top:.7rem;color:var(--fuse-text-secondary, #607087);line-height:1.55}.prebuilt-library__count[_ngcontent-%COMP%]{display:flex;flex:0 0 auto;align-items:baseline;gap:.55rem;padding-bottom:.25rem}.prebuilt-library__count[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-size:1.9rem;font-variant-numeric:tabular-nums;line-height:1}.prebuilt-library__count[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--fuse-text-secondary, #607087);font-size:.78rem}.prebuilt-library__searchbar[_ngcontent-%COMP%]{display:grid;grid-template-columns:minmax(16rem,1fr) minmax(13rem,18rem) auto;gap:.75rem;
2align-items:center;max-width:90rem;margin:0 auto;padding:.75rem;border:1px solid var(--fuse-border, #d9e1e8);border-radius:.9rem;background:var(--fuse-bg-card, #ffffff);box-shadow:0 .75rem 2rem #192d4a0f}.prebuilt-library__search[_ngcontent-%COMP%]{display:flex;align-items:center;min-height:3.5rem;gap:.7rem;padding:0 1rem;border:1px solid var(--fuse-border, #d9e1e8);border-radius:.65rem;background:var(--fuse-bg-default, #f7f9fb)}.prebuilt-library__search[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--fuse-text-secondary, #607087)}.prebuilt-library__search[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{width:100%;min-width:0;border:0;outline:0;color:inherit;background:transparent}.prebuilt-library__search[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder{color:var(--fuse-text-secondary, #718096);opacity:1}.prebuilt-library__search[_ngcontent-%COMP%]:focus-within{border-color:var(--fuse-primary, #2563eb);box-shadow:0 0 0 3px #2563eb1f}.prebuilt-library__destination[_ngcontent-%COMP%]{width:100%}.prebuilt-library__filter-toggle[_ngcontent-%COMP%]{min-height:3.5rem;white-space:nowrap}.prebuilt-library__filters[_ngcontent-%COMP%]{display:grid;grid-template-columns:minmax(9rem,.65fr) minmax(9rem,.65fr) minmax(16rem,1fr) minmax(18rem,1.25fr) auto;gap:1rem;align-items:end;max-width:90rem;margin:.75rem auto 0;padding:1rem;border:1px solid var(--fuse-border, #d9e1e8);border-radius:.9rem;background:var(--fuse-bg-card, #ffffff)}.prebuilt-library__filter-field[_ngcontent-%COMP%]{min-width:0}.prebuilt-library__filter-field[_ngcontent-%COMP%] > label[_ngcontent-%COMP%]{display:block;margin-bottom:.45rem;color:var(--fuse-text-secondary, #607087);font-size:.7rem;font-weight:700}.prebuilt-library__filter-field[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%]{width:100%}.prebuilt-library__filter-field--price[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr;gap:.45rem}.prebuilt-library__filter-field--price[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{min-width:0;min-height:3.5rem;padding:0 .75rem;border:1px solid var(--fuse-border, #d9e1e8);border-radius:.6rem;outline:none;color:inherit;background:var(--fuse-bg-default, #f7f9fb)}.prebuilt-library__filter-field--price[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:focus{border-color:var(--fuse-primary, #2563eb);box-shadow:0 0 0 3px #2563eb1f}.prebuilt-library__services[_ngcontent-%COMP%]{min-width:0}.prebuilt-library__services[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{display:block;margin-bottom:.45rem;color:var(--fuse-text-secondary, #607087);font-size:.7rem;font-weight:700}.prebuilt-library__services[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:.4rem}.prebuilt-library__services[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.3rem;min-height:2rem;padding:.25rem .6rem;border:1px solid var(--fuse-border, #d9e1e8);border-radius:.5rem;color:var(--fuse-text-secondary, #607087);font-size:.72rem;font-weight:600;background:transparent;transition:border-color .16s ease,background-color .16s ease,color .16s ease}.prebuilt-library__services[_ngcontent-%COMP%] button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:1rem;height:1rem;font-size:1rem}.prebuilt-library__services[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{border-color:var(--fuse-primary, #2563eb);color:var(--fuse-primary, #2563eb)}.prebuilt-library__services[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:focus-visible{outline:3px solid rgba(37,99,235,.2);outline-offset:2px}.prebuilt-library__services[_ngcontent-%COMP%] button.is-active[_ngcontent-%COMP%]{border-color:var(--fuse-primary, #2563eb);color:var(--fuse-primary, #2563eb);background:#2563eb17}.prebuilt-library__clear[_ngcontent-%COMP%]{white-space:nowrap}.prebuilt-library__workspace[_ngcontent-%COMP%]{display:grid;grid-template-columns:minmax(0,1fr) minmax(20rem,25rem);gap:1rem;align-items:start;max-width:90rem;margin:1rem auto 0}.prebuilt-library__results[_ngcontent-%COMP%]{display:grid;gap:.75rem;min-width:0}.prebuilt-library__loading[_ngcontent-%COMP%]{display:grid;gap:.75rem;max-width:90rem;margin:1rem auto 0}.prebuilt-library__skeleton[_ngcontent-%COMP%]{display:grid;grid-template-columns:11rem 1fr;min-height:9rem;overflow:hidden;border:1px solid var(--fuse-border, #d9e1e8);border-radius:.85rem;background:var(--fuse-bg-card, #ffffff)}.prebuilt-library__skeleton[_ngcontent-%COMP%] > span[_ngcontent-%COMP%], .prebuilt-library__skeleton[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{display:block;background:linear-gradient(90deg,#94a3b81f,#94a3b847,#94a3b81f);background-size:200% 100%;animation:_ngcontent-%COMP%_prebuilt-shimmer 1.25s linear infinite}.prebuilt-library__skeleton[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:grid;gap:.75rem;
2align-content:center;padding:1.25rem}.prebuilt-library__skeleton[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{width:62%;height:.75rem;border-radius:.25rem}.prebuilt-library__skeleton[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child{width:38%}.prebuilt-library__skeleton[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:last-child{width:78%}.prebuilt-library__empty[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;max-width:90rem;margin:1rem auto 0;padding:4rem 1.5rem;text-align:center;border:1px solid var(--fuse-border, #d9e1e8);border-radius:.9rem;background:var(--fuse-bg-card, #ffffff)}.prebuilt-library__empty[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{display:grid;width:3.25rem;height:3.25rem;place-items:center;border-radius:.75rem;color:var(--fuse-primary, #2563eb);background:#2563eb17}.prebuilt-library__empty[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:1rem 0 0;font-size:1.2rem;font-weight:700}.prebuilt-library__empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:.35rem 0 1rem;color:var(--fuse-text-secondary, #607087)}.prebuilt-bundle[_ngcontent-%COMP%]{display:grid;grid-template-columns:11rem minmax(0,1fr) minmax(10rem,auto);min-height:10rem;overflow:hidden;border:1px solid var(--fuse-border, #d9e1e8);border-radius:.85rem;outline:none;background:var(--fuse-bg-card, #ffffff);box-shadow:0 .5rem 1.5rem #192d4a0a;transition:border-color .18s ease,box-shadow .18s ease,transform .18s ease}.prebuilt-bundle[_ngcontent-%COMP%]:hover{border-color:#2563eb73;box-shadow:0 .9rem 2rem #192d4a17;transform:translateY(-1px)}.prebuilt-bundle.is-selected[_ngcontent-%COMP%]{border-color:var(--fuse-primary, #2563eb);box-shadow:inset 3px 0 0 var(--fuse-primary, #2563eb),0 .9rem 2rem #192d4a14}.prebuilt-bundle__select[_ngcontent-%COMP%]{display:grid;grid-template-columns:11rem minmax(0,1fr);grid-column:span 2;min-width:0;padding:0;border:0;outline:none;color:inherit;text-align:left;background:transparent;cursor:pointer}.prebuilt-bundle__select[_ngcontent-%COMP%] > img[_ngcontent-%COMP%]{width:100%;height:100%;min-height:10rem;object-fit:cover}.prebuilt-bundle__select[_ngcontent-%COMP%]:focus-visible{box-shadow:inset 0 0 0 3px #2563eb33}.prebuilt-bundle__content[_ngcontent-%COMP%]{display:block;min-width:0;padding:1rem 1.15rem}.prebuilt-bundle__title[_ngcontent-%COMP%], .prebuilt-bundle__basis[_ngcontent-%COMP%]{display:block}.prebuilt-bundle__title[_ngcontent-%COMP%]{margin-top:.45rem;overflow:hidden;font-size:1.05rem;font-weight:700;line-height:1.35;text-overflow:ellipsis;white-space:nowrap}.prebuilt-bundle__basis[_ngcontent-%COMP%]{margin-top:.25rem;color:var(--fuse-text-secondary, #607087);font-size:.8rem}.prebuilt-bundle__route[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:.75rem;color:var(--fuse-primary, #2563eb);font-size:.72rem;font-weight:700}.prebuilt-bundle__route[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.prebuilt-bundle__route[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--fuse-text-secondary, #607087);font-size:.68rem}.prebuilt-bundle__services[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:.45rem .75rem;margin-top:1.1rem}.prebuilt-bundle__services[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.25rem;color:var(--fuse-text-secondary, #607087);font-size:.7rem;font-weight:600}.prebuilt-bundle__services[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:.95rem;height:.95rem;color:var(--fuse-primary, #2563eb);font-size:.95rem}.prebuilt-bundle__price[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:flex-end;justify-content:center;padding:1rem;border-left:1px solid var(--fuse-border, #e1e7ed);text-align:right}.prebuilt-bundle__price[_ngcontent-%COMP%] > span[_ngcontent-%COMP%], .prebuilt-bundle__price[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{color:var(--fuse-text-secondary, #607087);font-size:.65rem}.prebuilt-bundle__price[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{margin-top:.2rem;font-size:1.15rem;font-variant-numeric:tabular-nums}.prebuilt-bundle__price[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{width:100%;margin-top:.75rem;white-space:nowrap}.prebuilt-preview[_ngcontent-%COMP%]{position:sticky;top:1rem;overflow:hidden;border:1px solid var(--fuse-border, #d9e1e8);border-radius:.9rem;background:var(--fuse-bg-card, #ffffff);box-shadow:0 1.25rem 3rem #192d4a17}.prebuilt-preview__image[_ngcontent-%COMP%]{height:12rem;overflow:hidden;background:var(--fuse-bg-default, #eef2f6)}.prebuilt-preview__image[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:100%;height:100%;object-fit:cover}.prebuilt-preview__body[_ngcontent-%COMP%]{padding:1.25rem}.prebuilt-preview__body[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:.35rem 0 0;font-size:1.3rem;font-weight:750;letter-spacing:-.025em;line-height:1.25}.prebuilt-preview__destination[_ngcontent-%COMP%]{color:var(--fuse-primary, #2563eb);font-size:.72rem;font-weight:700}.prebuilt-preview__facts[_ngcontent-%COMP%]{display:grid;grid-template-columns:1.4fr .6fr;gap:.6rem;margin-top:1.2rem}.prebuilt-preview__facts[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{padding:.85rem;border-radius:.7rem;background:var(--fuse-bg-default, #f3f6f9)}.prebuilt-preview__facts[_ngcontent-%COMP%] span[_ngcontent-%COMP%], .prebuilt-preview__facts[_ngcontent-%COMP%] strong[_ngcontent-%COMP%], .prebuilt-preview__facts[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{display:block}.prebuilt-preview__facts[_ngcontent-%COMP%] span[_ngcontent-%COMP%], .prebuilt-preview__facts[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{color:var(--fuse-text-secondary, #607087);font-size:.65rem}.prebuilt-preview__facts[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{margin:.2rem 0;font-size:1.05rem;font-variant-numeric:tabular-nums}.prebuilt-preview__window[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.65rem;margin-top:.75rem;padding:.8rem;border:1px solid var(--fuse-border, #d9e1e8);border-radius:.7rem}.prebuilt-preview__window[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{flex:0 0 auto;color:var(--fuse-primary, #2563eb)}.prebuilt-preview__window[_ngcontent-%COMP%] span[_ngcontent-%COMP%], .prebuilt-preview__window[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{display:block}.prebuilt-preview__window[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--fuse-text-secondary, #607087);font-size:.65rem}.prebuilt-preview__window[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{margin-top:.2rem;font-size:.78rem}.prebuilt-preview__actions[_ngcontent-%COMP%]{display:grid;gap:.55rem;margin-top:1rem}.prebuilt-preview__actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{width:100%;white-space:nowrap}.prebuilt-preview__note[_ngcontent-%COMP%]{margin:1rem 0 0;color:var(--fuse-text-secondary, #607087);font-size:.72rem;line-height:1.5}.prebuilt-filter[_ngcontent-%COMP%]{max-width:90rem;margin:0 auto;overflow:hidden;border:1px solid var(--fuse-border, #d9e1e8);border-radius:1rem;background:var(--fuse-bg-card, #fff);box-shadow:0 1rem 2.8rem #192d4a14,inset 0 1px #fffc}.prebuilt-filter__header[_ngcontent-%COMP%]{display:grid;grid-template-columns:minmax(11.5rem,.55fr) minmax(0,2fr) auto;align-items:center;gap:.65rem;min-height:3.2rem;padding:.45rem .65rem .45rem .75rem;background:radial-gradient(circle at 0 50%,rgba(37,99,235,.07),transparent 16rem),#f8fafc}.prebuilt-filter__header[_ngcontent-%COMP%] .prebuilt-filter__intro[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem}.prebuilt-filter__header[_ngcontent-%COMP%] .prebuilt-filter__intro[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{display:grid;width:1.95rem;height:1.95rem;place-items:center;border:1px solid #d8e1eb;border-radius:.55rem;color:#395d95;background:#fff}.prebuilt-filter__header[_ngcontent-%COMP%] .prebuilt-filter__intro[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:1.05rem;height:1.05rem;font-size:1.05rem}.prebuilt-filter__header[_ngcontent-%COMP%] strong[_ngcontent-%COMP%], .prebuilt-filter__header[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{display:block}.prebuilt-filter__header[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:#2d3d51;font-size:.75rem}.prebuilt-filter__header[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{margin-top:.1rem;color:#788598;font-size:.6rem}.prebuilt-filter__header[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{min-height:2rem;border-radius:.5rem;color:#536276;font-size:.68rem;font-weight:700}.prebuilt-filter__header[_ngcontent-%COMP%] > button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:1rem;height:1rem;margin-right:.35rem;font-size:1rem}.prebuilt-filter__tier[_ngcontent-%COMP%]{display:grid;grid-template-columns:10rem minmax(0,1fr);gap:.75rem;padding:.6rem .75rem;border-top:1px solid #e2e7ec}.prebuilt-filter__tier--quick[_ngcontent-%COMP%]{background:#fff}.prebuilt-filter__tier--main[_ngcontent-%COMP%]{grid-template-columns:minmax(0,1fr);background:#fff}.prebuilt-filter__tier--refine[_ngcontent-%COMP%]{grid-template-columns:7.5rem minmax(0,1fr) auto;align-items:center;padding-block:.48rem;background:radial-gradient(circle at 0 50%,rgba(37,99,235,.05),transparent 14rem),#f8fafc}.prebuilt-filter__tier-title[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.55rem;padding-top:.25rem}.prebuilt-filter__tier-title[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{display:grid;flex:0 0 1.55rem;width:1.55rem;height:1.55rem;place-items:center;border:1px solid #d8e1eb;border-radius:.4rem;color:#315285;background:#fff;font-size:.55rem;font-weight:800;font-variant-numeric:tabular-nums}.prebuilt-filter__tier-title[_ngcontent-%COMP%] strong[_ngcontent-%COMP%], .prebuilt-filter__tier-title[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{display:block}.prebuilt-filter__tier-title[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:#344458;font-size:.68rem}.prebuilt-filter__tier-title[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{max-width:16ch;margin-top:.15rem;color:#8490a0;font-size:.55rem;line-height:1.35}.prebuilt-filter__quick-groups[_ngcontent-%COMP%]{display:grid;grid-template-columns:minmax(10rem,.75fr) minmax(18rem,1.25fr);gap:.7rem;min-width:0}.prebuilt-filter__quick-groups[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{min-width:0}.prebuilt-filter__quick-groups[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{display:block;margin-bottom:.22rem;color:#748194;font-size:.56rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase}.prebuilt-filter__quick-groups[_ngcontent-%COMP%] nav[_ngcontent-%COMP%]{display:flex;gap:.3rem;min-width:0;overflow-x:auto;scrollbar-width:thin}.prebuilt-filter__quick-groups[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{flex:0 0 auto;min-height:1.75rem;padding:.22rem .55rem;border:1px solid #dce3e9;border-radius:.45rem;color:#536276;background:#f8fafb;font-size:.62rem;font-weight:700;transition:border-color .16s ease,color .16s ease,background .16s ease,transform .16s ease}.prebuilt-filter__quick-groups[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{border-color:#9eafc3;color:#263b5c;background:#fff;transform:translateY(-1px)}.prebuilt-filter__quick-groups[_ngcontent-%COMP%] button.is-active[_ngcontent-%COMP%]{border-color:#315a9d;color:#fff;background:#315a9d;box-shadow:0 .4rem .9rem #315a9d2e}.prebuilt-filter__quick-groups[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:focus-visible{outline:3px solid rgba(49,90,157,.16);outline-offset:2px}.prebuilt-filter__refine-label[_ngcontent-%COMP%] strong[_ngcontent-%COMP%], .prebuilt-filter__refine-label[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{display:block}.prebuilt-filter__refine-label[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:#344458;font-size:.68rem}.prebuilt-filter__refine-label[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{margin-top:.12rem;color:#8490a0;font-size:.55rem}.prebuilt-filter__main-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:minmax(13rem,2fr) minmax(10rem,1.1fr) minmax(6.5rem,.7fr) minmax(6.5rem,.7fr) minmax(13rem,1.45fr) minmax(11rem,1.1fr);align-items:end;gap:.55rem;min-width:0}.prebuilt-filter__main-grid[_ngcontent-%COMP%] > mat-form-field[_ngcontent-%COMP%]{width:100%;min-width:0}.prebuilt-filter__main-grid[_ngcontent-%COMP%] .prebuilt-library__search[_ngcontent-%COMP%]{min-height:2.8rem}.prebuilt-filter__main-grid[_ngcontent-%COMP%] .prebuilt-library__filter-field[_ngcontent-%COMP%] > label[_ngcontent-%COMP%]{margin-bottom:.25rem}.prebuilt-filter__main-grid[_ngcontent-%COMP%] .prebuilt-library__filter-field--price[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{min-height:2.8rem}.prebuilt-filter__main-grid[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%]{--mat-form-field-container-height: 2.8rem;--mat-form-field-container-vertical-padding: .65rem}.prebuilt-filter[_ngcontent-%COMP%] .prebuilt-library__services[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{min-height:1.8rem;padding:.2rem .55rem}.prebuilt-filter[_ngcontent-%COMP%] .prebuilt-library__clear[_ngcontent-%COMP%]{min-height:1.9rem}.prebuilt-filter[_ngcontent-%COMP%] .prebuilt-library__search[_ngcontent-%COMP%]{padding-inline:.75rem}.prebuilt-filter[_ngcontent-%COMP%] .prebuilt-library__search[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:1.05rem;height:1.05rem;font-size:1.05rem}.prebuilt-library__count[_ngcontent-%COMP%] > i[_ngcontent-%COMP%]{width:.65rem;height:.65rem;border:2px solid rgba(37,99,235,.22);border-top-color:var(--fuse-primary, #2563eb);border-radius:50%;animation:_ngcontent-%COMP%_prebuilt-spin .8s linear infinite}.prebuilt-library__loading-copy[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.7rem;padding:.9rem 1rem;border:1px solid #d9e1e8;border-radius:.75rem;color:#344458;background:#ffffffd1}.prebuilt-library__loading-copy[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{width:.7rem;height:.7rem;border:2px solid rgba(37,99,235,.22);border-top-color:var(--fuse-primary, #2563eb);border-radius:50%;animation:_ngcontent-%COMP%_prebuilt-spin .8s linear infinite}.prebuilt-library__loading-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%], .prebuilt-library__loading-copy[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{display:block}.prebuilt-library__loading-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-size:.75rem}.prebuilt-library__loading-copy[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:.12rem 0 0;color:var(--fuse-text-secondary, #607087);font-size:.62rem}.prebuilt-library__clear[_ngcontent-%COMP%]{min-height:2.35rem;border-radius:.5rem;color:#647286;font-size:.65rem;white-space:nowrap}.prebuilt-library__clear[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:.95rem;height:.95rem;margin-right:.3rem;font-size:.95rem}@keyframes _ngcontent-%COMP%_prebuilt-spin{to{transform:rotate(360deg)}}[_nghost-%COMP%] .prebuilt-library__searchbar .mat-mdc-form-field-subscript-wrapper, [_nghost-%COMP%] .prebuilt-library__filters .mat-mdc-form-field-subscript-wrapper, [_nghost-%COMP%] .prebuilt-filter .mat-mdc-form-field-subscript-wrapper{display:none}[_nghost-%COMP%] .prebuilt-packages-select-panel{max-height:19rem;border-radius:.65rem;box-shadow:0 1rem 2.5rem #0f172a2e}@keyframes _ngcontent-%COMP%_prebuilt-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}@media (max-width: 1199px){.prebuilt-filter__main-grid[_ngcontent-%COMP%]{grid-template-columns:repeat(3,minmax(0,1fr))}.prebuilt-filter__main-grid[_ngcontent-%COMP%] .prebuilt-library__search[_ngcontent-%COMP%], .prebuilt-filter__main-grid[_ngcontent-%COMP%] .prebuilt-library__filter-field--price[_ngcontent-%COMP%]{grid-column:span 2}.prebuilt-library__filters[_ngcontent-%COMP%]{grid-template-columns:repeat(3,minmax(0,1fr))}.prebuilt-library__services[_ngcontent-%COMP%]{grid-column:span 2}}@media (max-width: 1023px){.prebuilt-filter__header[_ngcontent-%COMP%]{grid-template-columns:minmax(0,1fr) auto}.prebuilt-filter__header[_ngcontent-%COMP%] .prebuilt-filter__quick-groups[_ngcontent-%COMP%]{grid-column:1/-1;grid-row:2}.prebuilt-filter__tier[_ngcontent-%COMP%], .prebuilt-filter__tier--refine[_ngcontent-%COMP%]{grid-template-columns:1fr}.prebuilt-filter__tier-title[_ngcontent-%COMP%]{align-items:center}.prebuilt-filter__tier-title[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{max-width:none}.prebuilt-library__workspace[_ngconten
2t-%COMP%]{grid-template-columns:1fr}.prebuilt-preview[_ngcontent-%COMP%]{position:static;display:grid;grid-template-columns:minmax(15rem,.8fr) minmax(0,1.2fr)}.prebuilt-preview__image[_ngcontent-%COMP%]{height:100%;min-height:20rem}}@media (max-width: 767px){.prebuilt-filter__header[_ngcontent-%COMP%]{align-items:flex-start}.prebuilt-filter__header[_ngcontent-%COMP%] .prebuilt-filter__intro[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{display:none}.prebuilt-filter__header[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{flex:0 0 auto}.prebuilt-filter__main-grid[_ngcontent-%COMP%]{grid-template-columns:1fr 1fr}.prebuilt-filter__main-grid[_ngcontent-%COMP%] .prebuilt-library__search[_ngcontent-%COMP%], .prebuilt-filter__main-grid[_ngcontent-%COMP%] .prebuilt-library__filter-field--price[_ngcontent-%COMP%]{grid-column:1/-1}.prebuilt-library[_ngcontent-%COMP%]{padding:1rem}.prebuilt-library__header[_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column;gap:1rem}.prebuilt-library__searchbar[_ngcontent-%COMP%]{grid-template-columns:1fr auto}.prebuilt-library__search[_ngcontent-%COMP%]{grid-column:1/-1}.prebuilt-library__filters[_ngcontent-%COMP%]{grid-template-columns:1fr}.prebuilt-library__services[_ngcontent-%COMP%]{grid-column:auto}.prebuilt-bundle[_ngcontent-%COMP%], .prebuilt-bundle__select[_ngcontent-%COMP%]{grid-template-columns:7rem minmax(0,1fr)}.prebuilt-bundle__select[_ngcontent-%COMP%] > img[_ngcontent-%COMP%]{min-height:9rem}.prebuilt-bundle__price[_ngcontent-%COMP%]{grid-column:1/-1;align-items:flex-start;border-top:1px solid var(--fuse-border, #e1e7ed);border-left:0;text-align:left}.prebuilt-bundle__price[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{width:auto}.prebuilt-bundle__title[_ngcontent-%COMP%]{white-space:normal}.prebuilt-preview[_ngcontent-%COMP%]{display:block}.prebuilt-preview__image[_ngcontent-%COMP%]{height:13rem;min-height:0}}@media (max-width: 479px){.prebuilt-filter__header[_ngcontent-%COMP%] .prebuilt-filter__intro[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{display:none}.prebuilt-filter__header[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{min-width:auto;padding:0 .5rem}.prebuilt-filter__tier[_ngcontent-%COMP%]{padding:.8rem}.prebuilt-filter__quick-groups[_ngcontent-%COMP%], .prebuilt-filter__main-grid[_ngcontent-%COMP%]{grid-template-columns:1fr}.prebuilt-filter__main-grid[_ngcontent-%COMP%] .prebuilt-library__search[_ngcontent-%COMP%], .prebuilt-filter__main-grid[_ngcontent-%COMP%] .prebuilt-library__filter-field--price[_ngcontent-%COMP%]{grid-column:auto}.prebuilt-library__searchbar[_ngcontent-%COMP%]{grid-template-columns:1fr}.prebuilt-library__search[_ngcontent-%COMP%]{grid-column:auto}.prebuilt-bundle[_ngcontent-%COMP%]{grid-template-columns:1fr}.prebuilt-bundle__select[_ngcontent-%COMP%]{grid-column:auto;grid-template-columns:1fr}.prebuilt-bundle__select[_ngcontent-%COMP%] > img[_ngcontent-%COMP%]{height:10rem;min-height:0}}@media (prefers-reduced-motion: reduce){.prebuilt-library__skeleton[_ngcontent-%COMP%] > span[_ngcontent-%COMP%], .prebuilt-library__skeleton[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{animation:none}.prebuilt-bundle[_ngcontent-%COMP%]{transition:none}}"]})}}return a})();var oo=["drawer"],lo=["drawerRight"],so=(a,d)=>d.id,co=()=>({loadCache:!1,compactColumns:!0}),mo=a=>["/quote/packages/",a],po=(a,d)=>({"hover:bg-gray-100 dark:hover:bg-hover":a,"bg-primary-50 dark:bg-hover":d}),uo=(a,d)=>({"text-hint":a,"text-primary dark:text-primary-500":d}),_o=a=>({"text-primary dark:text-primary-500":a}),go=()=>["/quote/packages/popular"],ho=()=>({type:"multitype"});function fo(a,d){a&1&&(r(0,"small"),s(1,"Coming soon"),o())}function vo(a,d){if(a&1){let e=P();j(0),r(1,"a",25),v("click",function(i){let n=g(e).$implicit;return h(n.disabled&&i.preventDefault())}),_(2,"mat-icon",26),r(3,"div",27)(4,"div",28)(5,"span",29),s(6),o(),x(7,fo,2,0,"small"),o(),r(8,"div",30),s(9),o()()(),Q()}if(a&2){let e=d.$implicit,t=c();l(),T("disabled",e.disabled),p("routerLink",e.disabled?null:Ie(11,mo,e.id))("ngClass",ae(13,po,!e.disabled&&(!t.selectedPanel||t.selectedPanel!==e.id),t.selectedPanel&&t.selectedPanel===e.id)),E("aria-disabled",e.disabled),l(),p("ngClass",ae(16,uo,!t.selectedPanel||t.selectedPanel!==e.id,t.selectedPanel&&t.selectedPanel===e.id))("svgIcon",e.icon),l(3),p("ngClass",Ie(19,_o,t.selectedPanel&&t.selectedPanel===e.id)),l(),k(" ",e.title," "),l(),f(e.disabled?7:-1),l(2),k(" ",e.de
2scription," ")}}function bo(a,d){if(a&1&&(r(0,"em"),s(1),o()),a&2){let e=c(2);l(),w(e.quoteItemCount())}}function Co(a,d){if(a&1){let e=P();r(0,"button",31),v("click",function(){g(e);let i=c();return h(i.openQuoteReview())}),_(1,"mat-icon",9),r(2,"span"),s(3,"Quote review"),o(),x(4,bo,2,1,"em"),o()}if(a&2){let e=c();T("packages-shell__command--ready",e.quoteItemCount()>0),p("disabled",e.quoteItemCount()===0&&!e.showQuoteDrawer()),l(),p("svgIcon","heroicons_outline:document-text"),l(3),f(e.quoteItemCount()>0?4:-1)}}function xo(a,d){if(a&1&&(r(0,"section",22)(1,"span"),_(2,"mat-icon",9),o(),r(3,"small"),s(4,"In preview on UAT"),o(),r(5,"h1",32),s(6),o(),r(7,"p"),s(8," This workspace is coming soon. Use Express Packages while we finish production validation. "),o(),r(9,"a",33),s(10," Open Express Packages "),o()()),a&2){let e,t,i=c();l(2),p("svgIcon",((e=i.getPanelInfo(i.selectedPanel))==null?null:e.icon)||"heroicons_outline:clock"),l(4),w((t=i.getPanelInfo(i.selectedPanel))==null?null:t.title),l(3),p("routerLink",ie(3,go))}}function wo(a,d){a&1&&_(0,"builder",34),a&2&&p("options",ie(1,ho))}function yo(a,d){a&1&&_(0,"popular-packages")}function ko(a,d){a&1&&_(0,"prebuilt-packages")}function So(a,d){a&1&&_(0,"best-deals")}function Po(a,d){a&1&&_(0,"promotional-offers")}function Mo(a,d){a&1&&_(0,"deal-of-the-week")}function To(a,d){a&1&&_(0,"temp-cards")}function Eo(a,d){if(a&1&&x(0,wo,1,2,"builder",34)(1,yo,1,0,"popular-packages")(2,ko,1,0,"prebuilt-packages")(3,So,1,0,"best-deals")(4,Po,1,0,"promotional-offers")(5,Mo,1,0,"deal-of-the-week")(6,To,1,0,"temp-cards"),a&2){let e,t=c();f((e=t.selectedPanel)==="builder"?0:e==="popular"?1:e==="prebuilt"?2:e==="best-deals"?3:e==="promotional-offers"?4:e==="deal-of-the-week"?5:6)}}var nt=(()=>{class a{constructor(e,t,i,n,m){this._changeDetectorRef=e,this._fuseMediaWatcherService=t,this._tfmCartService=i,this._route=n,this._tfmService=m,this.drawerMode="side",this.drawerOpened=!0,this.panels=[],this.selectedPanel="",this.pageTitle="Packages",this._unsubscribeAll=new Oe,this.tripChange=new fe,this.cartChange=new fe,this.view={data:{cart:[]},drawers:{review:{}}}}ngOnInit(){let e=this._tfmService.previewPackageFeaturesEnabled;this.panels=[{id:"popular",icon:"mat_outline:explore",title:"Express Packages",description:"Live package search"},{id:"prebuilt",icon:"mat_outline:tour",title:"Pre-built Packages",description:e?"Bundle landing and quick book":"Coming soon",disabled:!e},{id:"builder",icon:"mat_outline:travel_explore",title:"Package Builder",description:e?"Build and customise any route":"Coming soon",disabled:!e},{id:"best-deals",icon:"heroicons_outline:gift",title:"Best Deals",description:"Unbeatable prices",disabled:!0},{id:"promotional-offers",icon:"feather:heart",title:"Promotional Offers",description:"Unlock big savings",disabled:!0},{id:"deal-of-the-week",icon:"heroicons_outline:fire",title:"Deal of the Week",description:"Unlock big savings",disabled:!0}],this._route.params.subscribe(t=>{let i=this._route.snapshot.paramMap.get("view");this.view.view=i==="express-v2"?"popular":i,this.getPanelInfo(this.view.view)||(this.view.view="popular"),this.selectedPanel=this.view.view}),this._fuseMediaWatcherService.onMediaChange$.pipe(re(this._unsubscribeAll)).subscribe(({matchingAliases:t})=>{t.includes("lg")?(this.drawerMode="side",this.drawerOpened=!this.selectedPanel):(this.drawerMode="over",this.drawerOpened=!this.selectedPanel),this._changeDetectorRef.markForCheck()}),this.view.tripChange$=this._tfmCartService.tripChange.subscribe(t=>{this.view.trip=t}),this.view.data.cart=this._tfmCartService.getCart()??[],this.view.cartChange$=this._tfmCartService.cartChange.subscribe(t=>{this.view.data.cart=t,this._changeDetectorRef.markForCheck()}),this._tfmCartService.cartDrawerDismissed$.pipe(re(this._unsubscribeAll)).subscribe(()=>{this._changeDetectorRef.markForCheck()}),this.view.itinGuidChange$=this._tfmService.itinGuidChange.subscribe(t=>{this.view.itinGuid=this._tfmService.getLocalItinGuid(),this._changeDetectorRef.detectChanges()}),this.view.itinGuid=this._tfmService.getLocalItinGuid()}ngOnDestroy(){this.view.tripChange$.unsubscribe(),this.view.cartChange$.unsubscribe(),this._unsubscribeAll.next(null),this._unsubscribeAll.complete()}
2tripChanged(e){this.tripChange.emit(e)}cartChanged(e){this.cartChange.emit(e)}viewChanged(e){this.view.drawerOptions=e,this._changeDetectorRef.markForCheck()}showQuoteDrawer(){return jt(this._tfmService,(this.view.data?.cart?.length??0)>0,this.view.itinGuid)}quoteItemCount(){return this.view.data?.cart?.length??0}openQuoteReview(){this._tfmCartService.requestOpenQuoteReview(),this.drawerRight?.open(),this._changeDetectorRef.markForCheck()}onMainContentClick(e){let t=e.target;t.closest("mat-drawer")||t.closest("cart")||this._tfmCartService.requestCollapseReviewToSummary()}isCartDrawerOpen(){return!!(this.view.data.cart&&this.view.data.cart.length>0)||!!this.view.itinGuid&&!this._tfmCartService.isCartDrawerDismissed()}goToPanel(e){this.selectedPanel=e,this.drawerMode==="over"&&this.drawer.close()}getPanelInfo(e){return this.panels.find(t=>t.id===e)}isPanelAvailable(e){let t=this.getPanelInfo(e);return!!t&&!t.disabled}trackByFn(e,t){return t.id||e}static{this.\u0275fac=function(t){return new(t||a)(V(be),V(Vt),V(Se),V(ft),V(we))}}static{this.\u0275cmp=G({type:a,selectors:[["packages"]],viewQuery:function(t,i){if(t&1&&(pe(oo,5),pe(lo,5)),t&2){let n;ue(n=_e())&&(i.drawer=n.first),ue(n=_e())&&(i.drawerRight=n.first)}},outputs:{tripChange:"tripChange",cartChange:"cartChange"},standalone:!0,features:[Z],decls:37,vars:21,consts:[["drawer",""],["drawerRight",""],[1,"flex","flex-col","w-full","min-w-0","sm:absolute","sm:inset-0","sm:overflow-hidden"],[1,"flex-auto","sm:h-full"],[1,"dark:bg-gray-900",3,"autoFocus","mode","opened"],[1,"flex","items-center","justify-between","m-8","mr-6","sm:my-10"],[1,"text-4xl","font-extrabold","tracking-tight","leading-none"],[1,"lg:hidden"],["mat-icon-button","",3,"click"],[3,"svgIcon"],[1,"flex","flex-col","divide-y","border-t","border-b"],[1,"flex","flex-col"],[1,"packages-shell__main",3,"click"],[1,"packages-shell__commandbar"],["mat-button","","type","button","aria-label","Open package options",1,"packages-shell__command",3,"click"],["aria-label","Current package workspace",1,"packages-shell__location"],["mat-button","","type","button","aria-label","Open quote review",1,"packages-shell__command","packages-shell__command--quote",3,"packages-shell__command--ready","disabled"],[1,"packages-shell__panel"],["viewBox","0 0 960 540","width","100%","height","100%","preserveAspectRatio","xMidYMax slice","xmlns","http://www.w3.org/2000/svg",1,"-z-1","absolute","inset-0"],["fill","none","stroke","currentColor","stroke-width","100",1,"opacity-40","text-gray-200","dark:text-gray-800"],["r","234","cx","196","cy","23"],["r","234","cx","790","cy","491"],["aria-labelledby","package-coming-soon-title",1,"packages-shell__coming-soon"],[1,"dark:bg-gray-900","transition-all","duration-500",3,"position","autoFocus","mode","disableClose","opened"],[3,"viewChange","options"],[1,"flex","px-8","py-5","cursor-pointer",3,"click","routerLink","ngClass"],[3,"ngClass","svgIcon"],[1,"ml-3"],[1,"packages-shell__panel-title"],[1,"font-medium","leading-6",3,"ngClass"],[1,"mt-0.5","text-secondary"],["mat-button","","type","button","aria-label","Open quote review",1,"packages-shell__command","packages-shell__command--quote",3,"click","disabled"],["id","package-coming-soon-title"],["mat-flat-button","","color","primary",3,"routerLink"],[3,"options"]],template:function(t,i){if(t&1){let n=P();r(0,"div",2)(1,"mat-drawer-container",3)(2,"mat-drawer",4,0)(4,"div",5)(5,"div",6),s(6),o(),r(7,"div",7)(8,"button",8),v("click",function(){g(n);let u=Ye(3);return h(u.close())}),_(9,"mat-icon",9),o()()(),r(10,"div",10),I(11,vo,10,21,"ng-container",null,so),o()(),r(13,"mat-drawer-content",11)(14,"div",12),v("click",function(u){return g(n),h(i.onMainContentClick(u))}),r(15,"header",13)(16,"button",14),v("click",function(){g(n);let u=Ye(3);return h(u.toggle())}),_(17,"mat-icon",9),r(18,"span"),s(19,"Package options"),o()(),r(20,"div",15)(21,"span"),s(22,"Packages"),o(),_(23,"mat-icon",9),r(24,"strong"),s(25),o()(),x(26,Co,5,5,"button",16),o(),r(27,"div",17),lt(),r(28,"svg",18)(29,"g",19),_(30,"circle",20)(31,"circle",21),o()(),x(32,xo,11,4,"section",22)(33,Eo,7,1),o()()(),st(),r(34,"mat-drawer",23,1)(36,"cart",24),v("viewChange",function(u){return g(n),h(i.viewChanged(u))}),o()()()()}if(t&2){let n;l(2),p("autoFocus",!1)("mode",i.drawerMode)("opened",i.drawerOpened),l(4),w(i.pageTitle),l(3),p("svgIcon","heroicons_outline:x-mark"),l(2),F(i.panels),l(6),p("svgIcon","mat_outline:tune"),l(6),p("svgIcon","heroicons_mini:chevron-right"),l(2),w(((n=i.getPanelInfo(i.selectedPanel))==null?null:n.title)||"Overview"),l(),f(i.selectedPanel!=="popular"?26:-1),l(6),f(i.isPanelAvailable(i.selectedPanel)?33:32),l(2),T("sm:w-80",!i.view.drawerOptions||i.view.drawerOptions.mode!="review")("w-[85%]",i.view.drawerOptions&&i.view.drawerOptions.mode=="review"),p("position","end")("autoFocus",!1)("mode","over")("disableClose",!1)("opened",i.showQuoteDrawer()),l(2),p("options",ie(20,co))}},dependencies:[ce,de,X,Tt,Y,xe,H,U,Ge,Qe,We,je,Ei,fi,bi,Ci,vi,Ii,Oi,ai,Ct,bt],styles:[`.packages-shell a.disabled{cursor:not-allowed;background:#f8fafc}.packages-shell a.disabled mat-icon{color:#94a3b8!important}.packages-shell__main{position:relative;min-width:0;min-height:0;overflow:auto;flex:1 1 auto}.packages-shell__commandbar{position:sticky;top:0;z-index:30;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;min-height:2.75rem;padding:.3rem .75rem;border-bottom:1px solid #e0e6ec;background:#f8fafcf0;box-shadow:0 .25rem 1rem #22324609;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.packages-shell__command{justify-self:start;min-height:2.1rem;padding-inline:.55rem!important;border-radius:.48rem!important;color:#516175!important;font-size:.67rem;font-weight:750}.packages-shell__command mat-icon{width:1rem;height:1rem;margin-right:.35rem;font-size:1rem}.packages-shell__command:hover{color:#203147!important;background:#eaf0f5!important}.packages-shell__command--quote{justify-self:end;min-height:2.45rem;padding-inline:.75rem!important;color:#fff!important;background:#a86517!important;font-size:.92rem!important;box-shadow:0 .25rem .7rem #a8651747}.packages-shell__command--quote:not(:disabled):hover{color:#fff!important;background:#8f5412!important}.packages-shell__command--quote:disabled{color:#fff!important;background:#c4a078!important;box-shadow:none;opacity:.85}.packages-shell__command--quote mat-icon{width:1.2rem;height:1.2rem;font-size:1.2rem}.packages-shell__command--quote em{display:inline-grid;min-width:1.3rem;height:1.3rem;margin-left:.4rem;place-items:center;border-radius:999px;color:#a86517;background:#fff8ec;font-size:.75rem;font-style:normal;font-weight:800;line-height:1}.packages-shell__command--ready{color:#fff!important;background:#a86517!important}.packages-shell__command--ready:hover{color:#fff!important;background:#8f5412!important}
2.packages-shell__location{display:flex;align-items:center;justify-content:center;gap:.35rem;min-width:0;color:#8994a2;font-size:.65rem}.packages-shell__location mat-icon{width:.8rem;height:.8rem;color:#a3acb7;font-size:.8rem}.packages-shell__location strong{max-width:15rem;overflow:hidden;color:#344458;font-weight:750;text-overflow:ellipsis;white-space:nowrap}.packages-shell__panel{position:relative;min-width:0}.packages-shell__panel-title{display:flex;align-items:center;gap:.5rem}.packages-shell__panel-title small{padding:.14rem .38rem;border:1px solid #e3c99f;border-radius:.28rem;color:#81551f;background:#fff7e8;font-size:.55rem;font-weight:800;letter-spacing:.04em;line-height:1.25;text-transform:uppercase;white-space:nowrap}.packages-shell__coming-soon{display:flex;align-items:center;justify-content:center;flex-direction:column;min-height:calc(100dvh - 6rem);padding:2rem;color:#23282f;text-align:center}.packages-shell__coming-soon>span{display:grid;width:3.25rem;height:3.25rem;margin-bottom:1rem;place-items:center;border-radius:.9rem;color:#9a5c13;background:#fff3df}.packages-shell__coming-soon mat-icon{width:1.6rem;height:1.6rem;font-size:1.6rem}.packages-shell__coming-soon small{color:#9a5c13;font-size:.65rem;font-weight:800;letter-spacing:.09em;text-transform:uppercase}.packages-shell__coming-soon h1{margin:.4rem 0 0;font-size:clamp(1.8rem,4vw,3rem);font-weight:800;letter-spacing:-.045em}.packages-shell__coming-soon p{max-width:32rem;margin:.75rem 0 1.25rem;color:#687689;font-size:.88rem;line-height:1.65}.packages-shell__coming-soon a{border-radius:.55rem!important}.dark .packages-shell__commandbar{border-color:#303b48;background:#141c26f0}.dark .packages-shell__command{color:#aab5c3!important}.dark .packages-shell__command:hover{color:#eef2f6!important;background:#263240!important}.dark .packages-shell__command--quote,.dark .packages-shell__command--ready{color:#fff!important;background:#a86517!important}.dark .packages-shell__command--quote:hover,.dark .packages-shell__command--quote:not(:disabled):hover,.dark .packages-shell__command--ready:hover,.dark .packages-shell__command--ready:not(:disabled):hover{color:#fff!important;background:#8f5412!important}.dark .packages-shell__location strong{color:#dfe6ee}.dark .packages-shell__coming-soon{color:#eef2f6}.dark .packages-shell__coming-soon p{color:#9ba7b6}@media (max-width: 599px){.packages-shell__commandbar{grid-template-columns:1fr auto;min-height:2.5rem;padding-inline:.4rem}.packages-shell__location,.packages-shell__command span{display:none}.packages-shell__command mat-icon{margin-right:0}} 3`],encapsulation:2,changeDetection:0})}}return a})();var Ys=[{path:"",component:nt},{path:":view",component:nt}];export{Ys as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.